본문 바로가기

IT/Docker

Docker 컨테이너 라이프 사이클

Docker 컨테이너 라이프 사이클

1. 컨테이너의 개념

  • Docker 이미지 인스턴스 실행(실제 응용 프로그램 실행)
  • 응용 프로그램과 모든 종속성이 포함
  • 커널을 다른 컨테이너와 공유하고 호스트 OS의 사용자 공간에서 격리된 프로세스로 실행

2. 컨테이너 생성(docker container create)

  • 이미지에 포함된 Linux 디렉터리 및 파일 집합의 스냅샷을 만들어 컨테이너 생성
  • 컨테이너를 생성하는 것 뿐이며, 컨테이너를 구동하지는 않음(컨테이너를 구동할 수 있는 준비상태를 만드는 단계)

3. 컨테이너 생성 및 구동(docker container run)

  • 이미지에서 컨테이너를 생성하여 컨테이너상에서 프로세스를 구동
  • 서버 프로세스를 백그라운드에서 실행하거나 경우에 따라 강제 종료 가능
  • 포트 번호 등 네트워크 설정을 통해 외부에서 컨테이너 프로세스에 액세스 가능

4. 컨테이너 구동(docker container start)

  • 중지 상태인 컨테이너를 구동할 때 사용
  • 컨테이너에 할당된 컨테이너명 또는 ID를 입력하여 컨테이너 구동

5. 컨테이너 중지(docker container stop)

  • 구동 중인 컨테이너를 중지할 때 사용
  • 컨테이너에 할당된 컨테이너명 또는 ID를 입력하여 컨테이너 구동

6. 컨테이너 삭제(docker container rm)

  • 중지되어 있는 컨테이너를 삭제할 때 사용
  • 컨테이너를 삭제하기 전에 docker container stop 명령으로 컨테이너를 중지시켜야 함

7. Docker 컨테이너 라이프 사이클

docker container 명령어

1. 컨테이너 생성 및 구동(docker container run)

# 컨테이너를 백그라운드에서 실행
docker container run [옵션] <이미지명>[:태그명] [값]
docker container run alpine echo "hello from alpine"

docker container run --name alpine -it alpine /bin/sh
echo "hello from alpine"
exit

docker container run --name alpine1 -d -it alpine /bin/sh
옵션 설명
-d    백그라운드에서 실행
-e    컨테이너에 환경 변수 전달
-p    호스트와 컨테이너의 포트를 매핑
-it    컨테이너 쉘 내부로 접근(대화식 tty로 연결). exit 명령으로 종료
--name    컨테이너 이름 지정
--restart    커맨드 실행 결과에 따라 컨테이너를 재구동
--net    네트워크 설정(default로 호스트OS와 bridge 접속 사용)
--cpu-share    제한 값 설정 가능

2. 컨테이너 목록 확인(docker container ls)

# 구동 중인 컨테이너 목록 확인
docker container ls [옵션]
docker container ls
docker container ls -a
옵션 설명
-a    실행한 모든 컨테이너 목록 출력
--format    출력 변경시
docker ps  명령어와 동일

 

커맨드 실행결과 항목

항목 설명
CONTAINER ID   컨테이너 ID
IMAGE   컨테이너 기반이 된 이미지
COMMAND   컨테이너에서 실행 중인 커맨드
CREATED   컨테이너 생성 후 경과 시간
STATUS   컨테이너 상태

  (restarting | running | paused | exited)

PORTS   할당된 포트
NAMES   컨테이너명

$docker container ls -a / $ docker ps -a

컨테이너 구동 확인(docker container stats)

# Docker 상에서 동작하는 컨테이너 상태 확인
docker container stats <컨테이너명 또는 ID>
docker container stats alpine1

  • 상태 확인 완료 후, 'Ctrl' + 'c'를 누르면 커맨드가 종료
  • 커맨드 실행 결과
