Docker (도커 교과서)

2. 도커의 기본적인 사용법

programmer-ds 2024. 12. 15. 16:10

Docker 실습은 wsl2를 이용하여 진행!

1. docker container run

컨테이너로 애플리케이션을 실행하라는 도커 명령

docker container run diamol/ch02-hello-diamol 실행 결과

  • docker container run 명령은 컨테이너로 애플리케이션을 실행하라는 명령이다.
  • 현재는 로컬에 diamol/ch02-hello-diamol 앱 패키지의 Image가 없으므로, 먼저 Pull을 통해 Image를 내려받는 작업이 진행 ("Hello from Chapter 2!... "의 윗 부분의 출력 결과가 Image 다운로드 관련 출력 내용)
  • "Hello from Chapter 2!..." 부터는 해당 Image를 이용해 컨테이너를 실행한 결과이다. 즉 App 실행 결과

 

같은 명령어로(docker container run diamol/ch02-hello-diamol) 다시 한번 실행해보면 처음과는 조금 다른 결과가 나온다.

docker container run diamol/ch02-hello-diamol 재실행 결과

  • 처음 명령어 실행 시, 해당 App의 Image를 로컬로 다운받았기 때문에, 재실행했을 때, 다운로드 받는 과정이 사라졌음

 

2. 컨테이너를 원격 컴퓨터처럼 사용하기

2.1. docker container run --interactive --tty

  • --interactive : 컨테이너에 접속된 상태가 되도록 하는 플래그
  • --tty : 터미널 세션을 통해 컨테이너를 조작하는 플래그

즉, 대화식 컨테이너를 실행한 후 터미널을 통해 연결

 

docker container run --interactive --tty diamol/base 실행 결과

 

터미널로 컨테이너 내부에 접속된 상태가 됨. 따라서 리눅스 명령어 입력 가능

 

ls와 hostname 명령어로 컨테이너 내 명령어 실행

 

2.2. docker container ls

현재 실행 중인 모든 컨테이너에 대한 정보 확인.

터미널로 컨테이너 내부에 접속한 상태 그대로 두고, 새로운 창을 열어서 해당 명령어를 실행

 

docker container ls 실행 결과

  • 현재 실행 중인 컨테이너에 대한 정보가 나옴
  • 2.1에서 진행한 명령어를 종료하지 않았으면, 컨테이너 내부에 접속된 상태로 컨테이너가 실행 중인 상태이므로 위 결과와 같이 정보가 나옴
  • 2.1에서 hostname명령을 통해 확인했던 hostname과 2.2에서 나온 결과 중 Container ID의 값이 같은 것을 확인
  • 도커는 컨테이너를 실행할 때 랜덤한 ID값을 부여하는데, ID 값 중 일부분이 호스트명이 된다.

 

2.3. docker container top

대상 컨테이너에서 실행 중인 프로세스의 목록을 확인

 

docker container top 실행 결과

  • container ID 전체를 입력하지 않아도 중복되는 ID가 없으면 작성한 ID 기준으로 자동으로 선택 됨

 

2.4. docker container logs

컨테이너에서 수집된 모든 로그를 출력

 

docker logs 실행 결과

  • 2.1에서 사용한 명령어들이 로그로 출력

 

2.5. docker container inspect

대상 컨테이너의 상세한 정보를 확인

docker container inspect 실행 결과의 앞부분

  • 컨테이너의 가상 파일 시스템상의 경로, 실행 중인 명령, 접속된 가상 도커 네트워크 정보 등 애플리케이션에 발생한 문제를 추적하는 데 유용한 정보를 확인 가능

 

3. 컨테이너를 사용해 웹 사이트 호스팅하기

3.1 docker container ls --all

상태와 상관없이 모든 컨테이너의 목록을 확인 (종료된 것 + 실행 중인 것)

 

docker container ls --all 실행 결과

  • Exited는 종료된 상태를 나타내며, UP는 실행 중인 상태를 나타냄
  • 컨테이너 내부의 App이 실행 중이어야 컨테이너의 상태도 실행 중이 된다.
  • 컨테이너가 종료돼도 컨테이너는 사라지지 않는다. (재실행, 로그 확인, 파일 복사 등 가능) 

3.2 docker container run --detach --publish 8088:80 diamol/ch02-hello-diamol-web

  • --detach : 컨테이너를 백그라운드에서 실행하며 컨테이너 ID를 출력
  • --publish : 컨테이너의 포트를 호스트 컴퓨터에 공개, 8088번 포트로 들어온 트래픽을 컨테이너의 80번 포트로 전달

해당 Image는 아파치 웹 서버와 간단한 HTML 페이지를 담고 있으며, 컨테이너를 실행하면 실제 웹 서버를 통해 웹 페이지가 제공되는데, 컨테이너가 백그라운드에서 동작하며, Port를 공개하여 네트워크를 Listen 상태로 만든다.

 

 

컨테이너에서 호스팅된 웹 페이지를 로컬 컴퓨터에서 접근한 화면

  • 호스트 컴퓨터에서 웹 브라우저에 localhost:8088을 입력하여 웹 서버에 접속 가능

 

3.3 docker container stats

실행 중인 컨테이너의 상태를 확인 가능. 해당 명령어는 실시간으로 컨테이너의 CPU, 메모리, 네트워크, 디스크 사용량을 확인할 수 있다.

 

docker container stats 실행 결과

 

3.4 docker container rm

명령에 컨테이너 ID를 지정하여 대상 컨테이너를 삭제할 수 있음 (실행 중인 컨테이너는 삭제가 안 됨)

그러나 --force 플래그를 사용하면 실행 중인 컨테이너라도 바로 삭제 가능하다.

 

docker container rm과 docker container rm --force 실행 결과

  • 위 컨테이너는 실행 중인 컨테이너라서 --force 옵션 없이 사용하면 에러 발생
  • --force 옵션을 주어, 실행 중인 컨테이너 종료 후 ID 반환