Linux 如何部署Docker映像以在本地环境中进行更改?

Linux 如何部署Docker映像以在本地环境中进行更改?,linux,docker,dockerfile,Linux,Docker,Dockerfile,EDIT+2=仅供参考,我是root用户,这意味着我没有在每次执行仅授权的cmd时键入superuser do(sudo) 好吧,在对Docker进行了24小时的调查之后,如果我把事实弄清楚了,我会有点不高兴 简要回顾一下,docker是一种为特定的web服务、运行环境、虚拟机编写代码或配置文件更改的方法,所有这些都来自linux终端/文本文件的舒适范围。毫无疑问,这是一个惊人的特性:在一台计算机上编写的代码或构建可以在无限多台其他计算机上运行,这确实是一个突破。我很恼火的是,关于什么是容器,什

EDIT+2=仅供参考,我是root用户,这意味着我没有在每次执行仅授权的cmd时键入superuser do(sudo)

好吧,在对Docker进行了24小时的调查之后,如果我把事实弄清楚了,我会有点不高兴

简要回顾一下,docker是一种为特定的web服务、运行环境、虚拟机编写代码或配置文件更改的方法,所有这些都来自linux终端/文本文件的舒适范围。毫无疑问,这是一个惊人的特性:在一台计算机上编写的代码或构建可以在无限多台其他计算机上运行,这确实是一个突破。我很恼火的是,关于什么是容器,什么是图像,这个术语是错误的(图像是代码层的保存点,这些代码层由dockers服务器生成,或者可以从需要基本图像的容器中创建。DockerFile是一种通过运行所有所需层并将其滚动到一个图像中来自动生成图像的方法,以便轻松访问)

docker的关键在于“确保它可以部署在各种不同的操作系统上,并使用各自的命令”。但这些命令实际上并没有像本地环境那样传递。在使用centos的dockerbuild上运行一些测试时,基本的命令结构是

FROM centos
RUN yum search epel
RUN yum install -y epel-release.noarch
RUN echo epel installed!
因此,这在docker构建中起作用,并说它成功地安装了它。 ubuntu也可以通过运行apt缓存而不是yum来实现这一点。但是回到centos虚拟机,它并没有声明已经安装了epel,因为在尝试运行

yum remove epel-release.noarch
它说“没有要删除的包,但是有一个名为…”。那么,如果docker能够成为多平台,为什么它不能在我们目标的本地平台/映像上实际创建这些更改呢?docker构建并运行一个特定环境下将要发生的事情的模拟,但我似乎无法实现它。如果docker能够不要更改正在使用的系统的任何本地内容,除非我遗漏了某些内容

请告诉我是否有人能解决这个难题


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

因此,我认为您可能基本上忽略了Docker背后的要点,即管理有意与本地环境隔离的容器。其思想是创建可在任何Docker主机上运行的容器化应用程序,而无需担心输出主机上安装的特定操作系统或配置

也就是说,如果你真的想这样做的话,有很多方法可以打破这种孤立

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

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

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

您可以将这些不同的选项组合在一起,以提供完成特定任务所需的对主机的尽可能多或尽可能少的访问


如果您只想在主机上安装软件包,那么容器可能是执行此任务的错误工具。

如何运行
yum remove
命令?yum remove epel-release.noarch。考虑到我是root用户,我不必添加任何其他内容……昨天我还了解到,我可以通过使用命令docker run-t-i image/bin/sh。从那里我可以从容器中进一步修改构建。虽然这很好,但我还是想看看docker应用程序如何与本地环境交互,而不是在沙箱中交互;“哇,这些docker图像确实很大。我希望有一种方法可以构建一个不需要不安全文件的图像。”“哦,嘿,docker文件可以从头开始构建,这通常是一个空图像。”该死的,我不能运行我想要的命令来处理我移动到映像中的包。我希望docker文件能够以某种方式将这些依赖关系传递回它自己的构建过程中。"我认为你应该发布一个新问题,而不是多次完全重新编写这个问题……这正是新问题的目的。其他人可能有你以前问过的相同问题,因此让他们在这里查找是有用的。抱歉,我更新了帖子。在新的问题框架内,答案无效。梅你应该发布一个新问题吗?不,这在我的书中是浪费空间。加上它仍然在做同样的事情,只是不同的用法。虽然很有趣。我问的大部分问题后来都被我回答了,我得到了表扬吗?不是真的,因为我不能很好地描述我的问题和解决方案。当涉及到一个网站时,它不是理想的用户像这样。