항목 설명
CONTAINER   컨테이너명 또는 ID
CPU %   CPU 사용률
MEM USAGE/LIMIT   메모리 사용량·컨테이너에서 사용할 수 있는 메모리 제한
MEM %   메모리 사용률
NET I/O   네트워크 I/O

4. 컨테이너 구동(docker container start)

# 중지되어 있는 컨테이너 구동
docker container start [옵션] <컨테이너명 또는 ID>
docker container start alpine

5. 컨테이너 중지(docker container stop)

# 구동 중인 컨테이너 중지
docker container stop [옵션] <컨테이너명 또는 ID>
docker container stop alpine
  • 전체 CONTAINER ID를 입력하지 않아도 앞의 몇 개의 문자만 입력하면 Docker client가 지능적으로 선택
  • 컨테이너를 강제로 중지시킬 때에는 docker container kill 커맨드 사용

6. 컨테이너 일시정지(docker container pause)

# 컨테이너 일시정지
docker container pause <컨테이너명 또는 ID>
docker container pause alpine1
  • 컨테이너에서 실행 중인 프로세스를 일시정지

7. 컨테이너 재시작(docker container unpause)

# 컨테이너 재시작
docker container unpause <컨테이너명 또는 ID>
docker container unpause alpine1
  • 컨테이너에서 일시 정지된 프로세스를 재시작

8. 컨테이너 재시작(docker container restart)

# 컨테이너 재시작
docker container restart [옵션] <컨테이너명 또는 ID>
docker container restart alpine1
  • -t 옵션으로 컨테이너 재시작 시간 지정 가능(defaul는 10초)
  • 커맨드의 종료 상태(정상 종료인지 아닌지)에 따라 컨테이너를 자동으로 재시작하고자 하는 경우, docker container run 커맨드의 --restart 옵션 사용

9. 컨테이너 삭제(docker container rm)

# 컨테이너 삭제
docker container rm [옵션] <컨테이너명 또는 ID>
docker container rm -f alpine1
  • -f 옵션 : 구동 중인 컨테이너를 강제 삭제
  • -v 옵션 : 할당된 볼륨을 삭제

10. 컨테이너 세부정보 확인(docker container inspect)

# 컨테이너 세부정보 확인
docker container inspect [옵션] <컨테이너명 또는 ID>
docker container inspect alpine

 

11. 컨테이너 접속(docker container attach)

# 구동 중인 컨테이너에 접속
docker container attach <컨테이너명 또는 ID>
docker container attach alpine
> echo "hello alpine~"
> exit

12. 컨테이너의 프로세스 실행(docker container exec)

# 구동 중인 컨테이너에서 새로운 프로세스 실행
docker container exec [옵션] <컨테이너명 또는 ID> <커맨드> [값]
docker container exec alpine echo "Run exec command"

13. 컨테이너의 로그 확인(docker container logs)

# 컨테이너의 로그 확인
docker container logs [옵션] <컨테이너명 또는 ID>
docker container logs alpine

14. 컨테이너의 포트 상태 확인(docker container port)

# 구동 중인 컨테이너에서 실행 중인 프로세스의 전송 포트 확인
docker container port <컨테이너명 또는 ID>

15. 컨테이너명 변경(docker container rename)

# 컨테이너명 변경
docker container rename <기존의 컨테이너명> <새로운 컨테이너명>

16. 컨테이너 내에서 파일 복사(docker container cp)

# 컨테이너 내의 파일을 호스트로 복사
docker container cp <컨테이너명 또는 ID>:<컨테이너 내의 파일 경로> <호스트 디렉터리 경로>
docker container cp <호스트 파일> <컨테이너명 또는 ID>:<컨테이너 내의 파일 경로>

17. 컨테이너 내에서 파일 변경 이력 확인(docker container diff)

# 컨테이너가 생성된 시점부터 변경된 이력 확인
docker container diff <컨테이너명 또는 ID>
  • A : 파일 추가
  • D : 파일 삭제
  • C : 파일 변경