[생활코딩] Docker 입문 수업 - 네트워크/ 명령어 실행

네트워크
기초 개념 / docker desktop을 활용한 실습 / command line을 활용한 실습
01. 네트워크 개념
- Server/Client/Port 등의 개념이 익숙하지 않다면? https://www.opentutorials.org/course/3084
- 네트워크에 대한 좀 더 깊은 내용을 원한다면? https://www.opentutorials.org/course/3265
1. Docker를 사용하지 않고, Web Server를 사용하는 방법

. 컴퓨터에는 65535개의 포트가 있고, 컴퓨터에 설치되어있는 여러 S/W들을 네트워크적으로 구분해줌
. 위 그림의 우리의 Web Server는 80번 포트에서 접속을 대기하도록 설정되어있는 상태.
. http://example.com:80/index.html
→ example.com에 접속하는데, 80번 포트로 접속함
→ 80번 포트에는 web server가 대기중이라 web server로 요청이 전달됨
→ Web server는 정해진 file system 경로에서 index.html 파일을 찾는다
→ index.html 파일을 읽어서 web browser에게 전달
2. Docker를 사용하여 Web Server를 사용하는 방법

. docker를 이용하면 web server가 container에 설치됨
. container와 host 모두 각자 독립적인 실행환경이므로, 각자의 포트와 file system을 갖고 있다.
. 따라서 host와 container의 포트를 연결해주는 작업이 필요하다. (= port forwarding)
docker run -p 80:80 httpd
// host의 80번 포트와 container의 80번 포트를 연결하라는 의미
// 앞의 80이 host의 포트, 뒤의 80이 container의 포트이다.
02. 네트워크 실습 - ① Docker Desktop에서 하는 방법
docker를 사용하여 index.html을 실행해봅시다.
1. httpd 이미지 다운 → docker pull httpd

2. container run
① docker desktop에서 run 버튼을 클릭해 실행한다.

② 옵션은 우선, container name을 지정해주고, ports를 지정한다.
. Ports > Local Host: localhost 몇번 포트로 들어왔을 때, container의 80번 포트로 들어갈 것인가를 지정
→ container의 80번 포트는 image를 만든 사람이 지정한 것

3. 실행 결과

02. 네트워크 실습 - ② Command line에서 하는 방법
docker를 사용하여 index.html을 실행해봅시다.
1. 명령어docker run [OPTIONS] IMAGE [COMMAND] [ARG...] // --publish , -p: Publish a container’s port(s) to the host // container의 port를 host로 연결한다
2. 실행 결과


02. 네트워크 실습 - ③ web browser에서 출력하기
접속화면, 로그
- localhost:8080/index.html을 통해 접속 화면

- 접속 시, 확인되는 로그

명령어 실행
Container / index.html 파일 수정
03. Container 수정 - ① docker desktop에서 하는 방법index.html을 이용해 나의 웹앱을 만들 것이다!
- Container에서 "Open in terminal" 을 클릭

- terminal 창이 뜨고, 그 안에서 명령어를 수행할 수 있다.
→ 이때 수행 되는 명령어는, host에서 한 것이 아니라 container 안으로 들어가서 명령어를 실행한 것이다.

03. Container 수정 - ② command line에서 하는 방법
index.html을 이용해 나의 웹앱을 만들 것이다!
1. 명령어
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
// CONTAINER: 명령을 전달하고 싶은 CONTAINER의 이름을 지정
// COMMAND: 실행 시키고 싶은 명령을 지정
2. 실행 결과

✨ container와 지속적으로 연결을 유지하면서, 명령을 전달하고 싶을 때?
→ "-it" 라는 옵션을 통해 컨테이너의 연결을 유지할 수 있다.

💬 /bin/sh ?
→ 본쉘 이라는 프로그램을 실행함
→ 하는 역할 = 사용자가 입력한 명령어를 쉘 프로그램으로 받아서 운영체제에게 전달해주는 창구같은 역할
→ /bin/bash = bash 쉘
✨container와의 지속적 연결을 끊고 싶을 때?
→ "exit" 명령어로 연결을 끊고, 이후부터는 host에 명령어를 내릴 수 있다.

04. Web Server의 index.html 파일을 수정해보자.
1. index.html과 같은 파일들이 어느 경로에 저장되어있는지 확인한다.
→ hub.docker.com의 메뉴얼에 가서 찾아보면 된다!

2. 메뉴얼에 적힌 경로를 container 안에서 들어가본다.

3. 필요에 따라 에디터를 설치해준다.
. vim, nano 같은 에디터는 보통 없다.
. container의 덕목은 용량이 작은 것! → 기본적으로 잘 포함시키지 않는다.
. nano 에디터 설치: apt update → apt install nano

4. 에디터를 통해 index.html 파일을 열어 수정하고 저장!
nano index.html
// NANO 에디터 사용방법: https://opentutorials.org/module/3747/22523
ctrl+x -> y -> enter
// 저장 후 종료

5. 새로고침하면 변경된 화면이 보여진다.

📌 출처
수업소개 - 생활코딩
수업소개 도커가 무엇인지 소개합니다. 강의
opentutorials.org