Compose: 기본값이 μžˆλŠ” ν™˜κ²½ λ³€μˆ˜λŠ” μž‘μ„± λ‚΄μ—μ„œ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2017λ…„ 02μ›” 13일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: docker/compose

문제

λ‹€μŒμ—μ„œ μ œκ³΅λ˜λŠ” μž‘μ„± 파일 λ‚΄ ν™˜κ²½ λ³€μˆ˜ κ°€μš©μ„±:

  • μ…Έ λ˜λŠ” .env 파일
  • μž‘μ„± νŒŒμΌμ— μ •μ˜

일관성이 μ—†λŠ” λŠλ‚Œ. 기본값이 μžˆλŠ” ν™˜κ²½ λ³€μˆ˜λŠ” μ™ΈλΆ€μ—μ„œ λͺ…μ‹œμ μœΌλ‘œ μ œκ³΅λ˜μ§€ μ•ŠλŠ” ν•œ μž‘μ„± λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

예

λ‹€μŒκ³Ό 같은 μ΅œμ†Œ μž‘μ„± νŒŒμΌμ„ κ³ λ €ν•˜μ‹­μ‹œμ˜€.

version: '3'
services:
    example:
        environment:
            TAG: edge
        image: alpine:${TAG}

${TAG} λ³€μˆ˜λŠ” μž‘μ„± 파일 λ‚΄ _μ–΄λ””μ„œλ“ _ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

예:

$ docker-compose up
WARNING: The TAG variable is not set. Defaulting to a blank string.
Pulling example (alpine:latest)...
...

ν•˜μ§€λ§Œ:

$ TAG=edge docker-compose up
Pulling example (alpine:edge)...
...

이제 μž‘μ„± 파일 λ‚΄μ—μ„œ $TAGλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ²°κ³Ό

compose 파일 λ‚΄μ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ 항상 env λ³€μˆ˜ 값을 λͺ…μ‹œμ μœΌλ‘œ μ œκ³΅ν•΄μ•Ό ν•©λ‹ˆλ‹€.

λͺ¨λ“  env λ³€μˆ˜κ°€ compose 파일 λ‚΄μ—μ„œ, 특히 μ²˜μŒμ— μ •μ˜λœ λ³€μˆ˜ λ‚΄μ—μ„œ μ‚¬μš© κ°€λŠ₯/해석될 κ²ƒμœΌλ‘œ κΈ°λŒ€ν•˜λŠ” 것이 μžμ—°μŠ€λŸ½μŠ΅λ‹ˆλ‹€. 이것은 사싀이 μ•„λ‹Œ κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ.

이전에 닡변이 λ˜μ—ˆλ‹€λ©΄ μ£„μ†‘ν•©λ‹ˆλ‹€. 문제 λͺ©λ‘μ—μ„œ 이 νŠΉμ • μ‚¬μš© 사둀λ₯Ό 찾지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€.

기술 사양:

$ docker version
Client:
 Version:      1.13.1
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      darwin/amd64

Server:
 Version:      1.13.1
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      linux/amd64
 Experimental: true
$ docker-compose version
docker-compose version 1.11.1, build 7c5d5e4
docker-py version: 2.0.2
CPython version: 2.7.12
OpenSSL version: OpenSSL 1.0.2j  26 Sep 2016
kinquestion

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λͺ…ν™•μ„± νŽ˜μ΄μ§€λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€: https://docs.docker.com/compose/environment-variables/

κ°„λ‹¨νžˆ λ§ν•΄μ„œ, μž‘μ„± 파일의 environment ν•­λͺ©μ€ λŸ°νƒ€μž„μ— μ»¨ν…Œμ΄λ„ˆ/μ„œλΉ„μŠ€ λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„ μ–Έν•©λ‹ˆλ‹€. λ°˜λ©΄μ— λ³€μˆ˜ λŒ€μ²΄λŠ” docker-compose κ°€ μ‹€ν–‰λ˜λŠ” ν˜ΈμŠ€νŠΈμ— μžˆλŠ” λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜ν–‰λ©λ‹ˆλ‹€. 그것듀은 두 개의 λ‹€λ₯Έ μ„ΈνŠΈμ΄λ©° λ³„λ„λ‘œ μœ μ§€λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

λͺ¨λ“  3 λŒ“κΈ€

λͺ…ν™•μ„± νŽ˜μ΄μ§€λ₯Ό μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€: https://docs.docker.com/compose/environment-variables/

κ°„λ‹¨νžˆ λ§ν•΄μ„œ, μž‘μ„± 파일의 environment ν•­λͺ©μ€ λŸ°νƒ€μž„μ— μ»¨ν…Œμ΄λ„ˆ/μ„œλΉ„μŠ€ λ‚΄λΆ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„ μ–Έν•©λ‹ˆλ‹€. λ°˜λ©΄μ— λ³€μˆ˜ λŒ€μ²΄λŠ” docker-compose κ°€ μ‹€ν–‰λ˜λŠ” ν˜ΈμŠ€νŠΈμ— μžˆλŠ” λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜ν–‰λ©λ‹ˆλ‹€. 그것듀은 두 개의 λ‹€λ₯Έ μ„ΈνŠΈμ΄λ©° λ³„λ„λ‘œ μœ μ§€λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

μ„€λͺ… κ°μ‚¬ν•©λ‹ˆλ‹€!

μ§€κΈˆ 같은 λ¬Έμ œκ°€ λ°œμƒν–ˆμ§€λ§Œ ν•΄κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€. docker-compose ν˜ΈμΆœμ„ λž˜ν•‘ν•˜λŠ” μ‰˜ μŠ€ν¬λ¦½νŠΈκ°€ μžˆμŠ΅λ‹ˆλ‹€.

...
docker-compose $DOCKER_COMPOSE_FILES up $@
...

DOCKER_COMPOSE_FILESλŠ” "-f file1.yml -f file2.yml ..."이 μžˆλŠ” λ¬Έμžμ—΄μž…λ‹ˆλ‹€. λͺ¨λ‘ 잘 μž‘λ™ν•©λ‹ˆλ‹€.

λ‚΄ docker-compose 이미지 ν•­λͺ©μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

...
image: "...-service:${DOCKER_TAG}"
...

μ—¬λŸ¬ 가지 방법을 μ‹œλ„ν–ˆμŠ΅λ‹ˆλ‹€.

  • μ‰˜ 슀크립트 λ‚΄μ—μ„œ DOCKER_TAGκ°€ μžˆλŠ” 파일 μ†Œμ‹±
  • μ‰˜ μŠ€ν¬λ¦½νŠΈμ—μ„œ μˆ˜λ™μœΌλ‘œ DOCKER_TAG 내보내기
  • μ•žμ— DOCKER_TAGλ₯Ό μ‚¬μš©ν•˜μ—¬ docker-composeλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.
    DOCKER_TAG=... docker-compose...

아무 것도 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. DOCKER_TAGλ₯Ό μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λˆ„κ΅°κ°€ λ‚΄κ°€ 뭘 잘λͺ»ν•˜κ³  μžˆλŠ”μ§€ μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