предположим, я клонирую простой проект из github. Я хочу создать docker образ этого приложения. в соответствии с моей ОС (в настоящее время я использую linux), я пишу файл docker и создаю один образ этого приложения, а из docker image я создаю контейнер docker. Теперь мой контейнер создан.
Просто чтобы быть уверенным, что это понятно. Вы должны рассматривать «Docker Image» как «рецепт», а «Docker Container» как «пирог». Вы можете сделать столько тортов, сколько захотите по заданному рецепту. Рецепт - это то, чем вы делитесь, если хотите иметь возможность выпекать пирожные.
Теперь предположим, что мой другой напарник хочет развернуть этот образ docker в другой системе Windows / ma c ОПЕРАЦИОННЫЕ СИСТЕМЫ. сейчас какие процедуры? значит мне нужно снова написать файл docker? или мне нужно снова вытащить приложение из github и выполнить те же действия, которые я упомянул выше?
И, таким образом, это «образ», которым вы «поделитесь» с другими разработчиками, а не контейнер. Это может быть сделано либо путем «отправки» изображения в онлайн-хранилище (например, https://hub.docker.com/), либо путем повторного создания изображения каждый раз из файла Dockerfile.
, потому что в моем dockerfile Я дал команды в соответствии с моей ОС, но кто-то хочет развернуть образ docker в windows / ma c.
Я бы хотел увидеть, что именно вы делаете, но это Хорошая практика - сделать docker изображений независимыми от хоста. Или, по крайней мере, сделать его настраиваемым во время первого создания образа или выполнения контейнера.
Чтобы привести конкретный пример, в нашей компании у нас есть частный API для отдыха, написанный на PHP. Все работает на docker, будь то в разработке или на производстве. Наши производственные образы могут быть запущены на любой ОС, однако наш образ разработчика будет несколько отличаться в зависимости от ОС. Почему? Потому что нам нужно настроить отладчик.
Если изображение построено на Linux, значение php xdebug.remote_host
должно указывать на localhost
, однако при использовании Docker For Mac
значение php должно быть docker.for.mac.localhost
.
Dockerfile выглядит примерно так:
FROM adsdaq/print-engine-fpm:7.3
ARG DOCKER_HOST_ADDR
ENV PHP_XDEBUG_REMOTE_HOST ${DOCKER_HOST_ADDR:-localhost}
COPY etc/dev/php/adsdaq.ini $PHP_INI_DIR/conf.d/
А в adsdaq.ini у нас есть
xdebug.remote_host = ${PHP_XDEBUG_REMOTE_HOST}
И чтобы упростить жизнь нашим разработчикам, у нас есть Makefile, который обрабатывает обнаружение ОС:
DOCKER_HOST ?= localhost
OPEN_BROWSER ?= open
UNAME_S := $(shell uname -s)
USERID=$(shell id -u)
GROUPID=$(shell id -g)
## Define variable depending on OS used, use xdg-open command
ifeq ($(UNAME_S),Linux)
OPEN_BROWSER = xdg-open
else ifeq ($(UNAME_S),Darwin)
ifneq (,$(wildcard /var/run/docker.sock))
DOCKER_HOST = docker.for.mac.localhost
endif
else
$(warning Your OS "$(UNAME_S)" is not supported and could not work as expected!)
endif
Как показано здесь, образ будет построен по-другому на Linux, чем на ОС Ma c для целей разработки, и это нормально, если мы не наденем Не нужно помещать эти изображения в любой менеджер репо.
Если вам нужно поделиться изображением в репозитории, то я бы позаботился о том, чтобы конфигурацию можно было динамически изменять с помощью параметров и / или, в конечном итоге, с помощью сценария точки входа .
А во-вторых, где находится файл изображения? в моей локальной системе его там не будет, я знаю. как я могу увидеть файлы / папки изображения docker?
Вы не можете видеть файлы / папки изображения docker. Чтобы увидеть, что на изображении, вам нужно запустить контейнер, поскольку он даст вам экземпляр этого! Запомните аналогию с пирогом / рецептом. Вы не сможете увидеть содержимое пирога, пока не испечете его по рецепту.
Однако вы можете увидеть все изображения, «хранящиеся» на вашем компьютере, выполнив docker images
.
Надеюсь, это поможет разобраться. Не стесняйтесь делиться своим Dockerfile, если вам нужна дополнительная помощь.