사용자 도구

사이트 도구


docker:docker_compose

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
다음 판 양쪽 다음 판
docker:docker_compose [2022/03/17 15:46]
kwon37xi [docker-compose 에서 network 생성 불가시]
docker:docker_compose [2022/03/18 10:47]
kwon37xi [Multiple docker-compose.yml]
줄 27: 줄 27:
 ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network ERROR: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network
 </code> </code>
-  * 이 경우 이미 존재하는 network 를 ''docker-compose.yml'' 에 명시해주거나 직접 생성한 뒤 명시해준다.<code yml>+  * **하지 말 것** : 이 경우 이미 존재하는 network 를 ''docker-compose.yml'' 에 명시해주거나 직접 생성한 뒤 명시해준다.<code yml>
 services: services:
    myservice:    myservice:
줄 34: 줄 34:
   * ''bridge'' 사용시에는 docker container 들 간에 docker container 이름 기반의 lookup이 작동하지 않는다.   * ''bridge'' 사용시에는 docker container 들 간에 docker container 이름 기반의 lookup이 작동하지 않는다.
   * docker-compose user defined bridge 일 때만 이름 기반 lookup이 작동한다.   * docker-compose user defined bridge 일 때만 이름 기반 lookup이 작동한다.
 +  * 더 좋은 해결책 : IP 대역 충돌이 일어나지 않는 subnet 을 지정한 network 를 생성하고 ''default''로 지정한다. 이 경우 이름 lookup 도 잘 작동한다.
 +<code yml>
 +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 으로 네트워크 생성
 +</code>
   * [[https://docs.docker.com/compose/networking/|Networking in Compose | Docker Documentation]]   * [[https://docs.docker.com/compose/networking/|Networking in Compose | Docker Documentation]]
 ===== .env ===== ===== .env =====
   * [[https://docs.docker.com/compose/env-file/|Declare default environment variables in file | Docker Documentation]]   * [[https://docs.docker.com/compose/env-file/|Declare default environment variables in file | Docker Documentation]]
 +  * [[https://docs.docker.com/compose/environment-variables/|Environment variables in Compose | Docker Documentation]]
   * 환경 변수를 지정할 수 있다.   * 환경 변수를 지정할 수 있다.
   * ''.env'' 파일을 만들어서 ''KEY=VALUE'' 형태로 추가해주면 ''docker-compose'' 실행시 적용된다.   * ''.env'' 파일을 만들어서 ''KEY=VALUE'' 형태로 추가해주면 ''docker-compose'' 실행시 적용된다.
   * 원하는 환경변수 파일을 명시적으로 적용하려면 ''%%--env-file=파일명%%'' 옵션을 준다.   * 원하는 환경변수 파일을 명시적으로 적용하려면 ''%%--env-file=파일명%%'' 옵션을 준다.
 +  * 특정 환경 변수만 변경하고자 한다면 Linux 에서 보편적으로 하는 방식으로 한다.
  
 +<code sh>
 +MY_ENV_VAR=xxx docker compose up -d
  
 +# 혹은
 +export MY_ENV_VAR=xxx
 +docker compose up -d
 +</code>
 +  * ''docker-compose.yml'' 내에서의 환경변수
 +<code yml>
 +servicename:
 +  environment:
 +    - MY_ENV_VAR=xxx # 명시적 값 설정
 +    - ANOTHER_ENV_VAR # 이 값은 외부 설정값이 그대로 container 로 주입됨.
 +  env_file:
 +    - web-variables.env # 환경변수 파일 내의 환경변수들이 전달됨.
 +</code>
 +  * ''docker-compose.yml'' 에서 환경 변수 사용
 +    * ''${MY_VARIABLE}'' : 주입된 값을 그냥 사용
 +    * ''${MY_VARIABLE:-default}'' : ''MY_VARIABLE'' 이 지정이 안 됐거나 빈 값(''""'')이면 ''default'' 사용
 +    * ''${MY_VARIABLE-default}'' : ''MY_VARIABLE'' 이 지정이 안 된 경우에만 ''default'' 사용
  
 +===== Multiple docker-compose.yml =====
 +  * 기본적으로 ''docker-compose.yml''과 존재할 경우 ''docker-compose.override.yml''을 순서대로 읽어서 적용한다.
 +  * 따라서 개발자가 자기만의 환경이 필요할 때는 ''.gitignore''에 ''docker-compose.override.yml''을 넣어두고, 추가 사항만 해당 파일에 override할 추가 사항을 기입하면 된다.
 +  * [[https://runnable.com/docker/advanced-docker-compose-configuration|Advanced Docker Compose Configuration | Runnable Docker Guides]]
 +  * ''-f'' 옵션으로 명시적으로 파일을 지정하면 ''docker-compose.override.yml''은 무시된다.
 +<code sh>
 +# 두 파일을 순서대로 읽음.
 +docker-compose -f docker-compose.yml -f docker-compose.production.yml up -d
 +</code>
 ===== 참조 ===== ===== 참조 =====
   * [[https://dev-yeon.tistory.com/20|[docker-compose] docker-compose up에서 네트워크 생성이 되지 않을 때]]   * [[https://dev-yeon.tistory.com/20|[docker-compose] docker-compose up에서 네트워크 생성이 되지 않을 때]]
   * [[https://www.44bits.io/ko/post/almost-perfect-development-environment-with-docker-and-docker-compose|도커(Docker) 컴포즈를 활용하여 완벽한 개발 환경 구성하기 | 44BITS 기술 블로그]]   * [[https://www.44bits.io/ko/post/almost-perfect-development-environment-with-docker-and-docker-compose|도커(Docker) 컴포즈를 활용하여 완벽한 개발 환경 구성하기 | 44BITS 기술 블로그]]
   * [[https://meetup.toast.com/posts/277|Docker Compose와 버전별 특징 : NHN Cloud Meetup]]   * [[https://meetup.toast.com/posts/277|Docker Compose와 버전별 특징 : NHN Cloud Meetup]]
docker/docker_compose.txt · 마지막으로 수정됨: 2023/02/02 09:22 저자 kwon37xi