我有一个码头主持人。我也有一个通过运行run命令创建的容器..我还没有使用docker文件,因为我还没有,学习docker。
我的问题是,如果我打算在基于ubuntu映像的容器中运行应用程序,我是否应该从容器内部克隆该应用程序的git文件(当我以交互方式将其打入其中时)或应该容器以某种方式从docker主机读取文件,因此将我的文件克隆到docker主机上的目录而不是?容器应该如何运行应用程序文件以及应该克隆这些文件的位置?
答案 0 :(得分:2)
我还没有使用docker文件,因为我还没有,学习docker。
这是一个错误。 docker容器不是VM。实际上,创建一个图像并从该图像运行容器就是docker的意义所在。 Dockerfile reference是一个非常易读的介绍,底部有一些优秀,简单的例子。
话虽如此:如果这是您的代码,那么它可以存在于您构建Docker镜像的任何地方,然后在Dockerfile中使用ADD
将您的代码(或二进制文件)复制到图像中(如果您是开发您的应用程序并使用容器进行测试然后使用VOLUME
安装应用程序是常见的。
如果这只是“只是一些git repo”并且您只是想将其构建到图像中,您可以在Dockerfile中使用RUN git clone
,就像在本地使用git clone
一样(假设您的图像已经有git
,如果它不像您通常那样只使用RUN
命令来安装git
- 尽管您通常希望确保通过{ {1}}或-y
或OS包管理器所需的任何内容
'不要问我,只是这样做'标志)。
Dockerfile只是构建操作系统映像的步骤列表:如果你可以在运行该操作系统的虚拟机中执行此操作,则可以在Dockerfile中使用--noconfirm
执行此操作:如果源是git,则可以RUN
(如果它的源代码需要编译,您甚至可以在Dockerfile中运行编译权限),或者如果它以zip格式分发,您只需git clone
并安装即可。
我没有Dockerfile执行克隆的示例,但是为了向您展示您可以在Dockerfile中执行的操作,这是我的一个用操作系统包管理器安装curl
,然后下载和通过tar
和操作系统包管理器安装java
,然后下载并解压缩两个tarred档案:
curl
答案 1 :(得分:1)
您可以通过提供-v
选项来运行容器,以运行命令为
$ docker run -v <path on host> : <path inside container> <image name>
这会将容器内的路径挂载到主机上的路径
关于要克隆的app文件,浏览dockerfile很好。 ADD
选项可以解决您的问题。
答案 2 :(得分:0)
您可以在容器中安装应用程序或在构建过程中复制它(使用COPY而不是ADD,除非您有充分的理由https://labs.ctl.io/dockerfile-add-vs-copy/)。它们都是有效的方法。
答案取决于您试图从该容器中获得的内容。正在创建一个偶尔或经常做的新容器。你会在某个时间与其他人分享这个形象吗? Dockerfiles非常适合可重复的任务。每次构建它都会创建一个具有相同一致步骤的图像。我建议学习写一个Dockerfile作为你倾向的一部分。
您当然可以在容器内手动完成设置,然后提交并推送它。那样你(或其他人)可以在以后再次拉动它并从那一点继续。见https://docs.docker.com/engine/reference/commandline/commit/