Compose: .dockerignore๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๋„์ปค ์ž‘์„ฑ ๋นŒ๋“œ?

์— ๋งŒ๋“  2015๋…„ 06์›” 26์ผ  ยท  100์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: docker/compose

์—ฌ๊ธฐ์— ์ „์ฒด ์˜ˆ์ œ ์ €์žฅ์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/devinrsmith/docker-compose-build-test

docker-compose build ์ž˜๋ชป ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”!

arebuild kinbug

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

.dockerignore๊ฐ€ docker build -t subdir ../ ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ docker-compose build ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

ํŒŒ์ผ ํ˜•์‹์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

.dockerignore subdir/ ์„ subdir ํ•ฉ๋‹ˆ๋‹ค.

.dockerignore๊ฐ€ docker build -t subdir ../ ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ docker-compose build ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

docker-compose 1.2.0์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ”๋‹๋ผ ๋„์ปค ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฌด์‹œ ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€ ๊ฑฐ๊ธฐ์— ์ด๋ฏธ์ง€ np๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ docker-compose๋Š” ํ›„ํ–‰ ์Šฌ๋ž˜์‹œ๊ฐ€ ์žˆ๋“  ์—†๋“  ๋ฌด์‹œ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

docker-py ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. https://github.com/docker/docker-py/pull/604 ์—์„œ ์ˆ˜์ • ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘

@aanand ๋Š” https://github.com/docker/docker-py/pull/604๊ฐ€ ์ค‘๋‹จ๋˜์–ด ์ด์ •ํ‘œ์—์„œ ์ œ๊ฑฐ ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

@thaJeztah ์ž‘์—…์„ ๊ณ„์†ํ•˜๊ธฐ ์œ„ํ•ด https://github.com/docker/docker-py/pull/721 ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”,

.dockerignore์— ์ด์ƒํ•œ ๋ฌธ์ œ๊ฐ€ ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค.

*.sh

!awesome/script.sh

docker ๋นŒ๋“œ๋กœ ๋ชจ๋‘ ๊ดœ์ฐฎ์ง€ ๋งŒ docker-compose๋Š” "awesome / script.sh"๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ์žˆ์Šต๋‹ˆ๊นŒ?

https://github.com/docker/docker-py/pull/721์— ์˜ํ•ด ์ˆ˜์ • ๋œ ์•Œ๋ ค์ง„ ๋ฒ„๊ทธ ์ธ @twillouer -1.5.0์˜ Compose ์ธก์—์„œ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ !

์ผ๋ถ€ ์ปดํ“จํ„ฐ์˜ ์ตœ์‹  git master์—์„œ๋„ ์—ฌ์ „ํžˆ ์†์ƒ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌ์„ฑ์ด ์ฃผ์–ด์ง„ ์ปดํ“จํ„ฐ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ปค๋„ 3.16.0 (lxc-docker ๋ฒ„์ „ 1.7.1, ๋นŒ๋“œ 786b29d)์ด์žˆ๋Š” Debian 8.2
docker-compose๋Š” git master์ด๊ณ  HEAD๋Š” dabf1e8657674014a5bc89f99edbf2fe0629bb71์ž…๋‹ˆ๋‹ค.

.dockerignore๋Š” docker ๋นŒ๋“œ (์ฆ‰์‹œ ์‹คํ–‰ ๋จ)์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ docker-compose (์—ฌ๋Ÿฌ ๋ถ„ ๋™์•ˆ ์—…๋กœ๋“œํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ํ•ญ๋ชฉ์„ ์—…๋กœ๋“œ)์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

# 2100 ์ฐธ์กฐ

๋‚˜๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. docker-compose๋Š” ".dockerignore"๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. "๋„์ปค ๋นŒ๋“œ"๊ฐ€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ : Windows 10

์–ด์ œ ์ถœ์‹œ ๋œ Docker Toolbox๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • ์œˆ๋„์šฐ 7 x64
  • Docker ๋ฒ„์ „ 1.9.0, ๋นŒ๋“œ 76d6bc9
  • Docker-Compose 1.5.0

.dockerignore ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. compose 1.5.0์—์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒ˜ํ”Œ .dockerignore ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํฌํ•จ ํ•ด์ฃผ์„ธ์š”.

๋” ์ž‘์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์•„์„œ ์ฃ„์†กํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ํ”„๋กœ์ ํŠธ์— package.json ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

{
  "dependencies": {
    "grunt-contrib-uglify": "^0.9.2"
  }
}

๊ฒŒ๋‹ค๊ฐ€์ด docker-compose.yml :

web:
  build: .

Dockerfile ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

FROM node:0.12

๋‚ด .dockerignore ์—๋Š” ํ•œ ์ค„์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค (ํ›„ํ–‰ ์Šฌ๋ž˜์‹œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์ง€์†๋จ).


์ด์ œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

> npm install
  (...snip...)
> docker build .
Sending build context to Docker daemon  5.12 kB

ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. 5KiB ๋งŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค ( node_modules ๋Š” ์ด 10MiB). docker-compose ์—์„œ Q:\sites\test :

> npm install
  (...snip...)
> docker-compose up
Building web
Traceback (most recent call last):
  File "D:\opt\python\Scripts\docker-compose-script.py", line 9, in <module>
    load_entry_point('docker-compose==1.5.0dev', 'console_scripts', 'docker-compose')()
  File "D:\opt\python\lib\site-packages\compose\cli\main.py", line 54, in main
    command.sys_dispatch()
  File "D:\opt\python\lib\site-packages\compose\cli\docopt_command.py", line 23, in sys_dispatch
    self.dispatch(sys.argv[1:], None)
  File "D:\opt\python\lib\site-packages\compose\cli\docopt_command.py", line 26, in dispatch
    self.perform_command(*self.parse(argv, global_options))
  File "D:\opt\python\lib\site-packages\compose\cli\main.py", line 170, in perform_command
    handler(project, command_options)
  File "D:\opt\python\lib\site-packages\compose\cli\main.py", line 583, in up
    detached=detached
  File "D:\opt\python\lib\site-packages\compose\project.py", line 313, in up
    detached=detached
  File "D:\opt\python\lib\site-packages\compose\service.py", line 404, in execute_convergence_plan
    container = self.create_container(do_build=do_build)
  File "D:\opt\python\lib\site-packages\compose\service.py", line 303, in create_container
    self.ensure_image_exists(do_build=do_build)
  File "D:\opt\python\lib\site-packages\compose\service.py", line 326, in ensure_image_exists
    self.build()
  File "D:\opt\python\lib\site-packages\compose\service.py", line 718, in build
    dockerfile=self.options.get('dockerfile', None),
  File "D:\opt\python\lib\site-packages\docker\api\build.py", line 48, in build
    context = utils.tar(path, exclude=exclude, dockerfile=dockerfile)
  File "D:\opt\python\lib\site-packages\docker\utils\utils.py", line 85, in tar
    t.add(os.path.join(root, path), arcname=path, recursive=False)
  File "D:\opt\python\lib\tarfile.py", line 1998, in add
    tarinfo = self.gettarinfo(name, arcname)
  File "D:\opt\python\lib\tarfile.py", line 1870, in gettarinfo
    statres = os.lstat(name)
WindowsError: [Error 3] Das System kann den angegebenen Pfad nicht finden: 'Q:\\sites\\test\\node_modules\\grunt-contrib-uglify\\node_modules\\maxmin\\node_modules\\pretty-bytes\\node_modules\\meow\\node_modules\\normalize-package-data\\node_modules\\validate-npm-package-license\\node_modules\\spdx-correct\\node_modules\\spdx-license-ids\\spdx-license-ids.json'

(์ด ์ปดํ“จํ„ฐ์—์„œ 1.5.0dev๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ตœ์ข… 1.5.0์œผ๋กœ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค).

๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Windows์—์„œ ๋„ˆ๋ฌด ๊ธด ๊ฒฝ๋กœ ๋ฐ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€๋งŒ Docker-Compose๊ฐ€ node_modules๋ฅผ tar๋ฅผ ์‹œ๋„ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ .dockerignore ๊ฐ€ ๋ฌด์‹œ๋œ๋‹ค๋Š” ํ‘œ์‹œ์ž…๋‹ˆ๋‹ค.

