Docker 기본 개념 part.1 (container의 life cycle)

2022. 1. 16. 22:08DevOps/Docker & kubernetes

docker container의 life cycle 전체를 이해하는것은 굉장히 어렵기 때문에 최대한 간략화 해서 표기한 내용이다. 도커의 경우 실행상태(running)으로 갈 수 있는 방법은 2가지로 run 명령어와 created명령어를 통해 컨테이너를 생성한 후 start명령어를 통해 실행하는 방법이 있다.

실행중인 컨테이너는 일시 중지(pause)로 갔다가 다시 실행되거나, 멈춘(stopped) 후 rm명령어를 통해 deleted를 하거나 start를 통해 다시 실행할 수 있다. 

 

컨테이너 시작 명령어

docker run [image] : 컨테이너 생성 및 시작 명령어이며 가장 많이 사용한다.

 

docker create [image] : 컨테이너를 생성한다

docker start [container] : 생성한 컨테이너를 시작한다.

 

* 만약 이미지 정보가 로컬 호스트에 존제하지 않는다면 자동으로 도커 저장소로부터 불러온다.

이제 도커를 실행해 보도록 하자.

docker run nginx 명령어를 사용하면 아래와 같이 실행된다.

docker create nginx 명령어를 수행하게 되면 도커 엔진에 부여하는 컨테이너를 생성하고 고유 id를 보여주게 된다.

docker ps -a 명령어를 써 금방 생성한 컨테이너의 고유 ID 12글자(앞에서 부터)와 이름을 확인할 수 있다.

이제 docker start 'docker_name'(개인이 만든 도커의 이름) 을 입력한 후 docker ps로 확인해 보자. 잘 형성된 것을 확인할 수 있다.

docker run과 관련된 자주 쓰는 명령어는 다음과 같다.

docker run
 -i \ interactive의 약자로 호스트의 표준 입력과 컨테이너의 표준입력을 연결해 준다.
 -t \ TTY를 할당해 준다.
 ==> 도커 컨테이너의 sh를 실행할때 사용하며 한쌍으로 보면된다.
 --rm
 ==> 컨테이너가 종료된 후 자동으로 삭제 과정을 거치도록 한다.
 -d
 ==> 컨테이너가 백그라운드 모드로 실행시킨다.(detached mode)
 --name hello-world
 ==> 도커의 이름을 직접 부여해 줄 수 있다.
 -p 80:80
 ==> 호스트 - 컨테이너 간 네트워크 포트를 바인딩을 해 준다.
 -v /opt/example:\example
 ==> 호스트- 컨테이너 간의 파일을 마운트 해 주는 볼륨 바인딩이다.
 example/hello-world:latest
 ==> 이미지 정보를 마지막에 기입하게 되면 해당 이미지를 기반으로하여 실행한다.
 my-command \
 ==> 선택적으로 명령어를 더 기입할 수 있다.

자 이제 우분투를 실행해 보도록 하자. docker run -i -t ubuntu:focal 명령어를 사용해 실행하도록 하자. 잘 되는것을 확인할 수 있다.

exit 명령어를 사용하면 도커를 종료하고 나올 수 있으며 ctrl + p, q를 사용하면 도커가 실행중인 상태로 터미널 화면으로 돌아올 수 있다. 또한 컨테이너의 상태를 확인하기 위해서 아래의 명령어를 사용할 수 도 있다.

docker ps
==> 실행중인 컨테이너 상태를 확인할 수 있다.
docker ps -a
==> 전체 컨테이너 상태를 확인할 수 있다
docker inspect [container]
==> 컨테이너에 대한 상세 정보를 확인할 수 있다.

컨테이너에 대한 일시중지 및 재개에 대한 명령어는 다음과 같다.

docker pause [container]
==> 컨테이너를 일시 중지 시킨다.
docker unpause [container]
==> 중지된 컨테이너를 재개시킨다.

컨테이너 종료에 대한 명령어는 다음과 같다.

docker stop [container]
==> 컨테이너를 안전하게 종료한다. 컨테이너에 SIGTERM 시그널을 전달한다.
docker stop $(docker ps -a -q)
==> 모든 컨테이너를 종료한다.
여기서 $(docker ps -a -q)는 (ps명령어를 통해서 전체 컨테이너 id 목록을) 명령어의 결과를 전달하겠다 는 의미
docker kill [container]
==> 컨테이너를 강제로 종료한다. 컨테이너에 SIGKILL 시그널을 전달한다.

컨테이너를 삭제하는 명령어는 다음과 같다.

docker rm [container]
==> 컨테이너를 삭제한다. 단 실행중인 컨테이너는 불가능하다.
docker rm -f [container]
==> 컨테이너를 강제 종료 후 삭제한다.(SIGKILL시그널을 보낸다)
docker run --rm...
==> 컨테이너의 실행을 종료 후 자동 삭제한다.
docker container prune
==> 중지된 모든 컨테이너를 삭제한다.