hut6 / docker-cli-utils
HutSix Docker 工具集
Requires
- ext-json: *
- ext-zip: *
- symfony/console: >4.0
- symfony/dotenv: >4.0
- symfony/process: >4.0
- symfony/yaml: >4.0
Requires (Dev)
- hut6/tag-release: ^1.0
- symfony/var-dumper: >4.0
README
辅助 docker 部署的工具
先决条件
composer req --dev hut6/docker-cli-utils
composer req --dev hut6/tag-release
composer req --dev deployer/dist
您需要创建一个 deploy/deployer-hosts.yml
清单文件(参照 Deployer https://deployer.org/docs/hosts.html),并列出所有用于部署的主机。
还需要一个 VERSION
文件。版本递增可以通过 tag-release
脚本来管理。只有在将秘密推送到 1Password 脚本时才需要 VERSION
文件,因为在 1Password 中的条目标题将包括版本号。它不用于其他任何目的。
您还需要一个自定义部署者配方、Dockerbuild 文件,以及每个项目的至少一个 Docker Compose 文件。示例文件可在 https://github.com/hut6/2020-docker-prod-boilerplate 找到
构建
bin/build master # branch name
bin/build branch_name # branch name
bin/build 1.0.0 # tag
bin/build 042f86676a45 # short hash
bin/build 2ba2014b133ad9feda8fc0c5843dd8dcbf2a8c00 # long hash
将使用 git 远程来决定镜像名称;如果远程是 git@github.com:hut6/docker-cli-utils.git
,则 docker 镜像将被命名为 hut6/docker-cli-utils
。
命令参数确定要检出哪个提交,它可以是分支名称、标签或哈希值。
该参数也将用作 Docker 镜像的标签。如果构建 bin/build branch_name
,则它将标记为 hut6/docker-cli-utils:branch_name
。另一个例子是 bin/build 1.0.0
=> hut6/docker-cli-utils:1.0.0
。
构建镜像时,不使用本地文件,而使用远程;在构建镜像之前,需要将更改推送到远程。
推送
与上面相同。运行 bin/push branch_name
将 hut6/docker-cli-utils:branch_name
推送到 DockerHub。镜像需要本地存在(即需要已经构建)。
部署
对于每个主机,指定 Docker Compose 文件如下:compose_file: production.yml
bin/deploy branch_name production
第一个参数是标签(如构建和推送过程所示),第二个参数是主机,如 deploy/deployer-hosts.yml
文件所示。这将将在 production
主机上部署 hut6/docker-cli-utils:branch_name
。
镜像需要在 DockerHub 上存在。
秘密管理
您需要 1Password CLI 客户端 op
来推送/拉取。
从 https://support.1password.com/command-line/ 安装它
所需文件和目录
您需要创建一个 /secrets
目录,该目录将包含每个部署环境的一个 environment.env
文件,例如 production.env
或 staging.env
。
使用 deploy/deployer-hosts.yml
清单文件指定 1Password 中应使用哪个条目,使用 secrets_uuid
键。
向 1Password 推送
要推送从秘密目录到 1Password 的文件,请运行以下命令。
bin/secrets push production
将生产替换为正确的密钥,如您的 deploy/deployer-hosts.yml
文件所示。
您第一次运行此命令时,它会询问您需要使用哪个保险库。
您可以在更改生产秘密文件后使用相同的命令更新 1password 中的条目。
从 1Password 拉取
这将使用在 deploy/deployer-hosts.yml
中指定的 UUID 从 1password 拉取秘密文件,并将其添加到秘密目录中。
bin/secrets pull production
更新 docker 秘密
这将将从 secrets 目录中加载秘密到指定主机的 docker 守护进程中。容器可能需要重启,但此命令不会执行此操作。
bin/secrets load production