应用程序文件的位置 – Docker

我有一个docker主持人。 我也有一个我运行run命令创build的容器。我没有使用docker文件,因为我还没有学习docker。

我的问题是,如果我打算在基于Ubuntu映像的容器中运行应用程序,是否应该从容器中克隆该应用程序的git文件(当我以交互方式进入该应用程序时)或者应该以某种方式从docker主机读取文件,因此将文件克隆到docker主机上的一个目录中? 容器应该如何运行应用程序文件,以及这些文件应该克隆到哪里?

我还没有使用docker文件,因为我还没有学习docker。

这是个错误。 docker集装箱不是一个虚拟机。 实际上,从图像中创build一个图像并运行容器是Docker所关心的。 Dockerfile引用是一个很好的可读的介绍,底部有一些优秀的,简单的例子。

这就是说:如果这是你的代码,那么它可以生活在任何你build立你的docker图像,然后在Dockerfile中使用ADD复制你的代码(或二进制文件)到图像(如果你正在开发你的应用程序,并使用容器进行testing,然后使用VOLUME安装应用程序是很常见的)。

如果这只是“一些git回购”,你只是想将其构build到图像中,你可以使用Dockerfile中的RUN git clone ,就像你在本地使用git clone (假设你的图像已经有git了,如果它不只是使用一个RUN命令来安装git就像你通常一样 – 虽然你通常会想要确保传递-y--noconfirm或任何OS包pipe理器为'不问我,只是做“旗”)。

Dockerfile只是一个构build操作系统映像的步骤列表:如果你可以在运行该操作系统的虚拟机中完成,你可以在Dockerfile中使用RUN来完成:如果源​​代码在git中,你可以使用git clone (如果它是需要编译的源代码,甚至可以在你的Dockerfile中运行编译权限),或者如果它是以zip的forms分发的,你可以简单的curl和安装。

我没有一个Dockerfile做一个克隆的例子,但是向你展示一些你可以在Dockerfile中做什么,这里是我的一个,它用OS包pipe理器安装tar ,然后通过curl和OS下载和安装java包pipe理器,然后下载和解压缩两个tarred档案:

 FROM centos:centos6 RUN set -x && \ yum install -y tar && \ yum clean all RUN set -x && \ curl -sOL 'http://download.oracle.com/otn-pub/java/jdk/7u51-b13/jdk-7u51-linux-x64.rpm' \ -H 'Cookie: oraclelicense=accept-securebackup-cookie' && \ rpm -i jdk-7u51-linux-x64.rpm && \ rm jdk-7u51-linux-x64.rpm && \ echo 'export JAVA_HOME=/usr/java/jdk1.7.0_51/' >> ~/.bashrc ENV HBASE_VERSION 0.94.24 RUN set -x && \ curl -L http://archive.apache.org/dist/hbase/hbase-$HBASE_VERSION/hbase-$HBASE_VERSION.tar.gz | \ tar zvx --null && \ echo "export HBASE_HOME=/hbase-$HBASE_VERSION" >> ~/.bashrc ADD hbase-site.xml /hbase-$HBASE_VERSION/conf/hbase-site.xml ADD run.sh /hbase-$HBASE_VERSION/bin/LOCAL-run.sh ENV PHOENIX_VERSION 3.2.0 RUN set -x && \ curl -L http://archive.apache.org/dist/phoenix/phoenix-$PHOENIX_VERSION/bin/phoenix-$PHOENIX_VERSION-bin.tar.gz | \ tar zvx --null && \ cp /phoenix-$PHOENIX_VERSION-bin/common/phoenix-core-$PHOENIX_VERSION.jar /hbase-$HBASE_VERSION/lib/ CMD ["/hbase-0.94.24/bin/LOCAL-run.sh"] 

您可以通过提供-v选项运行命令来运行容器
$ docker run -v <path on host> : <path inside container> <image name>
这将把容器内的path安装到主机上的path上。
关于应用程序文件克隆,探索dockerfile是好的。 ADD选项将解决您的问题。

您可以从容器中安装应用程序,或者在构build过程中复制它(使用COPY不要添加,除非有充足的理由https://labs.ctl.io/dockerfile-add-vs-copy/ )。 他们都是有效的方式来做到这一点。

答案取决于你想从容器中获得什么。 创build一个新的容器,你偶尔或经常做的事情。 你会在某个时间与其他人分享这个图像吗? Dockerfiles非常适合可重复的任务。 每次构build时,都会使用相同的步骤创build一个图像。 我会build议学习写一个Dockerfile作为你学习的一部分。

你当然可以在容器中手动进行设置,然后提交并推送它。 这样,你(或其他人)可以稍后再拉它,并从那一点继续。 见https://docs.docker.com/engine/reference/commandline/commit/