services:
web:
image: alicek106/composetest:web # 생성하는데 사용할 이미지. 없으면 저장소에서 내려받음
ports: # 컨테이너를 개발할 포트. 80:80처럼 호스트의 특정 포트를 연결하면, scale 조정 불가
- "80:80"
links: # 다른 서비스에 서비스 명만으로 접근할 수 있도록 설정
- mysql:db
command: apachectl -DFOREGROUND # 실행될 때 수행할 명령어
depends_on: # 특정 컨테이너에 대한 의존 관계. 이 항목에 명시된 컨테이너가 먼저 생성되고 실행됨.
- mysql
mysql:
build: ./composetest # 이 항목에 정의된 도커파일로 이미지 빌드. 이미지 이름은 아래 image의 이름
# context: ./composetest
# dockerfile: myDockerFile
# args:
# HOST_NAME: web
# HOST_CONFIG: self_config
image: alicek106/composetest:mysql
command: mysqld
environment: # 환경 설정
- MYSQL_ROOT_PASSWORD=mypassword
extends:
file: asdf.yml
service: extend_web
도커 파일 연결했을 때, 한번 생성하면 도커파일 변경되도 재 빌드 X
-docker-compose up -d --build
네트워크 정의
version: '3.0'
services:
myservice:
image: nginx
networks:
- mynetwork
networks:
mynetwork:
driver: overlay # 사용할 네트워크 드라이버 설정. default= 브릿지. overlay는 스웜이나 주키퍼
dirver_opts:
subnet: "255.255.255.0"
IPAddress: "10.0.0.2"
ipam: # IP Address Manager 사용 옵션
driver: mydriver
config: ...
services:
myservice:
image: nginx
networks:
- mynetwork
networks:
mynetwork:
external: true # 외부 네트워크 사용
볼륨 정의
version: '3.0'
services:
...
volumes:
driver: flocker # 볼륨을 생성할 때 사용할 드라이버. default=local
driver_opts:
opt: "1",
services:
myservice:
image: nginx
volumes:
- myvolume:/var/www/html
volumes:
myvolume:
external: true # 외부 볼륨 사용
YAML 검증
docker-compose config
도커 컴포즈 네트워크
아무것도 입력 안하면, default 브리지 타입
서비스 내의 컨테이너는 --net-alias 자동으로 걸림. 서비스의 이름으로 접근 가능
scale로 컨테이너 개수를 늘려도, 모두 접근 가능 (라운드 로빈으로 분산)
with 도커 스웜
YAML v.3에서 스웜 모드와 함께 사용하기 위해 stack 개념 도입
스택(stack) : YAML 파일에서 생성된 컨테이너의 묶음
YAML 파일로 스택을 생성하면, YAML 에 정의된 서비스가 스웜 모드의 클러스터에서 일괄적으로 생성됨
도커 컴포즈를 사용하는 이유
도커 컴포즈
docker-compose up -d
docker-compose ps
[프로젝트 이름]_[서비스 이름]_[서비스 내 컨테이너 번호]
docker-compose scale mysql=2
YAML 뜯어보기
버전 정의
서비스 정의
docker-compose up -d --build
네트워크 정의
볼륨 정의
YAML 검증
docker-compose config
도커 컴포즈 네트워크
--net-alias
자동으로 걸림. 서비스의 이름으로 접근 가능with 도커 스웜
docker stack
으로 제어