【问题标题】:Development workflow for docker-compose: run a dev-version containerdocker-compose 的开发工作流程:运行 dev-version 容器
【发布时间】:2015-06-04 09:43:30
【问题描述】:

我有一个非常典型的 docker-compose 设置:一个自定义 Web 容器和一个直接来自 docker hub 的数据库容器。为了开发,我的主机目录被挂载到 web docker 中,这样我每次做一个小改动时就不必重新构建容器。 Web 服务器是一个为 ruby​​ 应用程序提供服务的乘客(独立)。

当我运行它时,我的数据库正在运行,我的 Web 服务正在运行(在端口 3000 上),一切都很好。但是,如果我进行更改,则不会发生任何变化,因为需要重新启动 Web 服务器(乘客)。我希望能够启动一个简单的轻量级开发服务器,例如thin,当我进行更改时我会手动重新启动它。

我尝试了什么:

  • 启动新的 Web 容器 (docker-compose run web ...) 不会为新容器公开任何端口。所以,我无法连接到网络服务器。
  • 直接使用 Docker 启动新的 Web 容器 (docker run web -p 5000:5000 image_name ...)。我们失去了 docker-compose 功能,容器在没有手动绑定的情况下不会链接到数据库。
  • 每次都重新启动 docker-compose(因为它启动很快)。每次我的数据库重新启动时都是空的,我需要继续运行。
  • 使用--service-ports arg:由于端口3000已被使用,因此无法使用
  • docker exec web 容器上的我的开发服务器:必须在另一个端口上运行,所以不会暴露。
  • docker exec 我的网络服务器的kill:实际上它可以工作(它重新启动),但我不太喜欢这个解决方案。首先,因为服务器仍然是Passenger,我更喜欢轻量级的Web服务器(如thin)。其次,我发现使用docker exec ... 反复杀死服务器不是很干净。
  • 更改我的Dockerfile 以将Passenger 替换为自动重新启动的开发Web 服务器:我喜欢Dockerfile 与产品服务器、测试和开发服务器上的相同。

您是否有一种干净简单的方法来启动我的 Web 容器,并打开端口 5000,我将在该容器上启动/重新启动开发 Web 服务器?

【问题讨论】:

  • 我刚刚将所有源代码移动到一个数据容器中,该容器使用 SMB 导出给开发人员。我为此编写了 Docker Shell - dockershell.io.

标签: docker docker-compose


【解决方案1】:

我使用两个 docker-compose 文件,一个用于开发,一个用于生产。

在开发 docker-compose 文件时,您可以使用 command 覆盖 Dockerfile 中的 CMD,这样您就可以轻松地使用 bash 来拥有 shell 或使用自动重新启动服务器。

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

为此:

每次都重新启动 docker-compose(因为它启动很快)。每次我的数据库重新启动时都是空的,我需要继续运行。

如果您执行docker-compose up --no-deps web,它将不会重新启动您的数据库

【讨论】:

  • 所以你是说你运行一个带有数据库的 docker compose,以及一些刚刚启动 bash 的开发服务器?你能举个例子吗?我正在寻求在没有服务器运行的情况下启动一个 mongo、一个 elasticsearch 和一个开发服务器(运行后只需 bash)
猜你喜欢
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
  • 2021-12-01
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多