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

도커 컨테이너 생성

docker create [image]
  • docker create 명령어를 입력하면, 도커엔진이 로컬 호스트에서 이미지 정보를 찾아서 컨테이너를 생성함.
  • 정상적으로 수행되면 도커 엔진이 생성한 컨테이너의 해쉬값을 반환함.
  • 만약, 로컬 호스트에 이미지가 없을 경우에는 자동으로 docker pull을 실행하여 Docker Repository에서 이미지 pull을 시도함

도커 컨테이너 시작

# 도커 컨테이너가 생성되어 있을 때
docker start [container]

컨테이너 생성 후 시작

# 옵션
docker run [option] [image] [command] [args]
 
# 생략
docker run [image]
  • docker run 명령어는 docker createdocker start 를 모두 실행함

  • docker run 도 로컬 도커에 이미지가 존재하지 않을 경우 저장소에서 자동으로 이미지를 내려 받음

  • docker run 옵션

  • -i : 컨테이너 상호 입출력을 가능하게함.

  • -t : tty 를 할당함. 터미널 명령을 정상적으로 실행할 수 있도록 설정.

# 백그라운드에서 알아서 동작하는 어플리케이션과 달리 표준 입력을 필요로 하는 어플리케이션의 경우 사용
docker run -i -t ubuntu:focal
 
# 종료
exit
 
# 앱은 종료하지 않고 터미널만 빠져나오기
ctrl + p, q 입력
  • --rm : 컨테이너가 실행 종료될 경우 이미지 자동으로 삭제
  • -d : detached 모드로 실행. 컨테이너가 background 에서 동작하도록 설정
  • --name : 컨테이너의 이름을 설정. 생략하면 자동으로 부여
  • -p : 호스트 운영체제와 컨테이너 사이의 포트를 바인딩하기 위한 옵션
  • docker run -p 80:80 -d nginx
  • -v : 호스트 운영체제와 컨테이서 사이의 파일시스템 디렉토리를 마운트를 위한 옵션

컨테이너로 로컬 파일 복사

docker cp ~/data/test.md tmp_container:/root/data/

컨테이너 접속 및 나가기

docker attach [container]

컨테이너 종료

# stop 은 컨테이너를 안전하게 종료함
docker stop [container]
 
# kill 은 컨테이너를 강제 종료함
docker kill [container]
 
# 모든 컨테이너 종료
docker stop $(docker ps -a -q)

컨테이너 실행 확인

# ps 실행 중인 컨테이너의 상태를 확인
docker ps
 
# 전체 컨테이너 상태를 확인
docker ps -a
 
# 컨테이너 상세 정보 확인
docker inspect [container]

컨테이너 배포

# 현재까지 작업해 놓은 컨테이너를 그대로 저장
docker commit container_name image_name:tags
 
# 현재까지 작업해 놓은 컨테이너를 이미지 파일로 export
# 1. save & load를 사용하면 로컬에 있는 docker image를 tar파일로 추출하고 load를 통해 다시 이미지화 할 수 있다. 이 경우 추출된 이미지는 원본 이미지와 완전히 동일하다.
docker save -o out_name image_name
docker load -i input_name.tar
 
# 2. export & import를 이용하면 동작중인 컨테이너를 tar파일로 추출하고 import를 통해서 가져올 수 있다.  
# export를 사용하면 save와는 다르게 이미지의 layer에 대한 내용은 포함되지 않는다.  
# export한 컨테이너 내의 정보는 하나의 레이어로 통합된다.
docker export container name > file_name.tar
docker import file_name.tar image_name

컨테이너 삭제

# 실행 중인 컨테이너는 삭제할 수 없음
docker rm [container]
 
# 컨테이너 강제 종료 후 삭제
docker rm -f [container]
 
# 모든 컨테이너 종료 후 삭제
docker rm -f $(docker ps -a -q)
 
# 컨테이너 실행 종료 후 자동 삭제
docker run --rm [container]
 
# 중지된 모든 컨테이너 삭제
docker container prune

참고


Prev: (Docker) 2. Docker 설치

Next: (Docker) 4. Docker - Python 배포 실습


docker도커DevOps