AWS, Docker/Docker

Docker 시작하기 <4. docker compose>

zooyeonii 2020. 8. 11. 18:47

Docker 이전 게시글 모음

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

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

3. Docker 시작하기 <3.Image>


 

도커 컨테이너를 여러 개 들고 있는 귀여운 도커 문어

 

1. 도커 컴포즈를 사용하는 이유

여러 개의 컨테이너를 하나의 서비스로 정의해 컨테이너 묶음으로 관리할 수 있다. 

한 번에 여러 종류의 컨테이너를 생성, 시작, 삭제를 할 수 있게 해준다.

 

2. 도커 컴포즈 설치

#curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-'uname -s'-'uname -m' -o /usr/local/bin/docker-compose

#chmod +x /usr/local/bin/docker-compose

설치 후 도커 컴포즈의 버전과 도커 버전 확인하기

 

3. 도커 컴포즈 사용하기

컨테이너의 설정이 정의된 YAML 파일을 작성한다. (주의할 것 : tab 대신 들여쓰기는 space 2번)

docker-compose.yml

파란색으로 표시한 stdin_open:true tty: true는 도커 컴포즈 오류로 인해 추가한 명령어이다. 자세한 설명은 4번에 추가하였다. 

 

1) version 

이는 compose file format을 뜻하는데, 다음 표를 참고하여 docker engine 버전에 맞게 선택할 수 있다. 

버전 '3.7'을 할까 했지만, '3.0'이 도커 스웜과 호환이 된다고해서 '3.0'으로 설정하였다. 

버전 반드시 확인할 것

 

2) services

묶어서 관리하고 싶은 컨테이너들을 하나의 서비스로 묶는다. 

나는 ipfs host를 대량 생성하는 것이 목적이기 때문에 service에 여러 종류의 컨테이너가 필요없었다.

따라서 서비스 명으로는 ipfs-host가 유일했고, 이는 go-ipfs 가 깔려있는 이미지(go-ipfs:0.0)를 가져온다.

도커 컴포즈를 통해서 이미지를 여러 개 복사하려고한다.

(솔직히 docker run 여러번하면 되지만...이렇게 도커컴포즈를 통해 생성한 컨테이너들은 동시에 docker start, docker rm이 가능하기 때문에 관리가 편리하다.)

 

3) 도커 컴포즈

이 명령어 한 줄로 ipfs-host를 6개 생성하였다.

$docker-compose scale ipfs-host=6

 

docker-compose 명령어를 통해 컨테이너 6개가 한 번에 생성되었다.&nbsp;

 

 

4. 도커 컴포즈 오류

yml 파일에 stdin_open: true  tty: true 를 추가한 이유는, 도커 컴포즈를 통해 만든 컨테이너에 접근이 불가능했기 때문이다. 

도커는 컨테이너에 docker start [컨테이너] , docker attach [컨테이너] 를 통해 접근하는데,

도커 컴포즈를 한 후 컨테이너에 접근할 때, docker start 후 바로 exit 되어버려 attach가 불가능했다. 

구글링을 통해 찾아봤을 때 버전의 문제라는 사람들도 있었고,

도커 컴포즈의 버그라고 말하는 사람들도 있었는데,

어느 한 게시글에서 위 명령어를 추가함으로써 해결한 것을 찾았다. (올레!)

 

stdin_open: true  tty: true 는 docker run -it 의 역할로, 셸 입출력이 가능하도록 한다. (대화형 셸)