Docker-我们是否需要在Dockerfile中包含RUN命令

时间:2017-12-21 07:43:27

标签: python docker

我有一个python代码并将其转换为docker image,我可以使用下面的命令:

sudo docker build -t customdocker .

这会将python代码转换为docker镜像。要转换它,我使用带有以下命令的Dockerfile:

FROM python:3

ADD my_script.py /

ADD user.conf /srv/config/conf.d/

RUN pip3 install <some-package>

CMD [ "python3", "./my_script.py" ]

在此,我们有RUN命令安装所需的包。让我们说如果我们因某种原因删除了图像并想再次构建它,那么我们是否可以跳过这个RUN步骤以节省一些时间,因为我认为这已经安装了。

同样在我的代码中,我使用的是其他目录中的文件user.conf。因此,我将其包含在DOckerfile中,并将其副本保存在当前目录中。在docker中是否有一种方法可以定义我的工作目录,以便docker镜像搜索这些目录中的文件。

由于

2 个答案:

答案 0 :(得分:1)

是的,如果要在删除后再次构建docker镜像,则无法删除dockerfile中的RUN或其他语句。

您在dockerfile中使用命令WORKDIR,但其范围将在docker镜像中,即当您从图像workdir创建容器时,将设置为WORKDIR中提到的容器

例如:

WORKDIR  /srv/config/conf.d/

此/srv/config/conf.d/将设置为workingdir,但您必须在dockerfile中使用以下内容,同时按顺序构建以在指定位置复制该文件

ADD user.conf /srv/config/conf.d/

答案 1 :(得分:1)

回答您的第一个问题:docker镜像包含与您的python环境相关的所有内容,包括您安装的软件包。删除图像后,也会从图像中删除包。因此,不能不跳过这一步。

现在回到第二个问题,您可以在启动容器时绑定一个指令:

docker run -v /directory-you-want-to-mount:/src/config/ customdocker

您还可以使用-w标志设置工作目录。

docker  run -w /path/to/dir/ -i -t  customdocker

https://docs.docker.com/v1.10/engine/reference/commandline/run/

相关问题