Docker Compose
도커 컴포즈란 컨테이너 CI 툴로 정의 할 수 있다.
기본적인 사용법은 도커를 cli run 명령으로 사용하던 것을 yml 파일로 정의해 두는 것이다.
기본 사용법
파일명: docker-compose.yml (default)
주의) 탭 사용이 안되니 스페이스 두칸으로 할것
myproject#> vi docker-compose.yml
version: '3.0'
services:
web:
image: alicek106/compsetest:web
ports:
- 80:80
links:
- mysql:db
command: sudo apachectl -DFOREGROUND
mysql:
image: alicek106/composetest:mysql
command: mysqld
* yml 검증
myproject#> docker-compose config
* 실행
myproject#> docker-compose up -d
-> -p : 프로젝트명 지정
-> -f : 파일명 지정
-> -d : detach mode
* 컨테이너 확인
myproject#> docker-compose ps
-> 컨테이너 네이밍 규칙: [프로젝트명]_[서비스명]_[서비스내 컨테이너 번호]
-> 프로젝트명은 명시적으로 주지 않으면 docker-compse.yml이 있는 폴더명
-> ex) myproject_web_1, myproject_mysql_1, ...
* 스케일링
myproject#> docker-compose scale mysql=2
* 삭제
myproject#> docker-compose down
yml properties
- version : 버전(1 / 2 / 2.1 / 3 / 더 나오겠지)
- services: 서비스 정의(대부분 cli run과 동일 기능)
- image: 사용할 이미지 설정
- links: local에서 컨테이너명으로 link하던 것
- environment: 환경변수 설정
- command: 실행문
- depends_on: 컨테이너 의존관계(컨테이너 실행 순서와 관계).
- ports: 포트 설정
- build: 도커파일에서 이미지 생성해서 컨테이너 생성되도록 설정
- extends: 다른 yml 파일 상속
- networks: 네트워크 설정(기본은 bridge)
- 네트워크명(사용자임의)
- driver: 네트워크 드라이버 설정(overlay, bridge 등)
- driver_opts: 옵션
- subnet
- IPAddress
- external: true이면 생성하지 않고 기존에 있던 네트워크 사용
- volume: 볼륨 설정
- 볼륨명(사용자정의)
- driver: 볼륨 드라이버 설정
- driver_opts: 옵션
도커 컴포즈 스웜 모드로(=stack)
* stack 실행
myproject#> docker stack deploy -c docker-compose.yml mystack
주의) links 옵션은 local 컨테이너에만 적용됨으로 스웜에서는 사용 안됨.
* stack 확인
myproject#> docker stack ls
* service 확인
myproject#> docker stack services mystack
= docker service ls
* service scaling
myproject#> docker service scale {서비스명}={스켈링수}
* stack 삭제
myproject#> docker stack rm {스택명}
댓글
댓글 쓰기