FWIW, Docker-compose 1.5.0dev๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Linux (Ubuntu)์—์„œ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ Windows์— ๊ฒฉ๋ฆฌ๋˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ๋•์…˜ ๋จธ์‹ ์— ์žˆ์œผ๋ฏ€๋กœ ์ตœ์†Œํ•œ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค (ํ…Œ์ŠคํŠธ ๋จธ์‹ ์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค).

๋‚˜๋Š” ๋˜ํ•œ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ :

docker-compose.yml
web
  + .dockerignore
  + Dockerfile
  + node_modules
    + ...

docker-compose.yaml

web:
  build: web
  tty: true
  ports:
    - 8081:5000

Dockerfile

FROM microsoft/aspnet

# Curl, node, npm, bower, grunt
RUN apt-get update && apt-get install -y curl
RUN curl -sL https://deb.nodesource.com/setup | bash -
RUN apt-get install -y nodejs
RUN npm install -g bower
RUN npm install -g grunt-bower-cli
RUN npm install -g grunt
RUN npm install -g grunt-cli
RUN npm install -g grunt-bower-task

# Copy the project.json file first, then do a restore.
# This ensures that as long as project.json doesn't change, it will avoid
# doing a package restore
COPY project.json /app/
COPY bower.json /app/
COPY gruntfile.js /app/
COPY package.json /app/
WORKDIR /app

RUN ["dnu", "restore"]

# Then copy the rest of the files
COPY . /app

# Expose the port that the website listens on
EXPOSE 5000
# And start the website
ENTRYPOINT ["dnx", "-p", "project.json", "web"]

.dockerignore


๊ฒฐ๊ณผ:

Pi<strong i="19">@Ricci</strong> MINGW64 /d/proj/Repro
$ docker-compose build
Building web
Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "C:\projects\compose\compose\cli\main.py", line 54, in main
  File "C:\projects\compose\compose\cli\docopt_command.py", line 23, in sys_dispatch
  File "C:\projects\compose\compose\cli\docopt_command.py", line 26, in dispatch
  File "C:\projects\compose\compose\cli\main.py", line 171, in perform_command
  File "C:\projects\compose\compose\cli\main.py", line 192, in build
  File "C:\projects\compose\compose\project.py", line 235, in build
  File "C:\projects\compose\compose\service.py", line 683, in build
  File "c:\projects\compose\venv\lib\site-packages\docker\api\build.py", line 48, in build
  File "c:\projects\compose\venv\lib\site-packages\docker\utils\utils.py", line 85, in tar
  File "c:\python27-x64\Lib\tarfile.py", line 2000, in add
  File "c:\python27-x64\Lib\tarfile.py", line 1872, in gettarinfo
WindowsError: [Error 3] The system cannot find the path specified: 'D:\\proj\\Repro\\web\\node_modules\\babel-preset-react\\node_modules\\babel-plugin-transform-react-jsx\\node_modules\\babel-helper-builder-react-jsx\\node_modules\\babel-types\\node_modules\\babel-traverse\\node_modules\\babel-code-frame\\node_modules\\js-tokens\\changelog.md'
docker-compose returned -1

+1

์•„๋ฌด๋„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” Dockerfile์—์„œ๋งŒ ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์•„์ง ์šด์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์‹คํ–‰์ค‘์ธ ๋…ธ๋“œ ๋ฒ„์ „๊ณผ ๊ด€๋ จ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด : https://github.com/npm/npm/issues/3697 .. ๋…ธ๋“œ ์—…๊ทธ๋ ˆ์ด๋“œ (๋ณด๋‹ค ๊ตฌ์ฒด์ ์œผ๋กœ npm 3+๋กœ)๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ํ•ต ์˜ต์…˜์— ๊ฐ€๊น๊ณ  .dockerignore๋Š” ์—ฌ์ „ํžˆ ์ž‘์—….

์ด๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ๋ฌด์‹œ ๋˜์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Linux ์‹œ์Šคํ…œ์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker-compose ํŒŒ์ผ์—์„œ ๋ถˆํ•„์š”ํ•œ ๋ณผ๋ฅจ ์ฐธ์กฐ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. Compose๋Š” ๋ณผ๋ฅจ์— ๋Œ€ํ•ด .gitignore๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ npm 3+ ..๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผํ–ˆ์ง€๋งŒ Windows ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ esc-rtn .dockerignore ํŒŒ์ผ์€ _build_ ๋™์•ˆ ๋ฐ๋ชฌ์œผ๋กœ ๋ณด๋‚ด์ง€ ์•Š์•„์•ผํ•˜๋Š” ํŒŒ์ผ ๋งŒ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. "์‹คํ–‰"์ค‘์— ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ ๋œ ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์œ„์น˜์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ๋ณผ๋ฅจ์œผ๋กœ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค (ํ˜ธ์ŠคํŠธ์—์žˆ๋Š” ๋ชจ๋“  ํŒŒ์ผ).

Windows์—์„œ๋„ ๋น„์Šทํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค. docker build ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ณ  docker-compose ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

README.md์— ๋ฉ”๋ชจ์™€ ํ•จ๊ป˜ GitHub์— ์ž‘์€ ์˜ˆ๋ฅผ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. https://github.com/stekershaw/docker-compose-ignore

Compsoe 1.5.2๊ฐ€ ์ถœ์‹œ ๋œ ํ›„ .dockerignore ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ์ˆ˜์ • ์‚ฌํ•ญ์ด docker-py์— ์ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Compose 1.6.0 RC2 ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์ง€๊ธˆ ์ˆ˜์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

docker-compose ๋ฒ„์ „ 1.6.0rc2๋กœ ์‹œ๋„ํ•˜๊ณ  a7636be๋ฅผ ๋นŒ๋“œํ•˜์‹ญ์‹œ์˜ค.

๋‚ด ์ €์žฅ์†Œ์— ์„ธ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์žˆ๊ณ  1.5.2 ๋‘ ๊ฐœ๊ฐ€ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ 1.6.0rc2์—์„œ๋Š” ์ œ์™ธ ๋œ ๋””๋ ‰ํ† ๋ฆฌ์— ๋””๋ ‰ํ† ๋ฆฌ์™€ ํŒŒ์ผ์ด์žˆ์„ ๋•Œ ํ•˜๋‚˜๋งŒ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

$ cat .dockerignore
files/test_dir
!files/test_dir/should_be_here_maybe

์ด ๊ฒฝ์šฐ docker build ๋ฐ docker-compose build ์‚ฌ์ด์—์„œ ๋™์ผํ•œ ๋™์ž‘์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

.dockerignore :

files/test_dir
!files/test_dir/should_be_here_maybe

docker-compose.yml :

test:
  build: .

Dockerfile :

FROM busybox
COPY . /context
CMD ["find", "/context"]
$ docker version
Client:
 Version:      1.10.0-rc1
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   677c593
 Built:        Fri Jan 15 18:17:17 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.10.0-rc1
 API version:  1.22
 Go version:   go1.5.3
 Git commit:   677c593
 Built:        Fri Jan 15 18:17:17 2016
 OS/Arch:      linux/amd64

$ docker-compose version
docker-compose version 1.6.0rc2, build 695c692
docker-py version: 1.7.0-rc3
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1j 15 Oct 2014

$ mkdir -p files/test_dir
$ touch files/test_dir/should_be_here_maybe

$ find .
.
./.dockerignore
./docker-compose.yml
./Dockerfile
./files
./files/test_dir
./files/test_dir/should_be_here_maybe

$ docker build --no-cache -t 1607-docker-build .
Sending build context to Docker daemon  5.12 kB
Step 1 : FROM busybox
 ---> 0cb40641836c
Step 2 : COPY . /context
 ---> 859e12600100
Removing intermediate container 9067b263098b
Step 3 : CMD find /context
 ---> Running in 1ddc0a573492
 ---> b1b3beacf5f2
Removing intermediate container 1ddc0a573492
Successfully built b1b3beacf5f2

$ docker run 1607-docker-build
/context
/context/docker-compose.yml
/context/Dockerfile
/context/files
/context/files/test_dir
/context/files/test_dir/should_be_here_maybe
/context/.dockerignore

$ docker-compose build --no-cache
Building test
Step 1 : FROM busybox
 ---> 0cb40641836c
Step 2 : COPY . /context
 ---> d86507051d6d
