intro.

도커를 사용하는 주목적은 웹 사이트, 배치 프로세스, 데이터베이스 같은 서버 애플리케이션을 백그라운드에서 계속 동작하게 하는 형태일 것이다.

docker container ls

현재 실행 중인 컨테이너가 없는 것을 확인할 수 있다.


컨테이너 생성

docker container run --detach --publish 8088:80 (docker image)

github에서 가져온 도커 이미지를 통해 컨테이너를 생성
사용된 이미지에는 아파치 웹 서버와 간단한 HTML 페이지를 담고 있다.

 

컨테이너가 백그라운드에서 동작하면서 네트워크를 listen 하게 하기 위해서는 docker container run 명령에 다음과 같은 플래그들을 적용해주어야 한다.

  • --detach : 컨테이너를 백그라운드에서 실행하며 컨테이너의 ID를 출력한다.
  • --publish : 컨테이너의 포트를 호스트 컴퓨터에게 공개한다.

컨테이너의 포트를 호스트 컴퓨터에 공개하는 원리

도커를 다운로드하면 호스트 컴퓨터의 네트워크 계층에 도커가 끼어들게 된다. 그러면 호스트 컴퓨터에 지나가는 네트워크 트래픽을 모두 도커가 가로채 그중 필요한 것만 컨테이너에 전달할 수가 있다.

컨테이너는 기본적으로 외부 환경에 노출되지 않기 때문에, 각 컨테이너가 고유의 IP 주소를 가져도, 이 IP가 호스트 컴퓨터에 연결된 물리 네트워크를 의미하는 것이 아닌, 도커가 관리하는 내부 가상 네트워크의 주소이다.

컨테이너의 포트를 공개한다는 것은 도커가 호스트 컴퓨터의 포트를 해당 포트로 들어오는 트래픽을 컨테이너로 전달해 주는 것이다. 위 컨테이너 포트에서는 8080번 포트로 들어오는 트래픽을 컨테이너의 80번 포트로 전달하는 것을 확인할 수 있다.

 

위 그림에서 172.0.5.1은 도커가 부여한 도커 가상 네트워크의 주소다. 이 주소는 도커 내부에만 존재하는 주소이기 때문에 호스트 컴퓨터가 연결된 물리 네트워크의 컴퓨터는 컨테이너의 IP 주소에 접근할 수 없다. 그러나 컨테이너의 포트가 공개되어 컨테이너로 트래픽을 전달할 수는 있다.


웹 사이트 접속

브라우저에서 http://localhost:8080 페이지에 접근한 이미지다. HTTP 요청은 로컬 컴퓨터에서 보낸 것인데, HTTP 응답은 컨테이너로부터 나온 것

 

이 웹 페이지는 웹 서버와 함께 이미지로 패키징 되는 것으로 도커의 이식성과 효율성을 보여준다.

컨테이너 하나만 실행함으로써 전체 애플리케이션 스택이 실행되는 것이다.

이 컨테이너의 애플리케이션은 계속 실행된 상태이므로 컨테이너 또한 계속 실행 상태가 된다.

docker container stats # 실행중인 컨테이너의 상태 확인 가능.
#위 명령어로 실시간으로 컨테이너의 CPU, 메모리, 네트워크, 디스크 사용량을 볼 수 있다.

 

 

docker container rm --force $(docker container ls --all --quiet) # 위 명령어로 모든 컨테이너를 삭제할 수 있다.

 

모든 컨테이너가 삭제되는 것을 확인

 

<ref>

https://github.com/gilbutITbook

'DevOps > DOCKER' 카테고리의 다른 글

[Docker] 도커 컴포즈  (0) 2024.03.14
[Docker] 도커 볼륨을 이용한 퍼시스턴트 스토리지  (0) 2024.03.14
[Docker] 이미지 생성  (0) 2024.03.13

+ Recent posts