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

我们可以用docker-compose.yml替换dockerfile吗?,docker,docker-compose,command,dockerfile,Docker,Docker Compose,Command,Dockerfile,也许我不太了解Docker,但我不认为制作Dockerfile供我使用有什么意义。 在compose中,我可以指定我需要在dockerfile中设置的几乎所有内容,除了两点: 1) 我没有找到复制/添加到docker-compose.yml中的等效项,所以我使用的是目录,但它从主机生成图像。复制和添加之间有什么区别?是否可以从docker compose文件实现它 2) 我找不到跑步的等效物。我使用的是一个节点脚本,所以我需要像在dockerfile中运行一样安装NPM。我找到的方法是在pack

也许我不太了解Docker,但我不认为制作Dockerfile供我使用有什么意义。 在compose中,我可以指定我需要在dockerfile中设置的几乎所有内容,除了两点:

1) 我没有找到复制/添加到docker-compose.yml中的等效项,所以我使用的是目录,但它从主机生成图像。复制和添加之间有什么区别?是否可以从docker compose文件实现它

2) 我找不到跑步的等效物。我使用的是一个节点脚本,所以我需要像在dockerfile中运行一样安装NPM。我找到的方法是在package.json文件的start命令中设置“npm install&&node server.js”。有更好的方法吗?也许进入指挥区

我的英语不是很好,所以请不要犹豫,要求精确。提前感谢您的回答。

1):

虽然ADD和COPY在功能上相似,但一般来说, 复印件优先。这是因为它比ADD更透明。复制 仅支持将本地文件基本复制到容器中, 而ADD有一些功能(如仅本地焦油提取和远程焦油提取) URL支持),但这并不是显而易见的。因此,最好的 用于添加的是本地tar文件自动提取到图像中,如中所示 添加rootfs.tar.xz/

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

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

docker-run-itd mystuff/myimage: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真正起作用的地方,并为您带来好处。当它用于协调需要彼此运行和通信的多个容器时,效果最佳

1):

虽然ADD和COPY在功能上相似,但一般来说, 复印件优先。这是因为它比ADD更透明。复制 仅支持将本地文件基本复制到容器中, 而ADD有一些功能(如仅本地焦油提取和远程焦油提取) URL支持),但这并不是显而易见的。因此,最好的 用于添加的是本地tar文件自动提取到图像中,如中所示 添加rootfs.tar.xz/

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

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

docker-run-itd mystuff/myimage: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真正起作用的地方,并为您带来好处。当它用于协调需要彼此运行和通信的多个容器时,效果最佳

否,Dockerfile指示Docker如何构建您的映像。Docker Compose指示Docker如何运行您的图像。Thx,所以我必须创建Docker文件才能执行复制命令?复制dockerfile和加载项dockerfile之间有什么区别?
add
在某些情况下会产生类似的副作用。如果您不知道您需要
添加
,请使用
复制
。否,Dockerfile会指示Docker如何构建您的映像。Docker Compose指示Docker如何运行您的图像。Thx,所以我必须创建Docker文件才能执行复制命令?复制dockerfile和加载项dockerfile之间有什么区别?
add
在某些情况下会产生类似的副作用。如果您不知道您需要
添加
,请使用
复制
。声音清晰!现在我更明白了。抱歉,现在还不能投票:S。我使用了两个节点容器(auth+api)和一个Mongo,所以我使用compose并很好地理解了原因。太清楚了!现在我更明白了。抱歉,现在还不能投票:S。我使用了两个节点容器(auth+api)和一个Mongo,所以我使用compose并很好地理解了原因。谢谢