Removing intermediate container 0af2cbf69b17
Step 3 : CMD find /context
 ---> Running in 8533dae3af74
 ---> 1f736ecb2b38
Removing intermediate container 8533dae3af74
Successfully built 1f736ecb2b38

$ docker-compose run test
/context
/context/docker-compose.yml
/context/Dockerfile
/context/files
/context/files/test_dir
/context/files/test_dir/should_be_here_maybe
/context/.dockerignore

์•ˆ๋…•ํ•˜์„ธ์š” @aanand , ์‘๋‹ต ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๋‹จ๊ณ„์— ๋”ฐ๋ผ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด์ „์— ์‹คํ–‰ ํ•œ ํ…Œ์ŠคํŠธ์—๋Š” files / test_dir์— ๋˜ ๋‹ค๋ฅธ ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. files / test_dir์— ๋‹ค๋ฅธ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋ฉด docker build ์—๋Š” (์˜ˆ์ƒ๋Œ€๋กœ) ์กด์žฌํ•˜์ง€ ์•Š์ง€๋งŒ docker-compose ์—๋Š” ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ touch files/test_dir/should_not_be_here

$ docker build --no-cache -t 1607-docker-build .
Sending build context to Docker daemon  5.12 kB
Step 1 : FROM busybox
 ---> b175bcb79023
Step 2 : COPY . /context
 ---> a23d9645c21c
Removing intermediate container 8eb2bb23c4db
Step 3 : CMD find /context
 ---> Running in d9fef847acd8
 ---> e52ae84b1250
Removing intermediate container d9fef847acd8
Successfully built e52ae84b1250
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

$ docker run --rm 1607-docker-build
/context
/context/Dockerfile
/context/files
/context/files/test_dir
/context/files/test_dir/should_be_here_maybe
/context/docker-compose.yml
/context/.dockerignore

$ docker-compose build --no-cache
Building test
Step 1 : FROM busybox
 ---> b175bcb79023
Step 2 : COPY . /context
 ---> 9df0cf4bfb69
Removing intermediate container 7820f982d59e
Step 3 : CMD find /context
 ---> Running in 06e1a0b89a45
 ---> 2c922dbc66d9
Removing intermediate container 06e1a0b89a45
Successfully built 2c922dbc66d9

$ docker-compose run test
ERROR: Interactive mode is not yet supported on Windows.
Please pass the -d flag when using `docker-compose run`.

$ docker-compose run -d test
dcitest_test_run_2

$ docker logs dcitest_test_run_2
/context
/context/Dockerfile
/context/files
/context/files/test_dir
/context/files/test_dir/should_not_be_here
/context/files/test_dir/should_be_here_maybe
/context/docker-compose.yml
/context/.dockerignore

์ด๊ฒƒ์€ Windows (๋‚ด ์…ธ๋กœ git bash ์‚ฌ์šฉ)์ด๋ฉฐ Docker compose 1.5.2 ๋ฐ 1.6.0rc2, docker 1.9.1๋กœ ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

docker-compose 1.5.2 ๋ฐ docker 1.9.1๋กœ Ubuntu 14.04์—์„œ ๋™์ผํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

# cat .dockerignore
files/test_dir
!files/test_dir/should_be_here_maybe

# find .
.
./.dockerignore
./docker-compose.yml
./files
./files/test_dir
./files/test_dir/should_not_be_here
./files/test_dir/should_be_here_maybe
./Dockerfile

# docker-compose build --no-cache
Building test
Step 1 : FROM busybox
 ---> b175bcb79023
Step 2 : COPY . /context
 ---> c533a0768d5e
Removing intermediate container 0c057fe8eb82
Step 3 : CMD find /context
 ---> Running in e8a0cf1f58d8
 ---> 175777486a25
Removing intermediate container e8a0cf1f58d8
Successfully built 175777486a25

# docker-compose run test
/context
/context/docker-compose.yml
/context/.dockerignore
/context/files
/context/files/test_dir
/context/files/test_dir/should_be_here_maybe
/context/Dockerfile

์•„์ง๋„ ๋Œ€๋ถ€๋ถ„์˜ ์˜คํ›„๋ฅผ ๋‹ค๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Docker ๋ฒ„์ „ 1.10.1, ๋นŒ๋“œ 9e83765
docker-compose ๋ฒ„์ „ 1.6.0, ๋นŒ๋“œ d99cad6

#docker-compose.yml
test:
  build: ./cdn
#Dockerfile
FROM busybox
COPY ["content/","/test/"]
RUN find /test/ -maxdepth 1
#.dockerignore
**/.DS_Store
**/.git
**/.bowerrc
**/bower_components
**/node_modules
**/npm-debug.log

docker build . ์˜ˆ์ƒ๋Œ€๋กœ ์ถœ๋ ฅ

docker-compose build --no-cache test ๋ณต์‚ฌ

2992์—๋Š” 1.6.1์— ํฌํ•จ๋˜์–ด์•ผํ•˜๋Š” ์ถ”๊ฐ€ .dockerignore ์ˆ˜์ • ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @ shin-, ๋ถˆํ–‰ํžˆ๋„ Windows ์šฉ Docker Toolbox์˜ docker-compose 1.6.2์—์„œ ์—ฌ์ „ํžˆ ๋‹ค๋ฅธ ๋™์ž‘์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ docker-compose --version
docker-compose version 1.6.2, build e80fc83

$ find .
.
./.dockerignore
./docker-compose.yml
./Dockerfile
./files
./files/test_dir
./files/test_dir/should_be_here_maybe
./files/test_dir/should_not_be_here

$ cat .dockerignore
files/test_dir
!files/test_dir/should_be_here_maybe

$ docker-compose build --no-cache
Building test
Step 1 : FROM busybox
latest: Pulling from library/busybox
f810322bba2c: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:97473e34e311e6c1b3f61f2a721d038d1e5eef17d98d1353a513007cf46ca6bd
Status: Downloaded newer image for busybox:latest
 ---> 3240943c9ea3
Step 2 : COPY . /context
 ---> 85a65d7f861c
Removing intermediate container 386d3103d8ab
Step 3 : CMD find /context
 ---> Running in e5e29b5746c4
 ---> 2c2d57a899ea
Removing intermediate container e5e29b5746c4
Successfully built 2c2d57a899ea

$ docker-compose run -d test
dcitest_test_run_1

$ docker logs dcitest_test_run_1
/context
/context/Dockerfile
/context/files
/context/files/test_dir
/context/files/test_dir/should_be_here_maybe
/context/files/test_dir/should_not_be_here
/context/.dockerignore
/context/docker-compose.yml

๊ทธ๊ฒƒ์€ ๋งค์šฐ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ํ™•์‹คํžˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

$ docker-compose build --no-cache
Building web
Step 1 : FROM busybox
 ---> 3240943c9ea3
Step 2 : COPY . /context
 ---> 3619871879ad
Removing intermediate container 08432f688579
Step 3 : CMD find /context
 ---> Running in 5bbcf987c9e7
 ---> cf2bff2c1416
Removing intermediate container 5bbcf987c9e7
Successfully built cf2bff2c1416

$ docker-compose run -d web
Creating network "testdockerignore_default" with the default driver
testdockerignore_web_run_1

$ docker logs testdockerignore_web_run_1 
/context
/context/Dockerfile
/context/files
/context/files/test_dir
/context/files/test_dir/should_be_here
/context/docker-compose.yml
/context/.dockerignore

$ find .
.
./Dockerfile
./files
./files/test_dir
./files/test_dir/should_not_be_here
./files/test_dir/should_be_here
./docker-compose.yml
./.dockerignore

$ cat .dockerignore files/test_dir
!files/test_dir/should_be_here

์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์—์„œ pip show docker-py ์˜ ๊ฒฐ๊ณผ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚˜๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

 Docker build .

๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋™์ผํ•œ ๋นŒ๋“œ๋ฅผ docker-compose.yml ํŒŒ์ผ๋กœ ๋ฌถ์œผ๋ฉด ๋นŒ๋“œ๊ฐ€ ์†์ƒ๋ฉ๋‹ˆ๋‹ค. ๋‚ด .dockerignore ํŒŒ์ผ์—์„œ ๋…ธ๋“œ ๋นŒ๋“œ๋ฅผ ์œ„ํ•ด node_modules ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด docker-compose.yml์˜ ๊ด€๋ จ ์„น์…˜์ž…๋‹ˆ๋‹ค.

