컨ν μ΄λλ₯Ό λΉλ ν λ νκ²½ λ³μκ° μ μ©λμ§ μμ΅λλ€.
docker-compose.yml :
img:
build: img
environment:
VAR: Hello
/ img / Dockerfile :
FROM python:2.7
RUN python -c 'import os; print os.environ["VAR"]'
"Hello"κ° μμ± λ κ²μΌλ‘ μμνκ³ KeyError: VAR
μμ -νκ²½ λ³μκ° μμ΅λλ€.
docker-compose run --rm img bash
(λ§μ§λ§ μ€ν¨ν μ€μ μ κ±°ν ν)λ‘ μ»¨ν
μ΄λμ λ€μ΄κ°μ python -c 'import os; print os.environ["VAR"]'
λ₯Ό μννλ©΄ μμ ν κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€.
docker-compose==1.3.3
docker-version
:
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d
OS/Arch (server): linux/amd64
μ΄κ²μ μμλ©λλ€. environment:
ν€ docker-compose.yml
λ°λ μ¬λμ μ§μ νλ κ²κ³Ό λμΌνλ€ docker run
μ©κΈ°λ₯Ό μμνλ λͺ
λ Ή. build
λ° dockerfile
λ μ΄λ―Έμ§ λΉλμ μ¬μ© λ μ΄μ ν€μ
λλ€.
μ΄κ²μ λ¬Έμμμ λͺ ννμ§ μμ μ μμΌλ©° κ°μ λ μ μμ΅λλ€.
Dockerλ λΉλ νκ²½μ νκ²½μ μ£Όμ νλ κ²μ μ§μνμ§ μμ§λ§ (Dockerfileμ μΌλΆ μ¬μΌ ν¨) μ΄μ κ°μ μ§μμ μΆκ°νκΈ°μν κ³΅κ° μ μμ΄ μλ€κ³ μκ°ν©λλ€.
μ΄ λ¬Έμ λ₯Ό λ°κ²¬ ν λͺ¨λ μ¬λμμν μ°Έμ‘° μΌλΏμ λλ€. μ¬κΈ°μλ λΉλ μκ° λ³μμ λν docker ν λ‘ μ΄ μμ΅λλ€. https://github.com/docker/docker/issues/14634 λ° ν΄λΉ PR : https://github.com/docker/docker / ν / 15182
μ΄κ²μ μ°λ¦¬λ₯Ό μ΄λ ΅κ² λ§λ€κ³ μ λ§λ‘ λ λμ λ¬Έμκ° νμν©λλ€.
λ¬Έμλ μ λ§ νΌλ μ€λ½μ΅λλ€. μλ₯Ό λ€μ΄ docker-compose.yml
μ μ¬μ©λκ³ docker run
μ¬μ©λλ env-fileμ λν΄ μ΄μΌκΈ°ν©λλ€. docker-composeκ° μ»¨ν
μ΄λλ₯Ό λΉλνκ³ μ€ννκΈ°μν μ€μΌμ€νΈλ μ΄μ
λꡬλΌλ μ μ κ°μν λ --env <key>=<value>
λλ μ΄μ μ μ¬ν κ²μ μ¬μ©νμ¬ νκ²½μ΄ λΉλ μκ°μ μ μ©λλ€κ³ κ°μ νκΈ° μ½μ΅λλ€.
λλ λ¬Όμλ€.
νκ²½ λ³μλ compose νμΌμμ λΉλ μΈμλ‘ μ€μ ν μ μμ΅λλ€. μ΄ μ€λ λμ λ€λ₯Έ μ¬λλ€κ³Ό λ§μ°¬κ°μ§λ‘ μ²μμλ env_file λλ νκ²½μ΄ λΉλμ μ€ν λͺ¨λμμ μ¬μ©λ κ²μΌλ‘ μμνμ΅λλ€.
compose νμΌ v2, docker-compose v1.7, docker-engine v1.11μΌλ‘ νμΈλμμ΅λλ€.
https://github.com/docker/compose/pull/3747μ μ λ°μ΄νΈ λ λ¬Έμ
νμΌμμ νκ²½ λ³μλ₯Ό ν¬ν¨ν΄μΌνλ κ²½μ° λ€μμ μν ν μ μμ΅λλ€. μ΄κ²μ (λ컀 μμ± λΉλ μΉμ μμ) μ΄λ¬ν λ³μμμ μ€μ λ μΈμλ₯Ό νμλ‘νλ©°, κ·Έλ° λ€μ λ컀 νμΌμμ μ°Έμ‘° ν μ μμ΅λλ€. μ¦, env_fileμ μ§μ μ¬μ¬μ© ν μλ μμ§λ§ μ½κ°μ μΆκ° μμ μΌλ‘ κ·Έλ κ² ν μ μμ΅λλ€.
env $(cat vars.env | xargs) docker-compose up --build <whatever>
μ΄ μ€ν μ€λ²νλ‘ μ§λ¬Έμ λν λ΅λ³μ https://stackoverflow.com/questions/19537645/get-environment-variable-value-in-dockerfileμ λμμ΄λμμ΅λλ€.
.env νκ²½ λ³μλ₯Ό ARGSμ 맀ννμ¬ λΉλνλ λμ Dockerfileμμ μ¬μ©ν μ μμ΅λλ€.
docker-compose.yml
version: "2"
services:
lumen:
build:
context: .
dockerfile: ./Dockerfile
args:
- PORT=${PORT}
volumes:
...
Dockerfile
FROM php:7.0-apache
ARG PORT
ENV PORT "$PORT"
EXPOSE ${PORT}
...
@williamli μ€ν μ€λ²νλ‘ μ§λ¬Έμ λν λ§ν¬λ₯Ό μΆκ° ν μ μμ΅λκΉ?
μ£μ‘ν©λλ€.μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ λ°©λ²μ μ λͺ¨λ₯΄κ² μ΅λλ€. μ¬μ μ μ λ μ΄λ―Έμ§λ₯Ό μ¬μ©νκ³ μΆμ΅λλ€.
λ²μ : '3'
μλΉμ€:
web1 :
μ΄λ―Έμ§ : softwaremaker / web-w
νκ²½:
api μ΄λ―Έμ§ (softwaremaker / api-w)κ° μμμ μ€μ ν νκ²½ λ³μλ‘ ν΄μ λ μ μλ€κ³ μκ°νμ§λ§ μλνμ§ μμ΅λλ€.
λΏ‘ λΉ΅λ¨
λ΄ μλ λκΈμ stackoverflow λ§ν¬λ₯Ό μΆκ°νμ΅λλ€.
https://stackoverflow.com/questions/19537645/get-environment-variable-value-in-dockerfile
μ΄ λ¬Έμ λ κΈ°λ³Έ .env
νμΌ μ΄μΈμ env νμΌκ³Ό μ¬μ ν κ΄λ ¨μ΄ μμ΅λλ€.
Fe Next μ½λκ° μλνμ§ μμ΅λλ€.
nginx:
env_file:
- .env
- .env.local
environment:
- SERVER_NAME=${SERVER_NAME}
build:
context: ./nginx
dockerfile: Dockerfile
args:
server_name: ${SERVER_NAME}
SERVER_NAMEμ λ λ²μ§Έ env νμΌ ( .env.local
)μ μ μλμ΄ μμ΅λλ€.
컨ν
μ€νΈλ₯Ό λΉλνκΈ° μν΄ .env.localμμ env varsλ₯Ό μ λ¬νλ μ΅μ
μ΄ μμ΅λλ€ ((
리λͺ¨νΈ
λλ νμΌμ΄ νΈμΆλλ κ²½μ° κ·Έλ€μ λ¨μ§ λΉλ νλ‘μΈμ€μ μ λ¬λλ λΉλνλ λμ μ¬μ©λλ λ³μκ° μλ€λ©΄ λλλΏλ§ μλλΌμ΄λ₯Ό νμΈν μ μμ΅λλ€ .env
κ·Έλ€μ μ΄λ¦μ μ§μ νλ κ²½μ° .env.docker
κ·Έλ€μνμ§ μμ΅λλ€ μ£Όμ. env_file
κ° .env.docker
νμΌμ μ¬μ©νλλ‘ μ§μ λ κ²½μ°μλ λ§μ°¬κ°μ§μ
λλ€.
λ΄ λΉλ μ€μ λ€λ₯Έ μ΄λ¦μ env νμΌμ 볡μ¬νκ³ .envλ‘ μ΄λ¦μ λ°κΎΈλ λμ λ΄ μ루μ
COPY .env.docker ${APP_HOME}/.env
WORKDIR $APP_HOME
κ·Έ ν 컨ν μ΄λκ° μ€νλ λ νκ²½ λ³μλ₯Ό μ ννλ κ²μ²λΌ 보μμ΅λλ€.
μ΄μ 체μ : macOS (10.14.6)
Docker λ°μ€ν¬ν± λ²μ : 2.1.0.5 (40693)
μμ§ λ²μ : 19.03.5
μμ± : 1.24.1
μλ νμΈμ μ¬λ¬λΆ,
μ¬λ¬λΆ λͺ¨λμκ² κ°λ¨ν μ§λ¬Έμ λλ€. μ΄κ²μ΄ κ°λ°μ μ© μ΄λ―Έμ§λ₯Ό ꡬμΆνλ λ μ’μ λ°©λ²μ΄ λ κΉμ? μ§κΈκΉμ§λ μ μλν©λλ€. κ·Έλ¬λ μ΄κ²μ΄ κΆμ₯λλ λ°©λ²μ λκΉ? λͺ¨λ μ΄λ―Έμ§λ λ²μ€ν°λ₯Ό κΈ°λ°μΌλ‘ν©λλ€.
```
redis : busterμμ redisλ‘
mkdir / env && env> /env/.env_redis μ€ν
μ€ν κ³ μμ΄ / etc / passwd
ls -lah / home μ€ν
루λΉμμ : 루λΉλ‘ μ¬λ¦Ό λ²μ€ν°
mkdir / env && env> /env/.env_ruby μ€ν
FROM λ
Έλ : lts-buster-slim AS λ
Έλ
mkdir / env && env> /env/.env_node μ€ν
nginxμμ : μ΅μ AS nginx
mkdir / env && env> /env/.env_nginx μ€ν
php : fpm-buster AS phpμμ
mkdir / env && env> /env/.env_php μ€ν
λ³΅μ¬ --from = redis / /
λ³΅μ¬ --from = ruby ββ/ /
λ³΅μ¬ --from = node / /
λ³΅μ¬ --from = nginx / /
conf / include-site.conf /etc/nginx/conf.d/include-site.conf μΆκ°
conf / supervisord.conf /etc/supervisord.conf μΆκ°
루νΈμμ μ€ν
λ
ΈμΆ 80443
WORKDIR "/ var / www / html"
ENTRYPOINT [ "/ bin / bash", "/start.sh"]
λ¬Έμ κ° μ¬μ ν μ‘΄μ¬ν©λλ€.
λΉλ μΉμ
μ env_file ν€λ env varsλ₯Ό argsλ₯Ό ν΅ν΄ 컨ν
μ΄λ λΉλλ‘ μ λ¬νλ κ²λ³΄λ€ λ λͺ
νν©λλ€.
μ΄λ κ² :
#NOT_WORKING
build:
context: ./client
dockerfile: Dockerfile
env_file: ${CURRENT_ENV_FILE}
μ
Έ μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬ Dockerλ₯Ό μμ±νκ³ κ΅¬μ±νκΈ° λλ¬Έμ
λλ€.
νλ‘λμ
μ μν΄μλ dev / localκ³Ό λ€λ₯Έ env_fileμ΄ νμν©λλ€.
κ·Έλ¦¬κ³ argsκ° λ§μ docker-compose.env.yml νμΌμ΄ λ§κΈ° λλ¬Έμ μκ°λ³΄λ€ νΈλ¦¬νμ§ μμ΅λλ€.
λλ μ΄κ²μ λν΄ μ°μν λ°©λ²μ΄ νμνλ€κ³ μκ°ν©λλ€. λλ λ컀 ꡬ문μ μ λ§ μ’μνκ³ νκ²½ λ³μ λμ μΈμλ₯Ό μ¬μ©νλ κ²μ λμκ² μλ―Έκ° μμ΅λλ€. λκ΅°κ°κ° λ΄ λ컀 μμ± νμΌμ μλμΌλ‘ λ³κ²½νλ κ²μ μνμ§ μμ΅λλ€. .env νμΌμ κ°μ λ³κ²½νλ κ²μ λμκ² μΌκ΄λ κ²μ²λΌ 보μ λλ€.
κ°μ₯ μ μ©ν λκΈ
μ΄ μ€ν μ€λ²νλ‘ μ§λ¬Έμ λν λ΅λ³μ https://stackoverflow.com/questions/19537645/get-environment-variable-value-in-dockerfileμ λμμ΄λμμ΅λλ€.
.env νκ²½ λ³μλ₯Ό ARGSμ 맀ννμ¬ λΉλνλ λμ Dockerfileμμ μ¬μ©ν μ μμ΅λλ€.
docker-compose.yml
Dockerfile