编辑+2=仅供引用,我是 root 用户,这意味着我每次执行仅授权的 cmd 时都没有键入 super 用户 do (sudo)。
好吧,在研究 Docker 大约 24 小时之后,如果我弄清了事实,我会有点沮丧。
快速回顾一下,docker 是一种为特定 Web 服务、运行环境、虚拟机编写代码或配置文件更改的方法,所有这些都来自 Linux 终端/文本文件的舒适范围。毫无疑问,这是一个令人惊叹的功能:让您在一台计算机上编写的代码或构建可以在无限数量的其他计算机上运行,这确实是一项突破。虽然我很恼火的是,关于什么是容器、什么是镜像的术语是错误的(镜像是由 docker 服务器创建的代码层的保存点,或者可以从需要基础镜像的容器创建。Dockerfile 是一种自动化构建镜像的方法,通过运行所有所需的层并将它们卷入一个镜像中,以便可以轻松访问。)。看到 docker 的问题是“确保它可以部署在各种不同的操作系统上并使用它们各自的命令”。但这些命令并没有真正传递到本地环境之类的东西。在使用 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 虚拟机,它并没有说明 epel 已安装,因为当尝试运行
命令时yum remove epel-release.noarch
它说“没有软件包要被删除,但有一个名为...的软件包”。那么,如果 docker 能够实现多平台,为什么它不能在我们目标的本地平台/镜像上实际创建这些更改呢? docker 构建运行对特定环境中将要发生的情况的模拟,但我似乎无法使其实现。如果它无法更改正在使用的系统本地的任何内容,这就会破坏 Docker 的预期目的之一,除非我遗漏了某些内容。
如果有人能解决这个困境,请告诉我。
编辑+1=好吧,所以我昨天发现我想要做的是查看和修改容器,这可以通过执行dockerlogscontainerID
或docker run -t -i img/bin/sh
来完成,这将使我进入交互式shell以在那里进行容器更改。不过,我想知道是否有办法让 docker 从容器内与本地环境进行通信。
最佳答案
所以,我认为您可能很大程度上错过了 Docker 背后的要点,即对有意与本地环境隔离的容器的管理。这个想法是,您创建可以在任何 Docker 主机上运行的容器化应用程序,而无需担心安装的特定操作系统或主机的配置。
也就是说,如果您确实想要这样做,有多种方法可以打破这种隔离。
如果您希望能够修改主机网络配置(包括接口(interface)地址、路由表、iptables 规则等),您可以使用 --net=host
(可能还有 --privileged
)启动容器。
您可以使用 -v
命令行选项将部分(或全部)主机文件系统作为容器内的卷。例如,docker run -v/:/host ...
会将主机文件系统的根公开为容器内的/host
。
通常,Docker 容器有自己的 PID 命名空间,这意味着主机上的进程在容器内不可见。您可以使用 --pid=host
在主机 PID 命名空间中运行容器。
您可以组合这些不同的选项,根据完成特定任务的需要提供对主机的尽可能多或尽可能少的访问权限。
如果您想要做的只是在主机上安装软件包,那么容器可能不是适合该工作的工具。
关于linux - 如何部署Docker镜像来对本地环境进行更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30923789/