web:
  build: ./app
  ports:
    - "8080:8080"
  links:
    - mongodb

์ตœ์‹  ๋ฒ„์ „์˜ docker-compose๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

>docker-compose version
docker-compose version 1.6.2, build e80fc83
docker-py version: 1.7.2
CPython version: 2.7.11
OpenSSL version: OpenSSL 1.0.2d 9 Jul 2015

Windows 10, x64๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

WIndows ๊ด€๋ จ ๋ฌธ์ œ, ๊ฒฝ๋กœ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด ๊ฒฝ๋กœ ๊ตฌ๋ถ„์ž์™€ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋˜๋Š” ๊ธฐํƒ€ ์ง€์›์ด ๊ฐ€๋Šฅํ•œ์ง€ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค. ์ง€๊ธˆ์€ ๋นŒ๋“œ ์ „์— "๋ฌด์‹œ ๋œ"ํด๋”๋ฅผ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ–์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๋ฐฐ์น˜ ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ๋ณด๊ธฐ ํ‰ํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์™„์ „์„ฑ์„ ์œ„ํ•ด ์ด๊ฒƒ์€ ๋‚ด .dockerignore ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

**/node_modules

์•„ํ•˜! ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” ๊ฒƒ์€ glob ํŒจํ„ด์ž…๋‹ˆ๋‹ค. "** /"๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํŠน์ • ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ glob ํŒจํ„ด ** /์€ docker-compose๋กœ ์ œ๋Œ€๋กœ ๊ตฌ๋ฌธ ๋ถ„์„๋˜์ง€ ์•Š์ง€๋งŒ ์ผ๋ฐ˜ docker ๋นŒ๋“œ ๋ช…๋ น์—์„œ๋Š” ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ glob ํŒจํ„ด์€ ์ž‘๋™ํ•˜๊ฑฐ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@bfirsh ๋ฐ ๊ด€์‹ฌ์„ ๊ฐ€์งˆ๋งŒํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ :

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ˆ๋Œ€์ ์œผ๋กœ ๊ฐ„๋‹จํ•œ .dockerignore๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

readonly-data

.dockerignore๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉฐ (๋นŒ๋“œ ์ปจํ…์ŠคํŠธ ํด๋”์˜ ๋‘ ํด๋”๊ฐ€ ๋ฐ๋ชฌ์— ์—…๋กœ๋“œ๋˜๊ณ  _forever_ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค) Linux์— ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ 1.6.2๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์ง€๋งŒ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ฆ์ƒ์œผ๋กœ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š๋Š” ํ•œ,์ด ๋ฌธ์ œ๊ฐ€ Windows ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ ์„ ๋‹ค์‹œ ๋ฐ˜๋ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ..

+1, Linux์—์„œ๋„ ๋‚˜์—๊ฒŒ ์†์ƒ๋จ-Windows ๊ด€๋ จ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

@JonasT @nicbarker ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ ์™ธ์— .dockerignore ์ด๋ฆ„์ด ์ง€์ •๋œ ํด๋”๊ฐ€ ์—…๋กœ๋“œ๋˜๊ณ  ์žˆ๋Š”์ง€ ์–ด๋–ป๊ฒŒ ํ™•์ธํ•ฉ๋‹ˆ๊นŒ? ํƒ€๋ฅด๋ณผ์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ๋กœ์ปฌ์—์„œ ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Œ€๋กœ docker-py์— ๋””๋ฒ„๊ทธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

$ pip list | grep docker
docker-compose (1.7.0.dev0, /Users/aanand/work/docker/compose)
docker-py (1.8.0rc2, /Users/aanand/work/docker/docker-py)

$ find .
.
./.dockerignore
./docker-compose.yml
./Dockerfile
./include.txt
./livedata
./livedata/exclude.txt
./readonly-data
./readonly-data/exclude.txt

$ cat .dockerignore
livedata
readonly-data

$ cat Dockerfile
FROM busybox
COPY . /data

$ docker-compose --verbose build --no-cache
<unrelated output>
docker.utils.utils.tar: Writing tar file to <open file '<fdopen>', mode 'w+b' at 0x1090f26f0>
docker.utils.utils.tar:   Adding .dockerignore
docker.utils.utils.tar:   Adding Dockerfile
docker.utils.utils.tar:   Adding docker-compose.yml
docker.utils.utils.tar:   Adding include.txt
docker.utils.utils.tar: Done
<unrelated output>

@aanand ์‹œ์ž‘ํ•˜๊ธฐ๊นŒ์ง€ ์ •๋ง ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฉฐ Dockerfile์„ ./context๋กœ ์ด๋™ํ•˜๊ณ  ๋‹ค๋ฅธ ๋ณ€๊ฒฝ์—†์ด "build : ./context/"๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฆ‰์‹œ ์—„์ฒญ๋‚˜๊ฒŒ ๋น ๋ฆ…๋‹ˆ๋‹ค. ๋˜ํ•œ์ด ๋ฌธ์ œ๊ฐ€ ์ฒ˜์Œ ๋‚˜ํƒ€ ๋‚ฌ์„ ๋•Œ "๋„์ปค ๋นŒ๋“œ"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ๋„์ปค ๋นŒ๋“œ๋ฅผ ์‹œ๋„ํ–ˆ์œผ๋ฉฐ ๋˜ํ•œ ์ฆ‰๊ฐ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์‹ค์ œ๋กœ ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ๋‹ค๋ฅธ ํฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ๋นŒ๋“œ๋ฅผ ./context ์ด๋™ํ•˜๋ฉด ์†๋„๊ฐ€ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค.

@dnephin ๊ฑฐ๊ธฐ์— ๋‚ด๊ฐ€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ด‘๊ณ  ํ•œ "์ปจํ…์ŠคํŠธ"์ž์ฒด์™€ ์„ธ ๊ฐœ์˜ ์ž‘์€ ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‹ค๋ฅธ ํด๋”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@JonasT ํฌํ•จ ๋˜๋Š” ํฐ .git ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘ : NVM, ์ž˜๋ชป๋œ rsync'ed ๋ณต์‚ฌ>.> ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค .. ํ™•์ธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋†“์น ๋งŒํผ ์–ด๋ฆฌ์„์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ด์ „ Docker-compose ๋ฒ„์ „์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋” ์ž์„ธํžˆ ์กฐ์‚ฌํ–ˆ์ง€๋งŒ ์‹ค์ œ๋กœ ์ตœ๊ทผ์˜ Dockerpy ์—…๋ฐ์ดํŠธ๋กœ ์ˆ˜์ • ๋œ ํŠน์ • ์ธ์Šคํ„ด์Šค๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด Windows ๋ฌธ์ œ๋กœ ๋Œ์•„๊ฐ€์‹ญ๋‹ˆ๊นŒ? :)

์•ˆ๋…•ํ•˜์„ธ์š”,
๋‚˜๋Š” ๋ฆฌ๋ˆ…์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , 1.6.2๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๋„์ปค 1.10.3์„ ... ์ •ํ™•ํžˆ ๊ฐ™์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. docker๋Š” .dockerignore ํ•˜๊ณ  compose๋Š”์ด๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

@ulrichSchreiner ์žฌํ˜„ ๋‹จ๊ณ„๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”,

