gpt4 book ai didi

linux - 如果操作系统环境发生变化,docker 如何工作?

转载 作者:太空宇宙 更新时间:2023-11-04 05:07:14 25 4
gpt4 key购买 nike

我对 Docker 很陌生。我对docker有一些非常基本的怀疑。假设我正在从 github 克隆一个简单的项目。我想创建该应用程序的 docker 镜像。根据我的操作系统(目前我使用的是linux),我正在编写一个docker文件并构建该应用程序的一个镜像,并从docker镜像创建一个docker容器。现在我的容器已创建。现在假设我的另一个队友想要将该 docker 镜像部署到 Windows/mac OS 的其他系统。现在有什么手续吗?意思是我需要重新编写docker文件吗?或者我需要再次从 github 中提取应用程序并按照我上面提到的相同步骤进行操作?因为在我的 dockerfile 中,我已经根据我的操作系统给出了命令,但是有人想在 windows/mac 中部署 docker 镜像。

其次,图像文件位于哪里?我知道在我的本地系统中它不会在那里。如何查看 docker 镜像的文件/文件夹?

我知道这是一个非常简单的问题,但仍然非常感谢任何帮助。谢谢。

最佳答案

suppose I am cloning a simple project from github. I want to create a docker image of that application. according to my OS(currently I am using linux), I am writing a docker file and building one image of that application, and from docker image I am creating a docker container. now my container is created.

只是为了确保这一点是清楚的。你必须将“Docker Image”视为“菜谱”,将“Docker Container”视为“蛋糕”。您可以根据给定的食谱制作任意数量的蛋糕。如果您想重新烘焙蛋糕,食谱就是您分享的内容。

Now suppose my another team mate wants to deploy that docker image to other system of Windows/mac OS. now what are the procedures? means do I need to write the docker file again? or I need to pull the app from github again and following the same steps that I mentioned above?

因此,您将与其他开发人员“共享”的是“镜像”,而不是容器。这可以通过将镜像“推送”到在线存储库(例如 https://hub.docker.com/ )或每次从 Dockerfile 重新创建镜像来完成。

because in my dockerfile I have given commands according to my OS, but somebody wants to deploy the docker image in windows/mac.

我必须看看你到底在做什么,但让 docker 镜像独立于主机是一个很好的做法。或者至少在首次创建镜像或执行容器期间使其可配置。

举一个具体的例子,在我们公司,我们有一个用 PHP 编写的私有(private) REST API。一切都在 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 上构建镜像的方式与在 Mac OS 上构建的方式不同,这很好,因为我们不需要将这些镜像推送到任何存储库管理器上。

如果您需要在存储库上共享图像,那么我将确保可以通过参数和/或最终使用 entrypoint script 动态更改配置。 .

And secondly, where is the image file located? in my local system it will not be there I know. how can I see the files/folders of the docker image?

您看不到 docker 镜像的文件/文件夹。要查看图像中的内容,您需要运行一个容器,因为它会给您一个实例!记住蛋糕/食谱的类比..除非使用食谱烘烤蛋糕,否则您无法看到蛋糕的内容。

但是,您可以通过执行 docker images 来查看“存储”在您的计算机上的所有镜像。

希望这有助于解决问题。如果您需要更多帮助,请随时分享您的 Dockerfile。

关于linux - 如果操作系统环境发生变化,docker 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59786047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com