DOCKER 솔루션 :
docker-compose 1.5 이상에서 변수 대체를 활성화 한 것 같습니다 : https://github.com/docker/compose/releases
최신 Docker Compose를 사용하면 작성 파일에서 환경 변수에 액세스 할 수 있습니다. 따라서 환경 변수를 소싱 한 다음 Compose를 다음과 같이 실행할 수 있습니다.
set -a
source .my-env
docker-compose up -d
그런 다음 $ {VARIABLE}을 사용하여 docker-compose.yml에서 변수를 참조 할 수 있습니다.
db:
image: "postgres:${POSTGRES_VERSION}"
그리고 여기 문서에서 가져온 더 많은 정보가 있습니다 : https://docs.docker.com/compose/compose-file/#variable-substitution
이 구성으로 docker-compose를 실행하면 Compose는 셸에서 POSTGRES_VERSION 환경 변수를 찾아 그 값을 대체합니다.이 예에서 Compose는 구성을 실행하기 전에 이미지를 postgres : 9.3으로 해석합니다.
환경 변수가 설정되지 않은 경우 작성은 빈 문자열로 대체됩니다. 위의 예에서 POSTGRES_VERSION이 설정되지 않은 경우 이미지 옵션의 값은 postgres :입니다.
$ VARIABLE 및 $ {VARIABLE} 구문이 모두 지원됩니다. $ {VARIABLE-default} 및 $ {VARIABLE / foo / bar}와 같은 확장 된 셸 스타일 기능은 지원되지 않습니다.
구성 값에 리터럴 달러 기호를 넣어야하는 경우 더블 달러 기호 ($$)를 사용하십시오.
그리고이 풀 요청 에이 기능이 추가되었다고 생각합니다 : https://github.com/docker/compose/pull/1765
BASH 솔루션 :
Docker의 환경 변수 지원에 문제가있는 사람들이 있습니다. Docker에서 환경 변수를 처리하는 대신 bash와 같은 기본으로 돌아가 봅시다! bash 스크립트와 .env
파일을 사용하는보다 유연한 방법이 있습니다.
.env 파일 예 :
EXAMPLE_URL=http://example.com
# Note that the variable below is commented out and will not be used:
# EXAMPLE_URL=http://example2.com
SECRET_KEY=ABDFWEDFSADFWWEFSFSDFM
# You can even define the compose file in an env variable like so:
COMPOSE_CONFIG=my-compose-file.yml
# You can define other compose files, and just comment them out
# when not needed:
# COMPOSE_CONFIG=another-compose-file.yml
그런 다음이 bash 스크립트를 동일한 디렉토리에서 실행하십시오.이 디렉토리는 모든 것을 올바르게 배치해야합니다.
#!/bin/bash
docker rm -f `docker ps -aq -f name=myproject_*`
set -a
source .env
cat ${COMPOSE_CONFIG} | envsubst | docker-compose -f - -p "myproject" up -d
일반적인 bash 구문을 사용하여 작성 파일에서 env 변수를 참조하십시오 (예 : 파일 에서 ${SECRET_KEY}
삽입 ).SECRET_KEY
.env
(가) 주 COMPOSE_CONFIG
내에서 정의 .env
파일 내 bash는 스크립트에 사용되는,하지만 당신은 그냥 쉽게 교체 할 수 있습니다 {$COMPOSE_CONFIG}
과 my-compose-file.yml
bash는 스크립트.
또한 모든 컨테이너의 이름을 "myproject"접두어로 지정하여이 배포에 레이블을 지정했습니다. 원하는 이름을 사용할 수 있지만 나중에 쉽게 참조 할 수 있도록 컨테이너를 식별하는 데 도움이됩니다. 컨테이너가 상태가없는 것으로 가정하면이 스크립트는 .env 파일 매개 변수 및 작성 YAML 파일에 따라 컨테이너를 빠르게 제거하고 재배치합니다.
업데이트이
답변은 꽤 인기가있는 것으로 보이므로 Docker 배포 워크 플로에 대해보다 자세하게 설명하는 블로그 게시물을 작성했습니다. http://lukeswart.net/2016/03/lets-deploy-part-1/ 추가하면 도움이 될 수 있습니다 nginx 구성, LetsEncrypt 인증서 및 연결된 컨테이너와 같은 배포 구성에 대한 더 복잡한.