AWS, Docker/Docker

Docker 시작하기 <2.컨테이너>

zooyeonii 2020. 6. 27. 22:05

Docker 게시글 모음

Docker 시작하기 <1.설치와 재설치>

Docker 시작하기 <3.Image>

Docker 시작하기 <4. docker compose>


귀여운 도커 컨테이너!

 

도커 컨테이너와 이미지란?

저는 컨테이너는 독립적인 공간 (프로세스의 격리), 이미지는 이 컨테이너의 체크포인트라고 이해하고 있습니다. 

컨테이너 하나하나가 vm 인스턴스처럼 사용되고, 이 컨테이너를 배포하고 싶을 때, 이미지로 해당 컨테이너를 저장합니다.

다른 환경에서 이미지를 pull 해오면, 똑같은 환경을 가지게 됩니다. 로컬과 개발 환경 간의 불일치를 해소해 준다는 장점이 있습니다. 

컨테이너는 이 이미지에서 변경된 사항만을 컨테이너 계층에 저장하기 때문에 컨테이너에서 수정된 것은 이미지에 영향을 주지 않습니다.

예를 들어, ubuntu:16.04 이미지로 만든 컨테이너 위에서 python, ipfs 등등을 사용하고 있었다고 가정합니다.

그런데, ubuntu:16.04 + apache 를 실행하고 싶어졌다면? python, ipfs는 삭제하고 apache를 실행한다? 아니면 python, ipfs에 apache를 또 설치한다? 어떻게 하면 될까요.

도커에서는 ubuntu:16.04 이미지를 pull해오고 그 위에 apcahe를 실행하면됩니다. 

다른 컨테이너에 있는 python, ipfs는 이미지에 영향을 주지 않습니다.

 

1. 컨테이너 생성

$docker run -it ubuntu:16.04

image를 가져오는 것은 pull, 실행은 run 입니다.

docker는 run 명령어를 입력했을 때, 이미지가 존재하지 않으면 자동으로 pull 해옵니다(도커 허브에서).

-it 명령어 :
-i : 컨테이너와 상호(interactive) 입출력 가능
-t : tty 활성화해서 bash 쉘을 사용하도록 함

 

컨테이너 내부에 들어왔습니다!

ubuntu:16.04 image로 만들어진 컨테이너입니다.

컨테이너에서 나가기 :
exit : 정지하고 빠져나가기 /
ctrl+P,Q : 정지하지 않고 빠져나가기 명령어를 사용합니다. 

 

2. 컨테이너 재실행

start : 다시 실행
attach : 컨테이너 내부로 들어가기

$docker start 8fe 
$docker attach 8fe

root 옆에 해시가 보이시나요? 이는 호스트 이름입니다.

앞의 일부분만 (8fe) 기억해놓으면 개꿀이지요.

 

3. 이미지 목록 출력

$docker images

 

4. 컨테이너 목록 출력

$docker ps (정지되지 않은 컨테이너만)
$docker ps -a (정지된 컨테이너까지 모두)