如何正确重启Docker容器进行部署过程?

时间:2019-04-12 14:38:51

标签: docker deployment docker-compose

我正在创建一个脚本,该脚本将在每次推送至主服务器后用作GitHub webhook。现在,在此脚本中,我的部署看起来像这样:

cd directory/to/docker-compose
git pull
docker-compose up --build -d --force-recreate

因此,每次我精通主控时,我都会执行一个部署脚本,该脚本从GitHub中提取更改,并使用代码的更改重新启动Docker容器。

如果这是正确的方法,有人可以确认或给我一些提示吗?

1 个答案:

答案 0 :(得分:1)

您的部署过程完全不需要Git。这样做的标准方法是:

  1. 让您的CI系统运行docker build来根据每次提交构建映像。用日期戳,源控件标签,源控件更改ID或其他(或所有这些;但是是唯一的,而不是latest)标记每个图像。
  2. docker push将构建的映像存储到某个中央注册表(Docker Hub,Amazon ECR,Google GCR,一些自托管对象,...)。
  3. 更改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,则将获得零停机时间免费滚动升级系统。)