[Docker] 컨테이너 라이브 사이클 1

2020. 7. 17. 09:20Cloud

기존에 등록된 이미지를 컨테이너 실행하기

사전에 docker hub 또는 다른 레지스트리에서 한 개 이상 image를 다운로드 받은 상태이다. docker images로 확인해보기!

docker run --name [컨테이너 이름] [이미지 이름]

명령어 docker run은 docker create 와 docker start 명령어를 순차적으로 실행하는 것과 동일하다.

참고사항

  • docker run할 당시에 로컬에 해당 이미지가 없을 때 중앙데이터저장소인 docker hub에서 해당 이미지를 찾아 설치한다.

  • 컨테이너 이름은 고유한 이름을 가져야 한다. docker ps -a로 확인해보자. 동일한 이름인 컨테이너가 있고 필요없으면 docker rm으로 삭제해주면 그 이름을 사용할 수 있다 :)

 

만약 이미지에 메인 서비스, start 명령어가 없으면 Docker run 컨테이너가 생성되고 바로 종료된다. (주의! 여기서 메인 서비스는 도커 스웜모드에서의 서비스와 다른 개념이다.)


그럼 이미지로 생성된 컨테이너에 터미널을 통해서 사용자가 직접 메인 서비스를 입력하면 어떨까?


docker run --name [컨테이너 이름] [이미지 이름] /bin/bash

/bin/bash를 명령어 docker run 인자로 넘겨주었다. 도커 컨테이너 실행 여부를 보자. 

docker ps // 생성되서 현재 실행되고 있는 컨테이너 목록
docker ps -a // 생성된 컨테이너 목록

/bin/bash는 데몬이 아니기 때문에 데몬 형태로 동작하지 않아 컨테이너를 실행 시작하고 종료(exit)된다.


bash 쉘이 데몬형태로 동작할 수 있는 방법은 없을까.


기존 명령어 docker run에서 옵션 추가

-it 옵션: interacitve terminal 
컨테이너 실행 시, bash 쉘(/bin/bash)로 해당 컨테이너에 접근하겠다는 의미다. 또한 bash 쉘은 foreground 실행된다. 즉, 현재 컨테이너를 실행시킨 터미널을 붙잡고 컨테이너의 root권한으로 bash 쉘을 통해 접속한다. 

  • -i :  interactive하게 컨테이너에 대한 입출력

  • -t : 터미널 tty 사용

docker run -it --name [컨테이너 이름] [이미지 이름] /bin/bash

bash 쉘로 컨테이너에 접속되면 root@[컨테이너 ID의 prefix]으로 시작된다. 빠져나오기 위해서는 exit명령어를 이용한다. exit하면 해당 컨테이너는 exited 상태가 된다.

만약 갑자기 급한 일이 생겨 컨테이너를 생성 후 백그라운드에서 실행시켜놓고 싶을 때 어떻게 해야할까!

  1. docker run -it로 컨테이너에 bash쉘로 접근했을 때 ctrl+p 누르고 ctrl+q를 눌러서 나오기

  2. docker run할 때 d 옵션 추가

-itd 옵션: interacitve terminal + detach(background)

docker run -itd --name [컨테이너 이름] [이미지 이름]  // /특정 인자를 주지 않으면 기본적으로 bash쉘로~
docker run -itd --name [컨테이너 이름] [이미지 이름] /bin/bash

백그라운드에서 실행 되고 있는 컨테이너에 배시쉘로 접근하고 싶을 때 attach를 사용하면 된다. 

docker attach [컨테이너 이름]
docker attach [컨테이너 prefix] 

docker attach는 앞서 컨테이너를 생성할 때 /bin/bash로 bash 쉘이 미리 연결되어 있어야 한다. 그렇지 않으면 사용자가 컨테이너에 접근하는 것이 힘들다.


bash 쉘 터미널을 이용하기 위해서는 컨테이너를 중단하고 삭제해야할까.


명령어 docker exec 으로 쉘 터미널 연결

docker exec -it [실행중인 컨테이너ID prefix 또는 컨테이너이름] /bin/bash

컨테이너를 생성할 때 쉘터미널을 옵션으로 주지 않아도 컨테이너에 쉘 터미널로 접근 가능하다. 단, 실행중인 컨테이너에 한해서 가능하다.

'Cloud' 카테고리의 다른 글

[cloud] 클라우드 서비스 유형  (0) 2020.07.24
[Docker] 도커 스웜 모드  (0) 2020.07.22
[Cloud] 클라우드 어플리케이션 이해  (0) 2020.07.16
[Kafka] Apache Kafka 기본 이해  (0) 2020.07.15
[AWS] 20.07.06 - 08 공부  (0) 2020.07.08