Compose: ํŠน์ • ์ƒํ™ฉ์—์„œ Dockerfile์ด ์ž˜๋ฆผ

์— ๋งŒ๋“  2019๋…„ 12์›” 31์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: docker/compose

๋ฌธ์ œ์— ๋Œ€ํ•œ ์„ค๋ช…

์ •ํ™ฉ

  1. ์ปจํ…์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ ์™ธ๋ถ€์˜ Dockerfile
  2. Dockerfile์—๋Š” ํ‚ค๋ฆด ๊ธฐํ˜ธ (๋˜๋Š” ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ธฐํƒ€ ๋น„ ๋ผํ‹ด์–ด ๊ธฐํ˜ธ)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ:

docker-compose build Dockerfile์—์„œ ํ‚ค๋ฆด ๊ธฐํ˜ธ์˜ ์–‘๋งŒํผ ์ž˜๋ฆฝ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Dockerfile์— 7 ๊ฐœ์˜ ํ‚ค๋ฆด ๊ธฐํ˜ธ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ ๋์˜ ๋งˆ์ง€๋ง‰ 7 ๊ฐœ ๊ธฐํ˜ธ๋Š” "์ž˜๋ฆผ"์ด๋ฉ๋‹ˆ๋‹ค.

์ปจํ…์ŠคํŠธ ์ •๋ณด (๋ฒ„๊ทธ ๋ณด๊ณ ์„œ ์šฉ)

docker-compose version

docker-compose version 1.25.0, build unknown
docker-py version: 4.1.0
CPython version: 3.8.1
OpenSSL version: OpenSSL 1.1.1d  10 Sep 2019

docker version

Client:
 Version:           19.03.5-ce
 API version:       1.40
 Go version:        go1.13.4
 Git commit:        633a0ea838
 Built:             Fri Nov 15 03:19:09 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          19.03.5-ce
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.4
  Git commit:       633a0ea838
  Built:            Fri Nov 15 03:17:51 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.3.2.m
  GitCommit:        d50db0a42053864a270f648048f9a8b4f24eced3.m
 runc:
  Version:          1.0.0-rc9
  GitCommit:        d736ef14f0288d6993a1845745d6756cfc9ddd5a
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

docker-compose config

see in the "steps to reproduce"

๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„

context (๋นˆ) ๋””๋ ‰ํ„ฐ๋ฆฌ, docker-compose.yml ๋ฐ Dockerfile

docker-compose.yml

version: '3.7'

services:
  test-pass:
    build:
      context: .
      dockerfile: Dockerfile
  test-fail:
    build:
      context: context
      # path relative to the context
      dockerfile: ../Dockerfile

Dockerfile

FROM alpine

# ัˆัˆัˆ ะธ ั„ั„ั„

RUN touch test

docker-compose build test-fail

๊ด€์ฐฐ ๋œ ๊ฒฐ๊ณผ

docker-compose build test-fail
Building test-fail
Step 1/2 : FROM alpine
 ---> cdf98d1859c1
Step 2/2 : RUN touc
 ---> Running in fc83cc1f2b69
/bin/sh: touc: not found
ERROR: Service 'test-fail' failed to build: The command '/bin/sh -c touc' returned a non-zero code: 127

h test\n ๋ฌธ์ž์—ด (7 ๊ฐœ ๊ธฐํ˜ธ)์ด ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

Dockerfile์ด ์ปจํ…์ŠคํŠธ ํด๋”์—์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š”์ด ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ์„œ๋น„์Šค ์ฐธ์กฐ).

์ด ๋ฌธ์ œ๋Š” docker build ์„ (๋ฅผ) ์‚ฌ์šฉํ•˜๋ฉด ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์ƒ ๊ฒฐ๊ณผ

์˜ˆ์ƒ ๊ฒฐ๊ณผ๋Š” docker build ์‚ฌ์šฉ๊ณผ ๊ฐ™์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ƒ์„ฑ ๋œ ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค.

docker build -f Dockerfile context
Sending build context to Docker daemon  1.583kB
Step 1/2 : FROM alpine
 ---> cdf98d1859c1
Step 2/2 : RUN touch test
 ---> Using cache
 ---> bb6362bff392
Successfully built bb6362bff392

Stacktrace / ์ „์ฒด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€

N/A

๋ชจ๋“  3 ๋Œ“๊ธ€

๋ช…ํ™•ํ•œ ์žฌํ˜„ ์ƒ˜ํ”Œ๊ณผ ํŒŒ๊ดด ์กฐ๊ฑด์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ์กฐ์‚ฌ๋กœ์ด ๋ฌธ์ œ๋ฅผ๋ณด๊ณ  ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฃผ์—์ด ๋ฌธ์ œ๋ฅผ ์กฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ COMPOSE_DOCKER_CLI_BUILD=true ์„ ์„ค์ •ํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ CLI ๋นŒ๋”๋ฅผ ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ์ด ๊ฐ’์ด ๊ธฐ๋ณธ๊ฐ’์ด ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค).

๋ฌธ์ œ (afaict)๋Š” https://github.com/docker/docker-py/blob/master/docker/utils/build.py#L107 -L109๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

tar ํฌ๊ธฐ๋Š” len(contents) == ๋ฌธ์ž ์ˆ˜๋กœ ๊ณ„์‚ฐ๋˜๋Š” ๋ฐ˜๋ฉด ์‹ค์ œ tar ํ•ญ๋ชฉ์€ contents.encode('utf-8') ๋กœ ์„ค์ •๋˜๋ฉฐ ์ผ๋ถ€ ๋ฌธ์ž๋Š” N> 1 ๋ฐ”์ดํŠธ๋กœ ์ธ์ฝ”๋”ฉ๋˜๋ฏ€๋กœ ์ž˜๋ฆฝ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