์—ฌ๊ธฐ์— ์š”์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค (https://gist.github.com/ulrichSchreiner/566815cea26ce55b95207e7795cf6962). .dockerignore ์—๋Š” **/node_modules ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Dockerfile์€ t1/a/b/c/node_modules ํ•˜์œ„ ํด๋”์— ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

"docker build ..."๋กœ ๋นŒ๋“œํ•˜๋ฉด ์ถ”๊ฐ€ ํ•  ํŒŒ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค ( .dockerignore ์˜ ํŒจํ„ด ๋•Œ๋ฌธ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฌด์‹œ ๋จ). ์š”์ ์˜ ๋งˆ์ง€๋ง‰ ํŒŒ์ผ์—์„œ ์ถœ๋ ฅ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ฃผ์–ด์ง„ "docker-compose.yml"๋กœ ๋นŒ๋“œํ•˜๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค-> docker-compose๋Š” .dockerignore ํŒŒ์ผ์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

node_modules ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ˆ˜๋ฐฑ ๋ฉ”๊ฐ€

๋‚˜๋Š” ์‚ฌ์šฉํ•œ๋‹ค

docker-compose version 1.6.2, build 4d72027

์ข‹์•„, ๋‚˜๋Š” ์ด๊ฒƒ์„ ์žฌํ˜„ ํ•  ์ˆ˜์žˆ๋‹ค. docker-py๊ฐ€ **/ ๊ทœ์น™์— ๋ฒ„๊ทธ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

IIRC, ** ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ์ง€์› ๋ถ€์กฑ์€ .dockerignore ๊ตฌํ˜„์˜ ์•Œ๋ ค์ง„ ์ œํ•œ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. https://github.com/docker/docker-py/pull/721#issuecomment -135065043 ์ฐธ์กฐ

์—ฌ๊ธฐ์—๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. .dockerignore ๋Š” docker-compose์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
docker-compose version 1.6.2, build 4d72027 OSX

./.dockerignore
./Dockerfile (symlink to ./server/docker/cms/Dockerfile)
./server/docker/docker-compose.yml

.dockerignore์˜ ๋‚ด์šฉ

./.git
./.vagrant

.vagrant๋Š” 16GB์ด๋ฏ€๋กœ ์ด๊ฒƒ์€ ์šฐ๋ฆฌ์—๊ฒŒ "ํฐ ๊ฑฐ๋ž˜ (tm)"์ž…๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค,

docker-machine version 0.7.0, build a650a40

docker-compose version 1.7.0, build 0d7bf73
docker-py version: 1.8.0
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1j 15 Oct 2014

Client:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   5604cbe
 Built:        Tue Apr 26 23:44:17 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   5604cbe
 Built:        Wed Apr 27 00:34:20 2016
 OS/Arch:      linux/amd64

@lattwood ๋ฒ„๊ทธ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค //github.com/docker/docker-py/pull/1065 ์—์„œ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค . ์ง€๊ธˆ์€ ํŒจํ„ด์—์„œ ์„ ํ–‰ ./ ๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ!

Ubuntu 14.04์—์„œ ์‹คํ–‰๋˜๋Š” ๋‚ด dockerignore๋Š” ๋‹จ์ˆœํžˆ **/always_restart.txt ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜ docker build (v1.11.2)์—์„œ๋Š” ์ปจํ…Œ์ด๋„ˆ์— ํŒŒ์ผ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์ง€๋งŒ Compose (v1.7.1)์—์„œ๋Š” ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Edit1 : docker-py ๊ฐ€ ์ด์ค‘ ๋ณ„ํ‘œ ํ‘œ๊ธฐ๋ฒ•์„ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ https://github.com/docker/docker-py/blob/1.9 ์ค‘ ํ•˜๋‚˜๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค

Edit2 : */tmp/always_restart.txt ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋ฉด Compose์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋ฏ€๋กœ ** ํŒจํ„ด์€ ํŠน๋ณ„ํžˆ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

@ agilgur5 ๋งž์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ docker-py์˜ ์•Œ๋ ค์ง„ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด https://github.com/docker/docker-py/issues/1117 ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

DOCKERFILE์˜ ์ถ”์•…ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• :
๊ตฌ๋ฌธ ๋ถ„์„์„ ์œ„ํ•ด git-check-ignore ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ (๋”ฐ๋ผ์„œ git init ), ๋ณต์‚ฌ ํ›„ ๋ฌด์‹œํ•ด์•ผํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
COPY s (๋˜๋Š” ADD s) ๋’ค์— ์žˆ์–ด์•ผํ•˜๋Š” ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ์›ํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ์ด ๋‹ค์‹œ ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

RUN mkdir /app/
WORKDIR   /app/
# ...
# all the COPYs
# ...
RUN git init
COPY ./.dockerignore /app/
RUN mv .dockerignore .gitignore
RUN DEL_ME=$(find . -print0 | xargs -0) && echo Forcing deletion of .dockerignore files && git check-ignore --no-index $DEL_ME > tmp.txt
RUN DEL_ME=$(cat tmp.txt | xargs) && echo DELETING: $DEL_ME tmp.txt && rm -f -d -r $DEL_ME tmp.txt

.gitignore์—์„œ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด (์ด์œ ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—)

COPY ./.gitignore      /app/
COPY ./.dockerignore   /app/
RUN DEL_ME=$(find . -print0 | xargs -0) && echo gitignore && git check-ignore --no-index $DEL_ME > tmp.txt
RUN rm .gitignore && mv .dockerignore .gitignore
RUN DEL_ME=$(find . -print0 | xargs -0) && echo dockerignore && git check-ignore --no-index $DEL_ME >> tmp.txt
RUN DEL_ME=$(cat tmp.txt | xargs) && echo DELETING: DEL_ME tmp.txt && rm -f -d -r $DEL_ME tmp.txt

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฎ์–ด ์“ฐ์ง€ ์•Š์œผ๋ ค๋Š” ์ปจํ…Œ์ด๋„ˆ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋‚˜์—ดํ•˜์—ฌ docker-compose.yml ๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ์ปจํ…Œ์ด๋„ˆ์— node_modules ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ docker-compose.yml ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  my_app:
    build: ./my_app
    volumes:
      - ./my_app:/app
      # prevent the mounting above from overwriting the following
      - /app/node_modules

volumes ๊ฐ’์— ๋ฌด์—‡์„ ์ค‘๋ณต ์ˆ˜ํ–‰ .dockerignore ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ๊ฐ€๊ณ  ์šฐ๋ฆฌ๋ฅผ ์–ป์„ ์ˆ˜ ...

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋†’์€ ์ˆ˜์ค€์˜ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ "[๋ฉ”ํƒ€ ๋ฌธ์ œ] : .dockerignore ๊ทœ์น™์˜ ์ž˜๋ชป๋œ ์ฒ˜๋ฆฌ"(๋˜๋Š” "[์ถ”์  ๋ฌธ์ œ] : ์ž˜๋ชป๋œ ์ฒ˜๋ฆฌ ...")์™€ ๊ฐ™์ด ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ๋‹จ์ˆœํžˆ ์ปฌ๋ ‰์…˜์„ ์œ„ํ•ด์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋” ์ž‘๊ณ  ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ (1) Docker compose๊ฐ€ .dockerignore ํŒŒ์ผ (ํ˜„์žฌ ์ด์Šˆ ์ œ๋ชฉ์ด ๋งํ•˜๋Š” ๊ฒƒ)์„ "๋ฌด์‹œ"ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๊ทœ์น™์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  (2)์ด ๋ฌธ์ œ์—๋Š” ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹จ์ง€ ํ•˜๋‚˜์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,์ด ์ด๊ฒƒ ( ** ์ฒ˜๋ฆฌ) ๋ฐ ์ด ์ƒˆ๋กœ์šด ๋‚œ ๊ทธ๋ƒฅ ์ œ์ถœ (๋งˆ์ง€๋ง‰ ์ค„ ์šฐ์„  ์ˆœ์œ„). ๊ทธ๋ฆฌ๊ณ  ๋” ๋งŽ์€ ๊ฒƒ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ ์Šค๋ ˆ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ๊ธฐ ๋•Œ๋ฌธ์— (๊ด‘๋ฒ”์œ„ํ•œ ๋ฌธ์ œ ์˜์—ญ์„ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์—) ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š” ๊ฐœ๋ณ„ ๋ฌธ์ œ๋ฅผ ์Šค๋ ˆ๋“œ ๋‚ด์—์„œ ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ".dockerignore๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Œ"๋ฌธ์ œ์™€๋Š” ๋‹ฌ๋ฆฌ, ๋ณ„๋„๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ๋Š” ์ž˜ ์ •์˜ ๋œ ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ํ‘œํ˜„ ๋œ๋Œ€๋กœ์ด ๋ฌธ์ œ๋Š” Python ๊ตฌํ˜„์ด ์ฐธ์กฐ ๊ตฌํ˜„๊ณผ ํŒจ๋ฆฌํ‹ฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ๋Œ€๋กœ ๋‹ซํžˆ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” **/**/node_modules ํ–ˆ์ง€๋งŒ ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„ ๋ƒˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ์ด ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์— ๊ฐ node_modules ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ•ซํ”ฝ์Šค ์ด์ „์—๋Š” npm ์ข…์†์„ฑ์ด ์ด๋ฏธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ค์น˜ํ•  ๋•Œ "์•ก์„ธ์Šค ๊ถŒํ•œ ์˜ค๋ฅ˜"๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค (์ž‘๋™ํ•˜์ง€ ์•Š๋Š” dockerignore ํŒŒ์ผ๋กœ ๋ณต์‚ฌํ•˜์—ฌ ๋ฐœ์ƒ).

๊ฐ™์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

macOS Sierra 10.12.2
Docker ๋ฒ„์ „ 1.12.5, ๋นŒ๋“œ 7392c3b
docker-compose ๋ฒ„์ „ 1.9.0, ๋นŒ๋“œ 2585387

** ํŒจํ„ด ๋ฌธ์ œ๋Š” 1.11.2์—์„œ ์ˆ˜์ •๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
# 3931 ๋ฐ # 3886์—์„œ ๋ณ„๋„๋กœ ์ถ”์ ๋˜๋Š” ๋งˆ์ง€๋ง‰ ์ค„ ์šฐ์„  ์ˆœ์œ„๊ฐ€์žˆ๋Š” ๋ฌธ์ œ์™€ ๊ฐ™์€ ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์—…๋ฐ์ดํŠธ๋Š” ์ด๋“ค์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

docker-compose๊ฐ€ ๋‚ด .dockerignore ) ๋ฌด์‹œํ•˜๋Š”์ง€ ๋˜๋Š” ์ œ๋Œ€๋กœ ํ•ด์„ํ•˜์ง€ ๋ชปํ•˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์ž˜ ์ž‘๋™ํ•˜๋Š” docker์™€๋Š” ๋‹ฌ๋ฆฌ). ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์—ฌ๊ธฐ์— ๋„์ฐฉํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค : http://stackoverflow.com/questions/42883596/equivalent-builds-dont-behave-the-same

