我们可以用docker-compose.yml替换dockerfile吗?

时间:2018-10-31 13:52:57

标签: docker docker-compose command dockerfile

也许我对Docker不太了解,但我不认为制作Dockerfile 供我使用很重要。 在撰写中,除了两点之外,我几乎可以指定我需要在dockerfile中设置的所有内容:

1)我没有在docker-compose.yml中找到与COPY / ADD等效的文件,因此我正在使用目录,但它是从主机生成映像。 copy和add有什么区别?是否可以从docker-compose文件中实现它?

2)我没有找到RUN的等效项。我正在使用节点脚本,因此我需要像在dockerfile中使用RUN一样进行NPM安装。我发现的方法是在package.json文件的启动命令中设置“ npm install && node server.js”。有更好的方法吗?也许进入命令域?

我对英语不是很好,所以请不要犹豫。预先感谢您的回答。

1 个答案:

答案 0 :(得分:2)

1)Here are the official docs between COPY and ADD

  

虽然ADD和COPY在功能上相似,但通常来说,   COPY是首选。那是因为它比ADD更透明。复制   仅支持将本地文件基本复制到容器中,   而ADD具有一些功能(例如仅本地tar提取和远程   URL支持)不是立即显而易见的。因此,最好的   用于ADD的是将本地tar文件自动提取到图像中,如   添加rootfs.tar.xz /.

不能在docker-compose.yml中执行此操作,如果要将文件添加到映像,则必须使用Dockerfile。

2)docker-compose.yml同时具有入口点和命令覆盖。类似于您在运行时通过docker传递CMD的方式,您可以使用docker-compose run

docker run -itd mystuff/myimage:latest bash -c 'npm install && node server.js'

您可以使用docker-compose进行此操作,假设此处的服务名称是myservice:

docker-compose run myservice bash -c 'npm install && node server.js'


如果您的用例仅运行一个容器,作为初学者,可能很难看到docker-compose的好处。如果您要在开发堆栈中添加mongodb和nginx容器,您将开始看到docker-compose 真正在何处得到好处。当用于协调需要运行和相互通信的多个容器时,它的效果最佳。