как docker работает, если среда ОС меняется? - PullRequest
0 голосов
/ 17 января 2020

Я очень новичок в docker. У меня есть некоторые основания для c сомнений по поводу docker. Предположим, я клонирую простой проект из GitHub. Я хочу создать docker образ этого приложения. в соответствии с моей ОС (в настоящее время я использую linux), я пишу файл docker и создаю один образ этого приложения, а из docker image я создаю контейнер docker. Теперь мой контейнер создан. Теперь предположим, что мой другой напарник хочет развернуть этот образ docker в другой системе ОС Windows / ma c. сейчас какие процедуры? значит мне нужно снова написать файл docker? или мне нужно снова вытащить приложение из github и выполнить те же действия, которые я упомянул выше? потому что в моем dockerfile я дал команды в соответствии с моей ОС, но кто-то хочет развернуть образ docker в windows / ma c.

А во-вторых, где находится файл изображения? в моей локальной системе его там не будет, я знаю. как посмотреть файлы / папки с изображением docker?

Я знаю, что это очень простой вопрос, но любая помощь очень важна. Спасибо.

Ответы [ 2 ]

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

предположим, я клонирую простой проект из 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, если вам нужна дополнительная помощь.

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

Вам не нужно ничего менять. Допустим, ваш текущий хост - Linux, на котором вы запускаете docker, и вы создали файл Docker. Теперь предположим, что вы перешли к другому P C, который работает на windows. Если docker работает на этом windows и вы хотите собрать / запустить или что-то еще, используя файл образа, то вы можете сделать это, ничего не меняя.

Для более подробного / подробного c ответа вам нужно будет опубликовать dockerfile

...