我是新来的docker-compose
阅读完文档后,我仍然有一些不清楚的事情浮现在我的脑海中。
到目前为止,当我使用 docker 时,我将构建保存在以下目录树中:
builds:
Service A:
Dockerfile
ServiceA.jar
Service B:
Dockerfile
ServiceB.jar
因此,当我想运行所有内容时,我使用一些 shell 脚本,直到我读到docker-compose
.
我看到有两种创建和运行服务的方法(以复制文件的方式)
- 指定
build: path/to/my/build/directory
并将其链接到volumes:
这样它就可以看到实时代码并刷新服务
- 指定
image:
(例如java:8
),然后使用volumes:
如上
我想了解的是使用的最佳实践是什么docker-compose
在我深入研究之前,我应该创建指定image
对于每项服务(并替换为FROM
在 - 的里面Dockerfile
)或者我应该指定构建文件夹和卷的路径以保持实时代码更改,以及如何volumes
使用时的工作及其用途image
tag
Thanks!
在 Docker 中,您可以简单地将服务作为容器运行,并且可以将每个服务的状态放在一个卷中。这对您来说意味着:
- 该服务作为运行时容器运行,将从映像启动。
- 该服务的二进制文件位于映像内,服务本身将数据写入卷。
- 映像可以从映像存储库中提取,也可以在目标环境上构建。
- 可以使用以下命令构建图像
docker build
或 docker-compose 构建部分。
在您的示例中,这意味着:
- 保留目录结构。
- 使用 docker-compose 构建部分根据 Dockerfile 构建图像。
- 配置 Dockerfile 以将二进制文件放入映像中。
- 只需启动整个堆栈,包括构建
docker-compose up -d
- 你的二进制文件改变了吗?只需将整个堆栈替换为
docker-compose up --build --force-recreate -d
。此命令将重建所有映像并替换容器。
为什么不将二进制文件放入卷中:
- 您将失去图像版本控制的优势。
- 如果替换二进制文件,则不能简单地回退到旧的映像版本。
- 您可以在部署新版本之前重新标记映像,并在发生错误时回退。
- 您可以标记并保存正在运行的容器以进行回退和错误调查。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)