๋‹ค์Œ์€ ๋‚ด .dockerignore ํŒŒ์ผ์ž…๋‹ˆ๋‹ค (๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋‚ผ ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ).

$ cat .dockerignore 
*
!www
!app
!inc
*/node_modules
*/bower_components
**/*.log
**/Dockerfile
**/.gitignore

๋‚ด docker-compose build ๊ฐ€ .dockerignore ํŒŒ์ผ์„ ์™„์ „ํžˆ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
docker build ๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

$ docker-compose version                                                                                                                       
docker-compose version 1.14.0, build c7bdf9e
docker-py version: 2.3.0
CPython version: 2.7.13
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

๋‚ด .dockerignore ์€ (๋Š”) ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

.bundle
.git
.gitignore
test
tmp
log

์—ฌ๊ธฐ์— ํŠน๋ณ„ํ•œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค.
Ubuntu 16.04๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ๊ทธ๊ฒŒ ์ค‘์š”ํ•œ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

BTW : ๋ˆ„๊ตฐ๊ฐ€ docker-compose build ๊ฐ€ docker build ์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Dockerfile ์™€ ๊ทธ ๋ชจ๋“  ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ช…๋ฐฑํ•œ ์ฝ”๋“œ ์ค‘๋ณต์ด์žˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ (์ด ๋ฌธ์ œ๊ฐ€ ๋ณด์—ฌ ์ฃผ๋“ฏ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ)?

์ด ๋ฌธ์ œ๊ฐ€ ์ข…๊ฒฐ ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ด๋ฉฐ ์–ด๋–ป๊ฒŒ ๋‹ค์‹œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ์†์ƒ๋˜์—ˆ์œผ๋ฉฐ ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์•„. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ์‹ . ํ•ด๊ฒฐ ๋  ๊ฒƒ์ด๋‹ค ๊ธฐ์˜๋‹ค

๋‚˜๋Š” ์ œ์•ˆ ๋œ ๋ฌธ์ œ # 3931 ๋ฐ # 3886์„ ์ฝ์—ˆ์ง€๋งŒ ๋‚ด .dockerignore๊ฐ€ ํŠน๋ณ„ํ•˜์ง€ ์•Š์•„ ๋‚ด ๋ฌธ์ œ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๋งคํ•‘ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋‚˜๋ฅผ ์œ„ํ•ด ์ „ํ˜€ ์ผํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‚ด .dockerignore์— ๋ฌด์—‡์ด ์žˆ๋Š”์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ๋ฉ์ฒญ ํ•ด, ๋‚ด ์‹ค์ˆ˜ ์˜€์–ด. : dizzy_face :
์ฝ”๋“œ๋ฅผ ๋ณผ๋ฅจ์œผ๋กœ ๋งˆ์šดํŠธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์‹œํ•  ๊ฒƒ์ด ์—†๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

app:
  build: .
  container_name: my_app
  volumes:
    - .:/my_app

ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ?

version: '3.4'
services:
  ui:
    build:
      context: ./source/ui
      dockerfile: Dockerfile
      target: development
    command: bash -c "yarn dev"
    ports:
      - '9091:9091'
      - '9092:9092'
    expose:
      - '9091'
      - '9092'
    volumes:
      - ./source/ui:/app
      - node-modules:/app/node_modules

    environment:
      - PORT=9091
      - HMR_PORT=9092
      - NODE_ENV=development
      - API_HOST=api.docker:7001

volumes:
  node-modules:

in source/ui/.dockerignore:

