DevOps/Docker

[Docker] 기초 시리즈 (9) 도커 컨테이너 - 개념, 기본 사용법

유자맛바나나 2022. 6. 7. 03:34

 

[도커 기초 시리즈 포스팅]

[Docker] 기초 시리즈 (1) 도커의 개념과 사용이유

[Docker] 기초 시리즈 (2) Ubuntu에 도커 엔진 설치

[Docker] 기초 시리즈 (3) 이미지와 컨테이너 관계, 도커 아키텍처

[Docker] 기초 시리즈 (4) 도커 이미지의 구조

[Docker] 기초 시리즈 (5) 도커 이미지 다루기 - Docker Hub(Registry)

[Docker] 기초 시리즈 (6) 도커 이미지 다루기 - 이미지 직접 생성

[Docker] 기초 시리즈 (7) 자주 사용하는 Dockerfile 명령어

[Docker] 기초 시리즈 (8) 자주 사용하는 도커 명령어 모음

[Docker] 기초 시리즈 (9) 도커 컨테이너 - 개념, 기본 사용법 (Now)

[Docker] 기초 시리즈 (10) 도커 컨테이너 - Volume 관리

 

도커 사용의 목적은 컨테이너 생성이다

  • 도커의 다양한 명령어, 옵션을 사용해서 최종적으로 달성하고자 하는 것은 하나의 프로세스가 동작하는 '컨테이너'를 생성하는 것이다.

 

❑ 컨테이너 사용법

1. 컨테이너 생성

1.1. 컨테이너는 이미지를 이용해 생성한다

Image와 Container는 객체지향의 Class-Instance와 같다

  • 컨테이너는 이미지를 이용해 생성할 수 있다. 즉, 하나의 이미지로 여러 개의 컨테이너를 생성할 수 있으므로 1:N 관계다.
  • 이미지와 컨테이너는 객체지향에서 클래스와 인스턴스 관계와 같다. 이미지는 컨테이너를 생성할 수 있는 명세서 또는 레시피로 이해할 수 있고, 컨테이너는 그 레시피를 이용해 생성한 객체인 것이다.

 

1.2. 컨테이너 생성과 시작

1) 컨테이너 생성 : create

$ docker create [이미지]
  • docker create / run 명령어 모두 이미지가 없을 경우 자동으로 pull을 먼저 수행해 이미지를 다운받음
  • [참고] 도커 이미지 목록 확인 : $ docker images


2) 컨테이너 시작 : start

$ docker start [컨테이너 ID 또는 이름]


3) 컨테이너 생성 및 시작 : run

$ docker run [이미지]:[태그]
  • docker create / run 명령어 모두 이미지가 없을 경우 자동으로 pull을 먼저 수행해 이미지를 다운받음

Run options

-d 백그라운드 모드로 실행(뒤에서 - 안 보이는 곳(백그라운드)에서 알아서 돌라고 하기)
-i 도커 호스트의 표준 입력(키보드, 마우스 등)을 컨테이너와 연결 (i: interactive)
-t TTY(리눅스 Teletypewriter) 할당. 터미널 명령어를 정상적으로 수행하도록 함.
i와 t 옵션은 보통 쉘 스크립트 작성이 필요한 컨테이너를 실행할 때 한 쌍으로 묶어(docker run -it) 사용한다
--name [이름] 컨테이너 이름 지정
-p [Host Port]:[컨테이너 Port] 호스트 머신의 포트와 컨테이너의 포트를 연결
--rm 컨테이너가 종료되면(내부에서 돌아가는 작업이 끝나면) 컨테이너를 제거
-v [Host 디렉토리]:[컨테이너 디렉토리] 호스트와 컨테이너의 디렉토리를 연결

 

1.3. 컨테이너 조회 및 상세 확인

1) 컨테이너 조회 : ps

$ docker ps
  • ps만 입력할 경우 동작중인 컨테이너만 조회
  • -a 옵션: 모든 컨테이너 조회


2) 컨테이너 상세 확인 : inspect

$ docker inspect [컨테이너 ID 또는 이름]
  • 서비스 운영시 컨테이너에 문제가 생기면 docker inspect를 보통 이용함

 

1.4. 컨테이너 일시중지, 종료

1) 컨테이너 일시중지 : pause

$ docker pause [컨테이너 ID 또는 이름]


2) 컨테이너 재개 : unpause

$ docker unpause [컨테이너 ID 또는 이름]


3) 컨테이너 종료 : stop

$ docker stop [컨테이너 ID 또는 이름]
  • SIGTERM 시그널 전달


4) 모든 컨테이너 종료 : stop

$ docker stop $(docker ps -a -q)


5) 컨테이너 강제 종료 : kill

$ docker kill [컨테이너 ID 또는 이름]
  • SIGKILL 시그널 전달
  • [참고] stop은 안전한(gracefully) 종료, kill은 강제 종료

 

1.5. 컨테이너 삭제

1) 컨테이너 삭제 : rm

$ docker rm [컨테이너 ID 또는 이름]
  • 실행중인 컨테이너는 삭제 불가함


2) 컨테이너 강제 삭제 : rm -f

$ docker rm -f [컨테이너 ID 또는 이름]
  • -f 옵션: 컨테이너 강제 종료 후 삭제 (SIGKILL 시그널 전달)


3) 컨테이너 실행 종료 후 자동 삭제 : run --rm

$ docker run --rm [이미지]:[태그]


4) 중지된 모든 컨테이너 삭제 : container prune

$ docker container prune

 

도커 컨테이너 라이프사이클

1.1. 주요 라이프사이클

  • 도커 컨테이너는 Created, Running, Paused, Deleted, Stopped 다섯가지 상태를 가질 수 있다
  • Running(실행) 상태로 갈 수 있는 방법은 두 가지다
    • docker run로 컨테이너를 생성과 동시에 시작
    • docker create로 컨테이너 생성 후 docker start로 시작

 

1.2. 상세 라이프사이클