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