【问题标题】:How to deploy a Docker container using a CI/CD service (Codeship)?如何使用 CI/CD 服务(Codeship)部署 Docker 容器?
【发布时间】:2019-09-11 18:58:25
【问题描述】:

我的 DevOps 之旅才刚刚开始,有些事情对我来说仍然很难理解。我目前的情况是这样的:

我有一个非常简单的 dockerized 应用程序(只有一个端点,没有状态)。我目前使用如下部署脚本将其部署到一台服务器:

#!/usr/bin/env bash

# build docker image
docker build -t my/image .

# save docker image (to tmp)
docker save -o /tmp/my-image.tar my/image

# upload docker image
scp /tmp/my-image.tar user@xxx.xxx.xxx.xxx:~/

# load docker container
ssh -t user@xxx.xxx.xxx.xxx "sudo docker load -i /tmp/my-image.tar"

# stop docker container on remote host
ssh -t user@xxx.xxx.xxx.xxx "sudo docker stop image"

# start docker container
ssh -t user@xxx.xxx.xxx.xxx "sudo docker run -d --rm -p 8081:8081 --name myimage --restart always --env-file ~/.env.prod my/image"

现在我想为服务构建一个适当的自动化 CI/CD 管道。它应该可以部署到不同的环境。我想运行自动化测试。等等。

我研究了一下,发现 Codeship (Pro) 似乎是 dockerized 应用程序的不错选择。但我似乎找不到一个很好的教程来解释我的(简单?)用例足够详细的我可以实现它。

这是我目前发现的:

  • 可以通过 SSH 在远程主机上执行部署。但是本教程只解释了如何移动文件,而不是容器。 [1]

  • 看来 Docker Swarm 是我可以使用的东西,但本教程没有解释如何将 Codeship 指向运行 docker swarm [2] 的远程主机

  • 我可以尝试推送到 (Docker) 注册表,然后在远程主机上启动 docker 以拉取映像并运行它。但不知何故,这感觉不像是最佳实践解决方案。还是我错了?

欢迎任何帮助和提示!

[1]https://documentation.codeship.com/pro/continuous-deployment/ssh-deploy/

[2]https://documentation.codeship.com/pro/continuous-deployment/docker-swarm/

【问题讨论】:

    标签: docker deployment devops docker-swarm codeship


    【解决方案1】:

    如果可以的话,运行或使用 Docker 注册表几乎总是被认为比 docker savedocker load 更可取。你可以run your own,或者使用像Docker Hub或者亚马逊的ECR或者谷歌的GCR或者......

    1. 在您的镜像名称中随处包含注册表地址,docker build -t registry.example.com/my/image:tag

    2. docker push 构建的图像而不是保存它;和

    3. 只需docker run镜像名称中包含注册地址的镜像,Docker就会为你拉取。

    (如果您正在考虑迁移到像 Kubernetes 这样的集群解决方案,这基本上是必需的。)

    让您的 CI 系统为每个构建使用唯一标签通常也是一个好主意;日期戳或源代码管理提交 ID 都是方便的选项。不要使用latest 标签或任何其他固定字符串。如果你 docker run my/image:20190911 并且服务器还没有那个构建,那么它会知道它需要拉它,但是如果你运行 ...:latest 你可能运行的代码版本与你预期的不同。 (同样,这在 Kubernetes 中几乎是必需的。)

    我认为 Docker Swarm 不适合您所描述的内容,但您可能会查看像 Chef 或 Ansible 这样的自动化工具,该工具旨在进行配置更改并在远程主机上启动服务,而不是尝试手动操作- 编写ssh 命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-03
      • 2020-06-15
      • 1970-01-01
      • 2018-08-03
      • 2023-03-16
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      相关资源
      最近更新 更多