Priceless

[Docker]docker compose 본문

Docker & Kubernetes/Docker

[Docker]docker compose

Hyun__ 2023. 12. 23. 00:58

Docker Compose

docker-compose

docker compose는 멀티 컨테이너 환경에서 강점이 있다

하나의 컨테이너를 띄울 때도 사용할 수 있으며

configuration 파일을 만들어서 사용하기 때문에

복잡한 명령어를 반복하여 사용하지 않아도 된다

 

설정 파일은 yaml 파일로 만들어져 있다

기본 설정 파일 이름은 docker-compose.yml 이다

 

파일 이름을 변경하기 위해서는 

-f <설정할 config 파일 이름> 옵션을 추가한다

 

docker compose를 이용하여 서비스를 올릴 때

자동으로 설정 파일을 읽고 

build, rebuild, create, start 등을 수행한다

 

 

사용법

docker-compose의 사용 방법은 아래와 같다

 

 

Install

docker-compose를 설치하는 방법은 아래와 같다

docker-compose를 실행하기 위한 작업 공간을 만든다

파일 명이 고정되어 있으면 편리하기 때문에

별도의 작업 공간을 만드는 것이 좋다

 

 

 

nginx

yml 파일을 생성한다

yml 파일 내에 아래 내용을 추가한다

yml이 지원하는 양식에 주의해야 한다

 

 

docker-compose.yml

버전에 따라 쓸 수 있는 기능이 다르므로

필요한 기능에 따라 선택한다

 

빌드를 하기 위해서는

build에 관한 코드를 추가한다

 

service에 관한 내용을 추가한다

서비스의 이름을 설정하고

가져올 이미지, 재시작 여부, hostname, container_name, network 등을 추가한다

 

network를 추가할 경우

본인이 설정하는 network에 대한 내용을 추가한다

 

nginx: up

yml 파일을 사용하여 docker를 띄운다

docker up 을 사용하는 경우

자동으로 같은 디렉토리 내의 yml 파일을 찾는다

 

처음 실행하기 때문에

creating과 attaching 과정이 필요하며

여러 개를 동시에 띄우므로 log마다 색을 다르게 띄운다 

 

 

 

같은 디렉토리에서 터미널을 실행한다

docker-compose ps 명령어를 통해

깔끔한 프로세스 정보를 확인한다

 

 

nginx: up(detach)

이전 실행 과정은 detach를 하지 않아

해당 터미널이 닫히면 프로세스가 종료될 수 있다

 

-d 옵션을 통해 detach 모드로 설정한다

이후 실행하면 detach 된다

 

nginx: recreating

volume binding 하여

host 디렉토리와 container 디렉토리를 연결한다

 

다시 up 하는 경우

recreating 된다

이전 컨테이너는 제거되고 새로운 컨테이너가 생긴다

container id는 변경된다

 

 

수정 후 up 했을 때

recreating 로그가 나타난다

이후 curl로 확인하면 잘 동작하는 것을 알 수 있다

 

docker-compose rm 명령어를 통해 

삭제할 수 있다

 

practice: nginx를 2개 설정

docker-compose.yml 파일을 동일하다

 

 

 

compose-nginx2.yml 파일을 추가한다

docker-compose.yml 파일을 복사한 후

다른 이름을 가진 서비스를 추가한다

컨테이너 이름과 ip 주소, volume 등이 달라야 하므로

각각 조금씩 수정한다

network는 동일하게 사용한다

 

container 간에 통신이 필요하면

서로의 존재를 알아야 하므로

다른 컨테이너의 ip 주소와 host name을 시스템에 등록한다

 

아래의 보라색 풍선과 같이

서로의 주소와 이름을 등록한다

 

 

파일명을 수정했으므로

-f 옵션을 통해 수정한 파일을 사용하도록 한다

 

compose 했을 때 두 개의 컨테이너가 생긴다

 

Network

compose를 통해 network를 만들면

compose를 위한 network가 추가된다

 

compose를 stop한 후

compose network만 지우고 

다시 컨테이너를 올리면 에러가 발생한다

network가 재생성되는데 컨테이너가 가리키는 ip는 다르다

 

docker network inspect 명령어를 통해 

network를 확인할 수 있다

 

기존 compose network를 지운 후 확인하면

id 값이 달라진 것을 볼 수 있다

 

이 경우 id를 일일이 수정하거나 재생성 하는 방법이 있다

--force-recreate 옵션을 추가하여 up 명령어를 수행하면

id 값 등이 다시 일치해진다

간혹 이러한 문제가 발생할 수 있다

 

 

docker CLI 옵션이 복잡해지면

docker compose를 사용하는 것을 권장한다

설정에 따라 /etc/hosts에 IP 주소와 hostname을 등록해야 한다

'Docker & Kubernetes > Docker' 카테고리의 다른 글

[Docker]Docker CLI for execution  (1) 2023.12.20
[Docker]Docker CLI for images  (0) 2023.12.17
[Docker] Docker Installation in Linux  (1) 2023.12.17
[Docker]chroot Container  (1) 2023.12.17