Почему docker создает контейнеры при построении изображений? - PullRequest
4 голосов
/ 17 января 2020

Почему docker запускает контейнер для каждой команды в Dockerfile? Я понимаю, что для каждой команды создается новый слой.

Step 1/3 : FROM nginx:latest
latest: Pulling from library/nginx
8ec398bc0356: Pull complete 
dfb2a46f8c2c: Pull complete 
b65031b6a2a5: Pull complete 
Digest: sha256:8aa7f6a9585d908a63e5e418dc5d14ae7467d2e36e1ab4f0d8f9d059a3d071ce
Status: Downloaded newer image for nginx:latest
 ---> c7460dfcab50
Step 2/3 : WORKDIR /usr/share/nginx/html
 ---> Running in f8adb5dc5a47
Removing intermediate container f8adb5dc5a47
 ---> a59fb35a43c2
Step 3/3 : COPY . .
 ---> 7911d9a451d9
Successfully built 7911d9a451d9
Successfully tagged mynginx:latest

Какой смысл создавать новый контейнер и устанавливать в нем WORKDIR, если вы все равно собираетесь удалить этот контейнер?

Обратите внимание эта строка Removing intermediate container f8adb5dc5a47

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Подумайте, как бы вы создали изображение, не используя Dockerfile из существующего docker изображения. Вы должны создать контейнер из изображения, сделать некоторые вещи внутри контейнера, а затем commit контейнер, который создает новое изображение.

Это то, что делает docker build. Он создает контейнер из предыдущего слоя (FROM - предыдущий уровень для первой инструкции), выполняет текущую инструкцию внутри контейнера и фиксирует этот измененный контейнер как новый слой изображения.

0 голосов
/ 17 января 2020

Для каждой строки демон создает новый образ, и каждая инструкция выполняется независимо. Docker Демон использует промежуточные образы для ускорения процесса сборки docker. Кеш сборки указывает на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...