source

docker-compose.yml의 환경 변수 재사용

itover 2023. 8. 5. 22:47
반응형

docker-compose.yml의 환경 변수 재사용

여러 컨테이너 간에 공유되는 환경 변수를 재사용할 수 있습니까?

이 방법은 다음 예에서 설명한 것처럼 중복을 방지하는 것입니다.

version: '2'

services:

  db:
    image: example/db
    ports:
      - "8443:8443" 
    container_name: db
    hostname: db
    environment:
      - USER_NAME = admin 
      - USER_PASSWORD = admin 

svc:
  image: example/svc
  depends_on:
    - db
  ports:
    - "9443:9443"
  container_name: svc
  hostname: svc
  environment:
    - DB_URL = https://db:8443
    - DB_USER_NAME = admin
    - DB_USER_PASSWORD = admin 

extends옵션은 좋을 수 있지만 에서 지원되지 않습니다.3.x파일을 작성합니다.다른 방법은 다음과 같습니다.

  1. 확장 필드(파일 3.4+ 작성)

    3.4 이상의 파일 작성을 사용할 수 있는 경우 확장 필드가 가장 좋은 옵션일 것입니다.

    도커-docker.yml

     version: '3.4'
    
     x-common-variables: &common-variables
       VARIABLE: some_value
       ANOTHER_VARIABLE: another_value
    
     services:
       some_service:
         image: someimage
         environment: *common-variables
    
       another_service:
         image: anotherimage
         environment:
           <<: *common-variables
           NON_COMMON_VARIABLE: 'non_common_value'
    
  2. env_file 디렉티브

    도커-docker.yml

     version: '3.2'
    
     services:
       some_service:
         image: someimage
         env_file:
           - 'variables.env'
    
       another_service:
         image: anotherimage
         env_file:
           - 'variables.env'
    

    variables.env

     VARIABLE=some_value
     ANOTHER_VARIABLE=another_value
    
  3. 프로젝트 루트의 .env 파일(또는 실제 작성 환경의 변수)

    .env 파일의 변수는 서비스 구성에서 참조할 수 있습니다.

    도커-docker.yml

     version: '3.2'
    
     services:
       some_service:
         image: someimage
         environment:
           - VARIABLE
    
       another_service:
         image: anotherimage
         environment:
           - VARIABLE
           - ANOTHER_VARIABLE
    

    .env

     VARIABLE=some_value
     ANOTHER_VARIABLE=another_value
    

확장 지시문을 사용할 수 있습니다(구성 시 사용 가능).1.x그리고.2.x여러 컨테이너가 다음을 상속받습니다.environment기본 서비스 설명의 구성입니다.예를 들어, 다음과 같은 이름의 파일을 입력합니다.base.yml:

version: '2'

services:
  base:
    environment:
      DB_URL: https://db:8443
      DB_USER_NAME: admin
      DB_USER_PASSWORD: admin 

그럼 당신의docker-compose.yml:

version: '2'

services:
  container1:
    image: alpine
    command: sh -c "env; sleep 900"
    extends:
      file: base.yml
      service: base

  container2:
    image: alpine
    command: sh -c "env; sleep 900"
    extends:
      file: base.yml
      service: base
    environment:
      ANOTHERVAR: this is a test

그다음에 안에.container1다음과 같이 표시됩니다.

DB_URL=https://db:8443
DB_USER_NAME=admin
DB_USER_PASSWORD=admin

그리고 그 안에.container2다음과 같이 표시됩니다.

DB_URL=https://db:8443
DB_USER_NAME=admin
DB_USER_PASSWORD=admin
ANOTHERVAR=this is a test

당신은 분명히 사용할 수 있습니다.extends이외의 일로environment지시사항; 도커 브라우저를 사용할 때 중복을 방지하는 좋은 방법입니다.

도커 합성 파일 내에서 로컬 환경 변수를 참조할 수 있습니다.당신이 하고 싶은 일이 당신이 만드는 것이라고 가정할 때USER_NAME와 같은DB_USER_NAME:

도커-docker.yml

version: '2'

services:
  db:
    image: example/db
    ports:
      - "8443:8443" 
    container_name: db
    hostname: db
    environment:
      - USER_NAME = ${USERNAME}
      - USER_PASSWORD = ${PASSWORD}

svc:
  image: example/svc
  depends_on:
    - db
  ports:
    - "9443:9443"
  container_name: svc
  hostname: svc
  environment:
    - DB_URL = https://db:8443
    - DB_USER_NAME = ${USERNAME}
    - DB_USER_PASSWORD = ${PASSWORD}

그런 다음 도커 합성을 다음과 같이 실행합니다.

$ USERNAME="admin" PASSWORD="admin" docker-compose up

또는 더 영구적이고 반복적으로 입력하기 쉬운 항목을 선택할 수 있습니다.

$ printf '%s\n%s\n' 'export USERNAME="admin"' 'export PASSWORD="admin"' >> ~/.bash_profile
$ source ~/.bash_profile
$ docker-compose up

언급URL : https://stackoverflow.com/questions/36283908/re-using-environment-variables-in-docker-compose-yml

반응형