Aug*_*ger 23 docker docker-compose
我很喜欢使用docker-compose.
例如.在我的服务器上,当我想通过微小的更改来更新我的应用程序时,我只需要git pull origin master && docker-compose restart,完美地工作.
但有时,我需要重建(例如,我添加了一个npm依赖,需要npm install再次运行).
在这种情况下,我这样做docker-compose build --no-cache && docker-compose restart.
我希望这会:
但实际上它似乎又重新启动了前者.
这是预期的行为吗?
如何在构建之后处理重建并启动新的重建?
也许我错过了一个特定的命令?拥有它会有意义吗?
Nan*_*nne 23
问题是,restart将重新启动您当前的容器,这不是您想要的.
举个例子,我就这样做了
docker-compose build来建立图像docker-compose down1和docker-compose up
docker-compose restart 不会在这里工作docker-compose start而不是也行不通说实话,我并不完全确定你需要先做down,但这应该很容易检查.1底线是你需要打电话up.您将看到未更改的图像的容器重新启动,但对于您将看到的已更改的图像recreating.
这种优于仅调用的优点up --build是,您可以在重新启动之前先查看构建过程.
1:来自评论; 不需要下来,你可以打电话up --build.Down有一些"向下",包括可能破坏你的(音量)数据.
den*_*nov 21
如果对docker-compose.yml配置进行了更改,则在运行此命令后将不会反映这些更改.
你应该能做到的
$docker-compose up -d --no-deps --build <service_name>
Run Code Online (Sandbox Code Playgroud)
在--no-deps不启动链接服务.
使用--build标志的up命令,随着-d标志在后台运行您的容器:
docker-compose up -d --build
Run Code Online (Sandbox Code Playgroud)
这将重建您的撰写文件中定义的所有图像,然后重新启动其图像已更改的任何容器.
-d假设您不希望在shell前台运行所有内容.这使它更像是行为restart,但并不是必需的.
不要直接管理您的应用程序环境。使用Rancher之类的部署工具。有了它,您将能够在无需停机的情况下升级您的dockerized应用程序,甚至可以降级它。
运行Rancher与运行另一个Docker容器一样容易,因为Docker Hub中提供了此工具。
尽管接受的答案应该在启动新容器作为替换之前重建容器,但对于简单的用例来说是可以的,但在新容器初始化过程中容器仍然会关闭。如果这很长,这可能是一个问题。
我成功地使用docker-compose(以及nginx反向代理)实现了滚动更新,并详细介绍了我如何在此 github 问题中构建它:https://github.com/docker/compose/issues/1786#issuecomment-579794865
希望它能有所帮助!
您可以使用 Swarm。首先通过docker swarm init命令初始化 swarm并healthcheck在 docker-compose.yml 中使用。
然后运行以下命令:
docker stack deploy -c docker-compose.yml project_name
代替
docker-compose up -d.
当 docker-compose.yml 文件更新时,只需再次运行此命令:
docker stack deploy -c docker-compose.yml project_name
Docker Swarm 将创建新版本的服务并在此之后停止旧版本。
| 归档时间: |
|
| 查看次数: |
26677 次 |
| 最近记录: |