【发布时间】:2015-09-04 14:08:52
【问题描述】:
EDIT +2=仅供参考,我是 root 用户,这意味着我每次执行仅授权的 cmd 时都没有输入超级用户 do (sudo)。
好吧,在研究 Docker 大约 24 小时后,如果我明白了我的事实,我会有点不高兴。
简单回顾一下,docker 是一种为特定 Web 服务、运行环境、虚拟机编写代码或配置文件更改的方式,所有这些都来自 linux 终端/文本文件的舒适范围。毫无疑问,这是一个了不起的功能:让您在一台计算机上创建的代码或构建可以在无限数量的其他机器上运行,这确实是一个突破。虽然我很生气关于什么是容器和什么是图像的术语是错误的(图像是由 dockers 服务器制作的代码层的保存点,或者可以从需要基本图像的容器创建。Dockerfiles通过运行所有所需的层并将它们卷成一个图像,以便可以轻松访问它,作为一种自动化构建图像的方法。
看到 docker 的关键在于“确保它可以部署在各种不同的操作系统上并使用它们各自的命令”。但是这些命令并没有真正传达出像本地环境这样的东西。在使用 centos 的 dockerbuild 上运行一些测试时,基本的命令结构是
FROM centos
RUN yum search epel
RUN yum install -y epel-release.noarch
RUN echo epel installed!
所以这在 docker build 中有效,并说它成功安装了它。 通过运行 apt-cache 而不是 yum,ubuntu 也可以这样说。但是回到 centos 虚拟机,它并没有说明 epel 已安装,因为在尝试运行
的命令时yum remove epel-release.noarch
它说“没有要删除的包,但有一个名为...的包”。那么,如果 docker 能够成为多平台,为什么它实际上不能在我们所针对的本地平台/映像上创建这些更改? docker builds 模拟了在那个特定环境中会发生什么,但我似乎无法让它成为现实。如果它不能改变一个正在使用的系统的任何本地内容,这只会破坏我对 docker 的预期目的之一,除非我遗漏了一些东西。
如果有人有解决这个困境的办法,请告诉我。
EDIT +1=Ok 所以我昨天发现我想做的是查看和修改容器,这可以通过docker logs containerID 或docker run -t -i img /bin/sh 来完成,这将使我进入一个交互式外壳来制作容器在那里改变。不过,我想知道是否有办法让 docker 从容器内与本地环境通信。
【问题讨论】:
-
你是如何运行
yum remove命令的? -
yum 删除 epel-release.noarch。考虑到我是 root,我不应该添加任何其他内容......我昨天还了解到,我可以通过使用命令 docker run -t -i image /bin/sh 访问容器来查看容器工作。从那里我可以进一步修改容器内的构建。虽然这很棒,但我仍然想看看 docker 应用程序如何与本地环境交互,而不是在沙箱中。
-
“新”问题源于问自己这个问题; “哇,这些 docker 镜像确实很大。我希望有一种方法可以构建一个不需要不必要的文件的镜像。” “哦,嘿,dockerfile 可以从头开始构建,这实际上是一个空图像。” “该死,我无法运行我想要处理我移动到映像中的包的命令。我希望 docker 文件可以通过某种方式将这些依赖项传回到它自己的构建过程中。”
-
我认为您应该发布一个新问题,而不是多次完全重新撰写此问题。
-
...这正是新问题的用途。其他人可能有您之前问过的相同问题,因此将其留在这里让他们查找很有用。
标签: linux docker dockerfile