Docker-image-as-executable:我应该在CMD或ENTRYPOINT中执行吗?

时间:2017-12-06 08:51:49

标签: docker

我正在创建一个Docker镜像来初始化我的PostgreSQL数据库。它看起来像这样:

Pi

这很有效。每次我需要初始化我的数据库时,我都会启动容器(FROM debian:stretc RUN set -x \ && ... ommitted ... && apt-get install postgresql-client -y COPY scripts /scripts CMD cd /scripts && psql -f myscript.sql )。完成docker run --rm my-image命令后,容器会自动停止并删除(因为psql)。基本上,我有一个 Docker-image-as-executable

但是,我很困惑最后一行应该是:

--rm

CMD cd /scripts && psql -f myscript.sql

在我的情况下应该使用哪一个( Docker-image-as-excutable )?为什么呢?

2 个答案:

答案 0 :(得分:0)

如果需要将其设为“Docker-image-as-executable”,则需要使用ENTRYPOINT

  • RUN执行您在新图层中提供的命令并创建 一个新的形象。这主要用于安装新包。

  • CMD设置默认命令和/或参数,但是,我们可以覆盖 这些命令或传入并绕过默认参数 docker运行时的命令行

  • 当您想要将容器作为可执行文件运行时,使用ENTRYPOINT。

答案 1 :(得分:0)

Entrypoint和Command都会做同样的事情。唯一的主要区别在于,当您使用CMD时,您可以更好地覆盖从CLI运行的命令。

所以如果你有dockerfile:

FROM debian:stretc

RUN set -x \
     && ... ommitted ...
     && apt-get install postgresql-client -y

COPY scripts /scripts

CMD cd /scripts && psql -f myscript.sql

您可以从cli覆盖dockerfile中定义的CMD以运行其他命令:

docker run --rm my-image psql -f MYSCRIPT2.sql

这将运行cli中给出的MYSCRIPT2.sql。你无法用ENRTYPOINT做到这一点。