docker-compose
install v2
네트워크
docker-compose 에서 network 생성 불가시
특히 VPN 에 접속한 상태에서 발생하는 것으로 보임.
-
-
전제: 내가 이미 docker 에 network 를 직접 생성해둔 상태에서 오류 발생
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
하지 말 것 : 이 경우 이미 존재하는 network 를
docker-compose.yml
에 명시해주거나 직접 생성한 뒤 명시해준다.
services:
myservice:
network_mode: bridge
bridge
사용시에는 docker container 들 간에 docker container 이름 기반의 lookup이 작동하지 않는다.
docker-compose user defined bridge 일 때만 이름 기반 lookup이 작동한다.
더 좋은 해결책 : IP 대역 충돌이 일어나지 않는 subnet 을 지정한 network 를 생성하고 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 으로 네트워크 생성
.env
-
-
환경 변수를 지정할 수 있다.
.env
파일을 만들어서 KEY=VALUE
형태로 추가해주면 docker-compose
실행시 적용된다.
원하는 환경변수 파일을 명시적으로 적용하려면 --env-file=파일명
옵션을 준다.
특정 환경 변수만 변경하고자 한다면 Linux 에서 보편적으로 하는 방식으로 한다.
MY_ENV_VAR=xxx docker compose up -d
# 혹은
export MY_ENV_VAR=xxx
docker compose up -d
servicename:
environment:
- MY_ENV_VAR=xxx # 명시적 값 설정
- ANOTHER_ENV_VAR # 이 값은 외부 설정값이 그대로 container 로 주입됨.
env_file:
- web-variables.env # 환경변수 파일 내의 환경변수들이 전달됨.
Multiple docker-compose.yml 다중 파일 설정
기본적으로 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.admin.yml 에 dbadmin, db-backup 이라는 서비스가 docker-compose.yml 에 있는 db에 접속해서 실행되는 것이라면
docker-compose -f docker-compose.yml -f docker-compose.admin.yml run dbadmin db-backup
Extending Service : 서비스 확장
# common-services.yml - 아래 서비스는 설정일 뿐, 실제로 작동하는게 아님
webapp:
build: .
ports:
- "8000:8000"
volumes:
- "/data"
# docker-compose.yml - webapp 을 확장한 web 서비스
web:
extends:
file: common-services.yml
service: webapp
참조