Docker Compose 필요성 : 다수의 서비스를 실행하는 복잡한 애플리케이션을 설정할 때 각각 서비스에 일일이 docker run 할 필요 없이 하나의 명령어로 각 서비스에 대한 컨테이너를 생성해준다.
Docker Compose
- YAML 형식의 구성파일을 사용해야 한다
version: '2'
services:
redis:
image: redis
db:
image: postgres:9.4
vote:
build: ./vote
depends_on:
- redis
- db
networks:
- front-end
- back-end
ports:
- "8085:6000"
result:
image: result
networks:
- front-end
- back-end
networks:
front-end:
back-end:
- version의 경우 필수는 아니지만, 강력히 권장되는 설정이다.
- version: 1 - 별도의 version을 설정하지 않으면 자동으로 설정된다. 네트워크와 볼륨 설정을 명시적으로 지정할 수 없다.
- version: 2 - 네트워크와 볼륨 설정을 명시적으로 지정할 수 있다. 또한 depens_on 설정 또한 해줄 수 있다. 보통 로컬로 컨테이너를 관리하는데에 사용된다.
- version: 3 - Docker Swarm 클러스터와 통합된 Docker Compose 설정을 지원한다.
- version2 부터는 기본적으로 루트 레벨에 꼭 serivces를 넣어줘야 한다. 이 속성 아래에 있는 것을 컨테이너로 생성시켜준다.
- services 다음 레벨에 써주는 것은 컨테이너 이름을 뜻한다. 컨테이너 밑에 속성들은 컨테이너에 대한 설정 정보이다.
- 여러 인자를 받을 수 있는 속성의 경우 한 개만 입력하여도 -(하이픈)을 꼭 넣어줘야 한다.
- build 속성을 통해 run과 동시에 build를 진행할 수 있다. 도커파일이 있는 위치를 인자로 줘야 한다. (docker run 명령어는 build를 같이 할 수 없음)
- 의존적인 컨테이너는 대상 컨테이너가 실행된 후에 실행되어야 한다. 이를 위해서는 depends_on 속성을 주고 인자로 컨테이너 이름을 주면 된다.
- networks 속성을 통해 컨테이너 간에 통신을 이뤄지게 할 수 있다.
- 도커가 새로운 가상 네트워크를 생성해주고, 각 컨테이너에 이 가상 네트워크 내부 서브넷 IP를 할당해준다.
- 도커 네트워크를 사용하면 도커의 내장 DNS에 의해 컨테이너 이름이 내부 IP로 변경된다. 즉, 한 컨테이너에서 다른 컨테이너의 이름을 사용하면 그 이름은 내부 IP로 변경된다. 이 때 다른 네트워크와는 통신할 수 없다.
- 이 속성을 설정하지 않으면 도커 기본 브릿지 네트워크에 모든 서비스가 속하게 된다.
- docker-compose up 명령어를 통해 docker-compose.yml 파일을 실행한다.
- 이 명령어는 기본적으로 docker-compose.yml 파일을 디폴트로 읽는다. 만약 다른 파일 이름일 시에는 -f을 주면 된다.
- ex) docker-compose -f my-compose.yml up
'Infra > Docker' 카테고리의 다른 글
Docker 스토리지 (0) | 2024.09.12 |
---|---|
Docker Engine (0) | 2024.09.12 |
CMD vs Entrypoint (0) | 2024.09.10 |
환경 변수 설정 (0) | 2024.09.10 |
이미지 생성 (0) | 2024.09.10 |