Priceless
[Docker]docker compose 본문
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 |