docker-compose的开发工作流程:运行dev-version容器

前端之家收集整理的这篇文章主要介绍了docker-compose的开发工作流程:运行dev-version容器 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个非常典型的docker-compose设置:直接来自docker hub的自定义Web容器和数据库容器.为了进行开发,我的主机目录已挂载到Web泊坞窗中,这样我每次进行较小更改时都不必重建容器.网络服务器是为ruby应用程序服务的乘客(独立).

运行它时,我正在运行数据库,正在运行我的Web服务(在端口3000上),一切正常.但是,如果我进行更改,则没有任何更改,因为需要重新启动Web服务器(乘客).我希望能够启动一个简单的轻量级开发服务器,例如Thin,以便在进行更改时手动重新启动.

我试过的

>启动新的Web容器(docker-compose run web …)不会公开新容器的任何端口.因此,我无法连接到Web服务器.
>直接使用Docker启动新的Web容器(docker运行web -p 5000:5000 image_name …).我们松开了docker-compose功能,没有手动绑定,容器不会链接数据库.
>每次重新启动docker-compose(因为它很快启动).每次我的数据库重新启动时都为空,我需要继续运行.
>使用–service-ports arg:由于端口3000已被使用而无法使用
> docker exec将我的开发服务器放在Web容器上:必须在另一个端口上运行,因此不会被公开.
> docker exec杀死了我的Web服务器:实际上它可以正常工作(重新启动),但是我不太喜欢这种解决方案.首先,由于服务器仍然是Passenger,因此我希望使用轻量级的Web服务器(较薄).其次,我发现用docker exec连接到服务器并杀死服务器不是很干净.
>更改我的Dockerfile,以通过自动重新启动的dev Web服务器替换Passenger:我喜欢Dockerfile与prod服务器,测试和dev上的相同.

您是否有一种干净便捷的方法来启动Web容器(打开端口5000),并在其上启动/重新启动dev Web服务器?

最佳答案
我使用两个docker-compose文件,一个用于开发,一个用于生产.

在开发docker-compose文件时,您可以使用命令覆盖Dockerfile中的CMD,以便您可以轻松地使用bash拥有外壳程序或使用自动重新启动服务器.

要使用自定义docker-compose文件,请执行以下操作:docker-compose -f dev.yml …

为此:

Relaunching the docker-compose each time (as it starts quickly). Each time my database is relaunched so empty,I need to keep running.

如果您使用docker-compose up –no-deps web它将不会重新启动您的数据库

猜你在找的Docker相关文章