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 {스택명}


댓글

이 블로그의 인기 게시물

[Protocol] WIEGAND 통신

Orange for Oracle에서 한글 깨짐 해결책

[UI] GNB·LNB·SNB·FNB 용어 설명