docker compose
형태로 사용가능해졌다.$HOME/.docker/cli-plugins/docker-compose
로 다운로드한다.chmod +x $HOME/.docker/cli-plugins/docker-compose
로 실행 권한을 주면 이제 docker compose
명령으로 사용가능해진다.services
의 이름에 밑줄(_
)이 있을 경우, 동일 docker-compose 내의 다른 컨테이너에서 해당 이름으로 네트워크 접속이 안됐다.Creating network "xxx_default" with the default driver ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
docker-compose.yml
에 명시해주거나 직접 생성한 뒤 명시해준다.services: myservice: network_mode: bridge
bridge
사용시에는 docker container 들 간에 docker container 이름 기반의 lookup이 작동하지 않는다.default
로 지정한다. 이 경우 이름 lookup 도 잘 작동한다.networks: default: driver: bridge ipam: config: - subnet: ${MY_SUBNET:-192.168.100.1/24} # 192.168.100.x 대역의 subnet 으로 네트워크 생성 # .env 파일이나 환경 변수로 MY_SUBNET 값을 강제 지정가능함. # 만약 network 이름이 default 가 아니라면, 각 service 에 네트워크 이름 명시 필요 services: myservice: networks: - mynetwork networks: mynetwork: driver: bridge ipam: config: - subnet: ${MY_SUBNET:-192.168.100.1/24} # 192.168.100.x 대역의 subnet 으로 네트워크 생성
docker-compose.yml
에 직접 지정하지 말고, 아래에서 설명하는 다중 파일 기법으로 따로 설정을 빼두고 사용자에 따라 파일을 명시적으로 읽게하는게 좋다..env
파일을 만들어서 KEY=VALUE
형태로 추가해주면 docker-compose
실행시 적용된다.--env-file=파일명
옵션을 준다.MY_ENV_VAR=xxx docker compose up -d # 혹은 export MY_ENV_VAR=xxx docker compose up -d
docker-compose.yml
내에서의 환경변수servicename: environment: - MY_ENV_VAR=xxx # 명시적 값 설정 - ANOTHER_ENV_VAR # 이 값은 외부 설정값이 그대로 container 로 주입됨. env_file: - web-variables.env # 환경변수 파일 내의 환경변수들이 전달됨.
docker-compose.yml
에서 환경 변수 사용${MY_VARIABLE}
: 주입된 값을 그냥 사용${MY_VARIABLE:-default}
: MY_VARIABLE
이 지정이 안 됐거나 빈 값(“”
)이면 default
사용${MY_VARIABLE-default}
: MY_VARIABLE
이 지정이 안 된 경우에만 default
사용docker-compose.yml
과 존재할 경우 docker-compose.override.yml
을 순서대로 읽어서 적용한다..gitignore
에 docker-compose.override.yml
을 넣어두고, 추가 사항만 해당 파일에 override할 추가 사항을 기입하면 된다.-f
옵션으로 명시적으로 파일을 지정하면 docker-compose.override.yml
은 무시되고 지정한 순서대로 설정을 override 한다.# 두 파일을 순서대로 읽고 설정을 override 한다. docker-compose -f docker-compose.yml -f docker-compose.production.yml up -d
docker-compose.yml
에 있는 서버에 접속하는 admin web 을 원할 때만 띄우고 싶다면 admin 용 yml을 만들고서 run
명령으로 필요할 때만 띄운다.# docker-compose.admin.yml 에 dbadmin, db-backup 이라는 서비스가 docker-compose.yml 에 있는 db에 접속해서 실행되는 것이라면 docker-compose -f docker-compose.yml -f docker-compose.admin.yml run dbadmin db-backup
common-services.yml
에 공통 설정으로 된 service 가 하나 있다면 해당 service 의 공통 설정을 가져가는 확장할 수 있다.# common-services.yml - 아래 서비스는 설정일 뿐, 실제로 작동하는게 아님 webapp: build: . ports: - "8000:8000" volumes: - "/data"
# docker-compose.yml - webapp 을 확장한 web 서비스 web: extends: file: common-services.yml service: webapp
links
, volumes_from
, depends_on
은 extends
로는 공유할 수 없다. 항상 명시해야 한다.