node_modules
dist
```

๊ทธ๋Ÿฌ๋‚˜ ๋‘ ํด๋” ๋ชจ๋‘ ๊ฒฐ๊ตญ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค ...

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์ด์ „ ์ž‘์„ฑ ๋ฒ„์ „์— ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์„ ๋•Œ. docker-compose version 1.22.0-rc1, build e7de1bc3 ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” debian / ubuntu์— ํฌํ•จ ๋œ ์ž‘์„ฑ ๋ฒ„์ „์ด ๋„ˆ๋ฌด ์˜ค๋ž˜๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ ๋” ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ docker build ์ฒ˜๋Ÿผ ์—ฌ์ „ํžˆ ๋™์ผํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Mac ์šฉ Docker, ์ตœ์‹  ๋ฒ„์ „ ์‹คํ–‰ (Docker 18.03.1-ce-mac65).

๋‚ด .dockerignore :

**/package-lock.json
**/node_modules

๊ทธ๋Ÿฌ๋‚˜ ๋‘˜ ๋‹ค docker-compose๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

https://github.com/docker/docker-py/pull/2065 ๋Š” 1.22.0 RC2์— ์žˆ์œผ๋ฉฐ์ด๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Mac ์šฉ Docker ๋ฒ„์ „ 18.06.1-ce-mac73 (26764) ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ ๋ฒ„๊ทธ๊ฐ€ ์—ฌ์ „ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค.

image

๋‚˜๋Š” ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋‹ค :

docker-compose ๋ฒ„์ „ 1.22.0, ๋นŒ๋“œ f46880f
Docker ๋ฒ„์ „ 18.06.1-ce, ๋นŒ๋“œ e68fc7a

Ubuntu 16.04 Xenial ๋ฐ docker-compose ๋นŒ๋“œ์—์„œ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ .dockerignore๊ฐ€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

**/*.jpg **/*.png **/*.pyc **/*.solverstate **/*.caffemodel **/*.tgz **/.pytest_cache **/*__pycache__* **/.git **/node_modules *.egg-info .eggs *Dockerfile* build dist
์ด์ œ ์ด์ค‘ ๋ณ„ํ‘œ๋ฅผ ํ•ด์„ํ•ด์•ผํ•˜๋ฏ€๋กœ ์›์ธ์ด ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด์ œ ์ด์ค‘ ๋ณ„ํ‘œ๋ฅผ ํ•ด์„ํ•ด์•ผํ•˜๋ฏ€๋กœ ์›์ธ์ด ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ( **/.tox ).

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋‚˜๋Š” ๋‹ค๋ฅธ ๋งฅ๋ฝ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
docker-compose.yml ์€ ์•ฑ ๋ฃจํŠธ ๊ฒฝ๋กœ์— ๋ฐฐ์น˜๋˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

services:
  api:
    build:
      context: ./docker/api

๋‚ด ํŒŒ์ผ ํŠธ๋ฆฌ :

- app/
-- docker/
--- api/
---- .dockerignore <- it works!
-- docker-compose.yml
-- .dockerignore <- it does not work for contexts

์ข‹์€ ํ•˜๋ฃจ ๋˜์„ธ์š”!

@ zymtx5g79k ์ €์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ :

- .dockerignore
- docker/
-- development/
--- docker-compose.yml  

docker-compose.yml

version: '3'
services:
  web:
    build:
      context: ../../.

@rodrigobdz , ํ™•์ธํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค :
docker-compose.yml :

services:
  api:
    build:
      context: ./../../
version: '3'

.dockerignore :

/docker

ํŒŒ์ผ ๊ตฌ์กฐ :

- docker/
-- api/
--- docker-compose.yml
- .dockerignore

์—ฌ์ „ํžˆ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋กœ .git ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ์ปจํ…Œ์ด๋„ˆ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋‚ด .dockerignore๋ฅผ ๊ฒŒ์‹œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋ฌธ์ œ ์ž์ฒด๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# Custom
docker-compose.yml
docs/
livereload.js*
yarn-error.log
v8-compile-cache-0
# vim
*.swp

.git
.gitignore
README.md

@rodrigobdz ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค (docker compose ๋ฒ„์ „ 1.22.0 ์‹คํ–‰).

์‹œํ—˜ ์ค€๋น„;

mkdir repro-1607 && cd repro-1607
mkdir -p docker/development/
mkdir -p ./.git/this-is-a-git-repo
echo "this is README.md" > README.md

cat > docker/development/docker-compose.yml -<<EOF
version: '3'
services:
  web:
    build:
      context: ../../.
EOF

cat > ./.dockerignore -<<EOF
# Custom
docker-compose.yml
docs/
livereload.js*
yarn-error.log
v8-compile-cache-0
# vim
*.swp

.git
.gitignore
README.md
EOF

cat > Dockerfile -<<EOF
FROM alpine
RUN apk add --no-cache tree
COPY . /foobar/
CMD tree -a /foobar/
EOF

docker-compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•˜์‹ญ์‹œ์˜ค.

cd docker/development/
docker-compose build --no-cache

Building web
Step 1/4 : FROM alpine
 ---> 11cd0b38bc3c
Step 2/4 : RUN apk add --no-cache tree
 ---> Running in 8767bc07dad9
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.8/community/x86_64/APKINDEX.tar.gz
(1/1) Installing tree (1.7.0-r1)
Executing busybox-1.28.4-r0.trigger
OK: 5 MiB in 14 packages
Removing intermediate container 8767bc07dad9
 ---> 3916d3b689bb
Step 3/4 : COPY . /foobar/
 ---> 76ab68d75f88
Step 4/4 : CMD tree -a /foobar/
 ---> Running in 9891624b3cab
Removing intermediate container 9891624b3cab
 ---> d22b81d149f2
Successfully built d22b81d149f2
Successfully tagged development_web:latest

์ปจํ…์ธ ๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

docker run --rm development_web:latest
/foobar/
โ”œโ”€โ”€ .dockerignore
โ”œโ”€โ”€ Dockerfile
โ””โ”€โ”€ docker
    โ””โ”€โ”€ development
        โ””โ”€โ”€ docker-compose.yml

2 directories, 3 files

์ด์ œ .dockerignore ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ณ  ๋นŒ๋“œ๋ฅผ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

mv ../../.dockerignore ../../.dockerignore.disabled
docker-compose build --no-cache

Building web
Step 1/4 : FROM alpine
....

์ฝ˜ํ…์ธ ๊ฐ€ ๋” ์ด์ƒ ๋ฌด์‹œ๋˜์ง€ ์•Š๊ณ  ์ด๋ฏธ์ง€์— ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

docker run --rm development_web:latest
/foobar/
โ”œโ”€โ”€ .dockerignore.disabled
โ”œโ”€โ”€ .git
โ”‚ย ย  โ””โ”€โ”€ this-is-a-git-repo
โ”œโ”€โ”€ Dockerfile
โ”œโ”€โ”€ README.md
โ””โ”€โ”€ docker
    โ””โ”€โ”€ development
        โ””โ”€โ”€ docker-compose.yml

4 directories, 4 files

(ํŽธ์ง‘ : ์ฒ˜์Œ์œผ๋กœ -a tree ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์œผ๋ฏ€๋กœ ์ฒซ ์‹คํ–‰์˜ ์—…๋ฐ์ดํŠธ ๋œ ์ถœ๋ ฅ)

@thaJeztah ์‹œ๊ฐ„์„๋‚ด์–ด

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” https://github.com/docker/compose/issues/2098#issue -108463351์— ์„ค๋ช… ๋œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. Dockerfile์—์„œ COPY ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๊ณ  ์ถ”๊ฐ€๋กœ ๋ณผ๋ฅจ ๊ณผ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค.

https://github.com/docker/compose/issues/2098#issuecomment -143505943์— ์„ค๋ช… ๋œ๋Œ€๋กœ .dockerignore ์˜ ์ œ์™ธ ํ•ญ๋ชฉ์ด ๋ณผ๋ฅจ์— ์ ์šฉ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

# 2098 (์ฃผ์„)์— ์„ค๋ช… ๋œ๋Œ€๋กœ .dockerignore์˜ ์ œ์™ธ๊ฐ€ ๋ณผ๋ฅจ์— ์ ์šฉ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, ํ˜ธ์ŠคํŠธ์—์„œ ๊ฒฝ๋กœ๋ฅผ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ ํ•  ๋•Œ ๋„์ปค๋Š” ๊ทธ "์ค‘๊ฐ„"์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Linux์—์„œ๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ํ˜ธ์ŠคํŠธ์—์„œ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค. Docker Desktop (Mac / Windows ์šฉ Docker)์—๋Š” ๋ฐ๋ชฌ (๋ฐ ์ปจํ…Œ์ด๋„ˆ)์ด ์‹คํ–‰๋˜๋Š” VM ๋‚ด์—์„œ ํ•ด๋‹น ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ "๋งˆ๋ฒ•"์ด ์žˆ์ง€๋งŒ ๊ทธ ์ดํ›„์—๋Š” Linux์—์„œ์™€ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

.dockerignore ๋Š” ๋นŒ๋“œ ์ค‘์— ๋งŒ ์‚ฌ์šฉ๋˜๋ฉฐ ๋นŒ๋“œ ์†๋„๋ฅผ ๋†’์ด๊ธฐ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€์—์„œ ์‚ฌ์šฉ / ์›ํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ์„ ๋ฐ๋ชฌ์œผ๋กœ ๋ณด๋‚ด์ง€ ์•Š์•„๋„๋ฉ๋‹ˆ๋‹ค.

์„ค๋ช…ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ด ์„ค๋ช…์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋” ์ด์ƒ์˜ ์˜คํ•ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์„œ์— ์žˆ์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฌธ์„œ ๋Š” .dockerignore ์ž์ฒด์˜ ๋ฒ”์œ„๋ณด๋‹ค๋Š” ํŒŒ์ผ์„ ๋ฌด์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋” ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

๋ฌธ์„œ์˜ ํ•ด๋‹น ํŽ˜์ด์ง€๋Š” Dockerfile ๋ฐ docker build ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ด€์ ์—์„œ; ๋‹ค๋ฅธ ๋ช…๋ น / ์šฉ๋„์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์  ์ผ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๊ทธ๊ฒƒ์ด ์˜คํ•ด์˜ ์ผ๋ฐ˜์ ์ธ ์›์ธ์ด๊ณ  ๋ถ„๋ช…ํžˆ ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฑฐ๊ธฐ์— ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ด ๋ถ„๋ช… ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

๋ฌธ์„œ์˜ ํ•œ ๋ฌธ์žฅ ์œผ๋กœ @thaJeztah ์™€ ์•„๋ž˜์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž ๊ฐ€ ๋งŽ์€ ์‹œ๊ฐ„์„ ์ ˆ์•ฝ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค .


ํ˜„์žฌ ๋ฌธ์„œ๋ฅผ ์˜คํ•ดํ•˜๋Š” ์‚ฌ์šฉ์ž

1607 ํ˜ธ

1607

2098 ํ˜ธ

2098

์ด ๋ฌธ์ œ๋ฅผ +1ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

Docker-copose : 1.23.2๋ฅผ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค (Homebrew์™€ PIP ์‚ฌ์ด์—์„œ ์ฐพ์„ ์ˆ˜์žˆ๋Š” ๊ฐ€์žฅ ์ตœ๊ทผ)
์šด์˜์ฒด์ œ : Mac OS 10.14.2

๋นŒ๋“œํ•˜๋Š” ๋™์•ˆ ์—ฌ์ „ํžˆ ๋‚ด .dockerfile์„ ๋ฌด์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ ๋ช…์‹œ ์ ์œผ๋กœ ๋ณต์‚ฌํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

docker-compose ํŒŒ์ผ์—์„œ ๋ถˆํ•„์š”ํ•œ ๋ณผ๋ฅจ ์ฐธ์กฐ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. Compose๋Š” ๋ณผ๋ฅจ์— ๋Œ€ํ•ด .gitignore๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. docker-compose๋Š” ๋งˆ์šดํŠธ ๋œ ๋ณผ๋ฅจ์˜ .dockerignore ํŒŒ์ผ์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

@xvrqt ๋‚ด ๊ตฌ์„ฑ ํŒŒ์ผ์ด ์ œ๋Œ€๋กœ ๋ณต์‚ฌ๋˜์ง€ ์•Š๊ณ  ์ž„์˜์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ง€๋‚œ ์ฃผ์— ๋ช‡ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋‚ด ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋Š” ๋ณต์‚ฌํ•ด์•ผํ•˜์ง€๋งŒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” .dockerignore ํŒŒ์ผ์— ์˜ํ•ด ์ฐจ๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค). ์ด๊ฒƒ์€ ๋ฏฟ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ•์กฐํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”! ์ด๊ฒƒ์˜ ์ƒํƒœ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ณผ๋ฅจ์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•œ docker-compose.yml ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ค€๋น„ํ–ˆ์ง€๋งŒ ์›๊ฒฉ git repo์—์„œ ๋นŒ๋“œ ํ•  ๋•Œ .dockerignore ์„ ์„ ํƒํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/LocoDelAssembly/docker-compose-dockerignore

๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ์˜ˆ์ƒ๋ฉ๋‹ˆ๊นŒ? ๋ฐ”๋‹๋ผ ๋„์ปค๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•œ ๋‹ค์Œ docker-compose.yml์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์™ธ์— ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ

๋ฐ”๋‹๋ผ ๋„์ปค๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•œ ๋‹ค์Œ docker-compose.yml์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์™ธ์— ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ˜„์žฌ ๋ฒ„์ „์˜ compose๋ฅผ ์‹คํ–‰์ค‘์ธ ๊ฒฝ์šฐ COMPOSE_DOCKER_CLI_BUILD=1 (๋ฐ DOCKER_BUILDKIT=1 ) ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ docker compose๊ฐ€ ๊ธฐ๋ณธ docker build ์‚ฌ์šฉํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์˜ˆ๋Š” ์—ฌ๊ธฐ์—์„œ ๋…ผ์˜๋˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฏ€๋กœ ์ƒˆ ํ‹ฐ์ผ“์„ ์—ฌ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค (์•„์ง ํ•ด๋‹น ํ‹ฐ์ผ“์ด์—†๋Š” ๊ฒฝ์šฐ).

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @thaJeztah! COMPOSE_DOCKER_CLI_BUILD=1 ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์ง€๋งŒ DOCKER_BUILDKIT=1 ๋„ ์ถ”๊ฐ€ํ•˜๋ฉด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค (๊ด€๋ จ์—†๋Š” ์ด์œ ๋กœ).

https://travis-ci.org/LocoDelAssembly/docker-compose-dockerignore/builds/658351109

ํ , ๊ฑฐ๊ธฐ์—์„œ ์‹คํ–‰๋˜๋Š” ๋„์ปค ๋ฒ„์ „์˜ ๋ฒ„๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. docker 18.06์€ ๊ฝค ์˜ค๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค (๊ทธ๋ฆฌ๊ณ  EOL). ํ•ด๋‹น ๋ฒ„์ „์˜ ๋„์ปค์—๋Š” ์•„์ง ์•ˆ์ •์ ์ด์ง€ ์•Š์€ BuildKit์˜ ์ดˆ๊ธฐ ๋ฒ„์ „์ด ์žˆ์Šต๋‹ˆ๋‹ค.

```
=> ERROR [๋‚ด๋ถ€] docker.io/library/alpine:3.9.5 0.1s์— ๋Œ€ํ•œ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋กœ๋“œ
218 => ์˜ค๋ฅ˜ [1/5] docker.io/library/alpine:3.9.5 0.0s
219 => => docker.io/library/alpine:3.9.5 0.0s ํ•ด๊ฒฐ
220 ------
221> [๋‚ด๋ถ€] docker.io/library/alpine:3.9.5์— ๋Œ€ํ•œ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋กœ๋“œ :
222 ------
223 ------
224> [1/5] FROM docker.io/library/ alpine : 3.9.5 :
225 ------
226 ํ”„๋ŸฐํŠธ ์—”๋“œ๋กœ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. dockerfile.v0 : LLB๋ฅผ ๋นŒ๋“œํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์บ์‹œ ํ‚ค๋ฅผ๋กœ๋“œํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. docker.io/library/ alpine : 3.9.5 ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ค, ํ , ๋‹น์‹ ์˜ ํŠธ๋ž˜๋น„์Šค๋„ ๋„์ปค๋ฅผ ์„ค์น˜ํ•˜๊ณ ์žˆ๋Š” ๊ฑธ ๋ด…๋‹ˆ๋‹ค. ์‚ฌ์ „ ์„ค์น˜๋œ ๋ฒ„์ „์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๊นŒ? ์„ค์น˜ ํ›„ docker info ๋ฐ docker version ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์„ค์น˜ํ•  ์˜ฌ๋ฐ”๋ฅธ (19.03.x) ๋ฒ„์ „์˜ docker๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๊นŒ?

