如何部署一个Docker镜像来改变本地环境?

How to deploy a Docker image to make changes in the local environment?

编辑 +2=仅供参考,我是 root 用户,这意味着我每次执行仅授权命令时都没有输入超级用户 do (sudo)。

好吧,经过大约 24 小时的研究 Docker 如果我弄清楚了我的事实,我有点不高兴。

快速回顾一下,docker 是一种为特定 Web 服务、运行 环境、虚拟机编写代码或更改配置文件的方法,所有这些都来自 linux terminal/text 文件。毫无疑问,这是一个了不起的功能:让您在一台计算机上编写的代码或构建在无限数量的其他计算机上运行确实是一个突破。虽然我很生气关于什么是容器和什么是图像的术语是错误的(图像是代码层的保存点,这些代码层由 dockers 服务器制作,或者可以从需要基础图像的容器创建离开。Docker文件作为一种自动构建图像的方法,通过运行将所有需要的层合并到一个图像中,以便可以轻松访问。)。

看到问题是 docker 是 "sure it can be deployed on a variety of different operating systems and use their respective commands"。但是这些命令并没有真正传递给本地环境之类的东西。 运行在使用 centos 的 dockerbuild 上进行一些测试时,基本的命令结构是

FROM centos
RUN yum search epel
RUN yum install -y epel-release.noarch
RUN echo epel installed!

所以这在 docker 构建中有效,并表示它已成功安装。 ubuntu 通过 运行 宁一个 apt-cache 而不是 yum 也可以这样说。但是回到 centos VM,它并没有说明已经安装了 epel,因为在尝试 运行

命令时
yum remove epel-release.noarch

它说 "no packages were to be removed yet there is a package named ..."。那么,如果 docker 能够成为多平台,为什么它实际上不能在我们定位的本地 platform/image 上创建这些更改? docker 构建了 运行 对特定环境中将要发生的事情的模拟,但我似乎无法让它成为现实。如果它不能更改正在使用的系统的任何本地内容,除非我遗漏了某些内容,否则这只会破坏我 docker 的预期目的之一。

如果有人能解决这个难题,请告诉我。

EDIT +1=Ok 所以我昨天发现我想做的是查看和修改容器,这可以通过 docker logs containerIDdocker run -t -i img /bin/sh 来完成,这会让我进入交互式 shell 以在那里进行容器更改。不过,我想知道是否有办法让 docker 从容器内与本地环境通信。

所以,我认为您可能在很大程度上忽略了 Docker 背后的要点,即管理有意与本地环境隔离的容器。这个想法是您创建可以在任何 Docker 主机上 运行 的容器化应用程序,而无需担心主机的特定 OS 安装或配置。

也就是说,如果您真的想这样做,有多种方法可以打破这种隔离。

如果您希望能够修改主机网络配置(包括接口地址、路由表、iptables 规则等),您可以使用 --net=host(可能还有 --privileged)启动容器.

您可以使用 -v 命令行选项将部分(或全部)主机文件系统作为容器内的卷。例如,docker run -v /:/host ... 会将主机文件系统的根公开为容器内的 /host

通常,Docker 容器有自己的 PID 命名空间,这意味着主机上的进程在容器内是不可见的。您可以 运行 使用 --pid=host.

主机 PID 命名空间中的容器

您可以结合使用这些不同的选项来提供尽可能多或尽可能少的主机访问权限,以满足您完成特定任务的需要。

如果您要做的只是在主机上安装软件包,容器可能不是适合这项工作的工具。