我正在创建一个脚本,我将在每次推送后使用GitHub webhook。现在在这个脚本中我的部署看起来像这样:
cd directory/to/docker-compose
git pull
docker-compose up --build -d --force-recreate
因此,每当我推动掌握时,我应该执行一个部署脚本,从GitHub获取更改并使用代码更改重新启动Docker容器。
如果这是正确的方法,有人可以确认或给我一些提示吗?
您的部署过程根本不应涉及Git。执行此操作的标准方法是:
docker build
以从每次提交构建映像。使用日期戳,源代码控制标记,源代码控制更改ID或其他内容(或所有这些;但唯一的东西,而不是latest
)标记每个图像。docker push
构建的图像到一些中央注册表(Docker Hub,Amazon ECR,Google GCR,自托管的东西,......)。docker-compose.yml
中的图像标记并重新运行docker-compose up
。撰写将注意到图像已更改,停止旧容器,拉出更改的图像,然后开始新的图像。在最后一步中注意image:
标签支持environment variable expansion,所以你的docker-compose.yml
可以说:
version: '3'
services:
one:
image: "myorg/service-one:${SERVICE_ONE_TAG:-latest}"
如果未设置环境变量,将使用latest
,但您的CI / CD系统可以设置环境变量以获得不同的东西。
(如果转移到Kubernetes,这种方法也很重要:您通常没有对节点的直接登录访问权限,因此您无法将源代码或资产提取到主机上;您必须在每台主机上手动执行此操作;并且部署规范的更改是系统实际进行更改的关键。如果您现在采用此设置,然后转移到Kubernetes,您将免费获得零停机时间滚动升级系统。)