์—ฌ๊ธฐ๋Š” https://travis-ci.org/LocoDelAssembly/docker-compose-dockerignore/builds/658435194์ž…๋‹ˆ๋‹ค.

์š”์•ฝ

์‹คํŒจํ•œ ๋‘ ๋นŒ๋“œ์˜ Docker ๋ฒ„์ „

$ docker version
Client: Docker Engine - Community
 Version:           19.03.7
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        7141c199a2
 Built:             Wed Mar  4 01:22:36 2020
 OS/Arch:           linux/amd64
 Experimental:      false
Server: Docker Engine - Community
 Engine:
  Version:          19.03.7
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       7141c199a2
  Built:            Wed Mar  4 01:21:08 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

docker info ์ถœ๋ ฅ์€ ์•ฝ๊ฐ„ ํฌ๋ฏ€๋กœ ํฌํ•จ๋˜์ง€ ์•Š์ง€๋งŒ Server Version: 19.03.7 .

๋„์ปค ์ž‘์„ฑ ๋ฒ„์ „

DOCKER_COMPOSE_VERSION = 1.26.0-rc2

$ docker-compose version
docker-compose version 1.26.0-rc1, build 07cab513
docker-py version: 4.2.0
CPython version: 3.7.6
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

(๋ณด๊ณ  ๋œ ๋ฒ„์ „์ด ์ž˜๋ชป๋จ, rc2, ๋นŒ๋“œ ํ•ด์‹œ๊ฐ€ rc2์™€ ์ผ์น˜ ํ•จ)

DOCKER_COMPOSE_VERSION = 1.25.4

$ docker-compose version
docker-compose version 1.25.4, build 8d51620a
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

19.03.8์—์„œ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

19.03.8์—์„œ ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์˜ณ์€. ๋˜ํ•œ ๋‚ด ํ…Œ์ŠคํŠธ ์ €์žฅ์†Œ๋ฅผ ์ตœ์‹  1.25 ๋ฐ 1.26 docker-compose ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ์ง€๋งŒ ๋ชจ๋‘ https://github.com/LocoDelAssembly/docker-compose-dockerignore์— ์„ค๋ช… ๋œ๋Œ€๋กœ ๊ณ„์† ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

์œ„์—์„œ ๋ถ™์—ฌ ๋„ฃ์€ ๋™์ผํ•œ ์ข…๋ฅ˜์˜ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜์žˆ๋Š” ๋นŒ๋“œ : https://travis-ci.org/github/LocoDelAssembly/docker-compose-dockerignore/builds/673393656

์—ฌ๊ธฐ์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. .dockerignore ๋Š” docker-compose ์—์„œ ์•ˆ์ •์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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