Docker & Kubernetes

컨테이너의 생명 주기와 도커 커맨드

beekei 2021. 11. 25. 15:45
반응형

컨테이너의 생명 주기

컨테이너는 세 가지 상태를 가진다.

  1. 이미지 : 컨테이너의 모형이 되는 것으로 실행되기 전의 상태
  2. 실행 : 컨테이너 위에서 프로세스가 실행 중인 상태
  3. 정지 : 프로세스의 종료 코드, 로그가 보존된 채 정지한 상태

 

(1) docker pull(이미지 다운로드)

명령어 'docker pull 리포지터리명[:태그]'를 실행하면 원격의 리포지터리로부터 이미지를 다운로드 한다.

이미지 다운로드
이미지 목록

 

(2) docker run(컨테이너 실행)

명령어 'docker run [옵션] 리포지터리명:태크 [커맨드] [인자]'는 지정한 이미지를 모형으로 컨테이너를 기동한다.

만약 로컬에 없으면 원격의 리포지터리에서 이미지를 다운로드하고 컨테이너를 실행한다.

기본값으로 설정된 원격 리포지터리는 도커 허드(Docker Hub)이지만, 클라우드에서 제동하는 프라이빗 레지스트리 서비스를 사용할 수도 있다.

 

git bash에서 명령어를 실행했기 때문에 winpty 명령어를 같이 사용했다.

study라는 CentOS7을 설치한 컨테이너를 생성하고 실행하였다.

컨테이너 실행

자주 사용하는 docker run 옵션

옵션 설명
-i 키보드 입력을 컨테이너의 표준 입력에 연결하여 키보드 입력을 컨테이너의 셀 등에 보낸다.
-t 터미널을 통해 대화형 조작이 가능하게 한다.
-d 백그라운드로 컨테이너를 돌려 터미널과 연결하지 않는다.
--name 컨테이너에 이름을 설정한다. 시스템에서 유일한 이름이어야 하며, 옵션을 생략하면 자동으로 만들어진 이름이 부여된다.
--rm 컨테이너가 종료하면 종료 상태의 컨테이너를 자동으로 삭제한다.

 

 

(3) docker ps(컨테이너의 상태 출력)

docker ps -a에 경우 중지된 컨테이너도 출력된다.

컨테이너 상태 출력

 

(4) docker logs(로그 출력)

정지 상태인 컨테이너는 삭제될 때까지 남아 있으며, 실행 중 발생한 표준 출력과 표준 에러 출력을 간직하고 있다.

옵션 -f 를 사용하면 컨테이너가 실행중인 상태에서 실시간으로 발생하는 로그를 볼 수 있다.

로그 출력

 

(5) docker stop, docker kill(컨테이너 정지)

실행중인 컨테이너를 정지시키는 방법은 세 가지가 있다.

1. 컨테이너의 PID=1인 프로세스가 종료한다.

기동하자마자 PID=1인 셸이 종료되었기 때문에 우분투(ubuntu) 이미지를 별다른 커맨드 없이 지정하면 실행하자마자 종료가 된다.

ubuntu 컨테이너 실행
실행중인 컨테이너 목록

2. docker stop <컨테이너명 | 컨테이너ID>를 실행한다.

컨테이너 종료
실행중인 컨테이너 목록

3. docker kill <컨테이너명 | 컨테이너ID>를 실행한다.

컨테이너 종료
실행중인 컨테이너 목록
모든 컨테이너 목록

docker kill 후 docker ps -a로 컨테이너를 조회해 보면 STATUS가 137로 종료된것으로 나온다.

이것은 컨테이너가 강제 종료되었다는 뜻이다.

즉, docker kill은 컨테이너 안에 PID=1인 프로세스를 종료한다.

따라서 docker stop을 사용할 수 없는 비정상적인 상황에서만 사용하는 것이 바람직하다.  

 

 

(6) docker start(컨테이너 재기동)

정지 상태인 컨테이너는 docker start [옵션] <컨테이너명|컨테이너ID>로 재기동 할 수 있다.

컨테이너 재기동
실행중인 컨테이너 목록

 

 

(7) docker commit(컨테이너의 변경 사항을 리포지터리에 저장)

위에서 생성한 study 컨테이너에 git을 설치하고 이미지로 만들어 리포지터리에 보관 해 보겠다.

컨테이너 실행 후 git 설치

docker commit [옵션] <컨테이너명|컨테이너ID> 리포지터리명[:태그]를 실행하면 현제 컨테이너 상태로 이미지를 만들어 리포지터리에 보관한다.

이미지 생성
이미지 목록

아마 git을 설치하기 전보다 SIZE가 늘어났을것이다.

 

 

 

(8) docker push(이미지를 원격 리포지터리에 보관)

이미지를 원격 리포지터리에 등록하는 것은 쿠버네티스에서 컨테이너를 돌리기 위해 반드시 해야하는 작업이다.

도커 허브, IBM, 구글이 관리하는 리포지터리에 이미지를 등록할 수 있다.

나는 도커 허브를 사용하기 때문에 도커 허브 리포지터리에 이미지를 등록해 보겠다.

1. 도커 허브 로그인

docker login을 통해 도커 허브에 로그인을 해준다.

도커 허브 로그인

2. 로컬 이미지에 태그 부여

내 도커 허브 아이디는 devbeekeishin이므로 태그를 devbeekeishin/study-git으로 부여했다.

이미지에 태그 부여
이미지 목록

3. 이미지를 원격 리포지터리에 업로드

원격 리포지터리에 푸시

4. 등록된 이미지 확인

도커 허브에 접속해 정상적으로 push 되었는지 확인해 보자

등록한 이미지는 docker pull 원격리포지터리:태그로 공유할 수 있다. 

반응형