也许我对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”。有更好的方法吗?也许进入命令域?
我对英语不是很好,所以请不要犹豫。预先感谢您的回答。
答案 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 真正在何处得到好处。当用于协调需要运行和相互通信的多个容器时,它的效果最佳。