如果我们运行具有.sh文件的dockerfile,则“docker build”和“docker run”之间的区别

时间:2016-11-27 04:17:52

标签: shell docker

这是我的 Dockerfile

# This Dockerfile describes the standard way to build 
FROM centos:latest
MAINTAINER praveen
# Run a root to allow "rpm"
USER root
WORKDIR /root/

# Get the ACE-TAO rpm from seachange repo 
COPY TAO-1.7.7-0.x86_64.rpm  /root/TAO-1.7.7-0.x86_64.rpm

# Insatall the rpm  
RUN rpm -ivh  /root/TAO-1.7.7-0.x86_64.rpm

#Start the TAO service 
#CMD /etc/init.d/tao start

COPY namingServiceConfig.sh /
RUN /namingServiceConfig.sh

EXPOSE 13021
EXPOSE 13022
EXPOSE 13023
ENV NS_PORTS=13021,13022,13023

#ENTRYPOINT /etc/init.d/tao start && bash

在做docker build时 无论是执行shell脚本还是将更改反映为部分图像,还是在使用 docker run 运行图像时,它都会反映容器级别的更改

就我而言,我怀疑它正在执行,而docker build和docker同时运行

我正在使用以下命令作为构建和通过vagrant文​​件运行的一部分

d.build_image "/vagrant/tao", args: " -t tao/basic"

 d.run "tao/basic:latest",
            args: " -t -d"\
                  " --name tao-basic"\
                  " -p 13021:13021"\
                  " -e NS_PORT=13025,13026,13027"

让我知道,需要更多信息

1 个答案:

答案 0 :(得分:3)

Dockerfile指令(例如RUN等...)在 build 时间(docker build -t something .等...)处理。只有CMDENTRYPOINT指令发生在运行时(启动容器时)。

在您的示例中,shell脚本将作为构建的一部分运行,并且发生的任何更改都将提交作为图像中的新图层。