推送镜像到 DockerHub
注册账号
在 DockerHub 官网注册账号,该账号是免费注册的。
创建个人仓库
登录 DockerHub 的官网,创建新的镜像仓库。
手动推送镜像
构建镜像
在本地使用 Dockerfile 的方式构建镜像。通过 docker build
命令构建新的镜像,-t
参数可以指定新镜像的名称,.
表示在当前目录下。
- 构建本地镜像
1 | docker build -t clay/dingtalk-webhook . |
- 查看本地镜像
1 | docker images |
- 给镜像打标签,更改标签的语法:
docker tag IMAGEID REPOSITORY:TAG
1 | # 指定版本号 |
特别注意
每次都要 Push 不带版本号的镜像,否则镜像将没有 latest
版本,导致其他人拉取镜像的时候必须要指定 tag
,这样会非常不方便。
推送镜像
1 | # 登录 DockerHub |
搜索镜像
镜像推送成功后,可以在 DockerHub 仓库中观察是否可以搜索到,若能搜索到则说明镜像推送成功。
1 | docker search dingtalk-webhook |
推送加速
推送镜像到 DockerHub 时,往往会因网络延迟而超时。这种情况下,可以配置 Docker Push 使用代理,加快镜像推送的速度。
提示
由于不可描述的原因,Docker 的 Pull 或 Push 都很慢。Docker Pull 镜像时,可以更改 /etc/docker/daemon.json
配置文件,加入国内镜像源的方式来加速。但 Docker Push 不支持这种方式,传统的 export http_proxy=xxxx
设置 HTTP 代理变量的方式对 Docker 也无效,因此需要采用下面的方式设置 HTTP 代理来解决。
1 | # 创建配置目录 |
自动推送镜像
这里将介绍如何利用 GitHub Actions 自动构建并推送 Docker 镜像到 DockerHub。
创建 GitHub 仓库
登录 GitHub 官网,首先手动创建代码仓库,然后将本地的代码 Push 到代码仓库。
配置 DockerHub 账号
由于希望通过 GitHub Actions 自动推送镜像到 DockerHub,因此必须要有 DockerHub 的认证配置,即需要在 GitHub 仓库中添加 DockerHub 登录的用户名和密码(AcessToken)。
选择 Action 工作流模板
选择 GitHub Actions 的工作流模板,这里可以任意选择一个,后续可以手动更改模板文件的内容。值得一提的是,模板文件创建成功后,默认会保存在 GitHub 仓库的 .github/workflows/
目录下。
更改 Workflow 配置文件
编辑 GitHub 仓库 .github/workflows/
目录下的 Workflow 配置文件,覆盖并添加下述内容。
提示
1 | # This workflow will build a package using Maven and then publish it to GitHub packages when a release is created |
步骤的名称 | 步骤的描述 |
---|---|
Checkout the repo | 检出仓库代码 |
Set up JDK 11 | 安装 JDK 11 |
Build with Maven | Maven 编译代码 |
Build the Docker image | 构建 Docker 镜像 |
Login to DockerHub | 登录 DockerHub |
Extract Docker metadata | 提取 Docker 的元数据 |
Build and push Docker image | 推送 Docker 镜像 |
自动推送镜像到 DockerHub
Workflow 文件配置完成之后,将所有内容更改推送至 Github 仓库。按照本例中的配置,只要 main
分支有新的 Push 事件或者 tag
有更新,就会触发 Github Actions 自动构建镜像并推送至 DockerHub。上述配置的 Extract Docker metadata
步骤,目的是更改镜像的名称,镜像的 tag
会自动抽取(规则如下表所示)。默认情况下,如果是分支的 Push 事件,那么镜像的 tag
则为分支的名称,如果是 tag
的 Push 事件,则会推送 tag
和 latest
这两个版本的镜像到 DockerHub,具体配置规则参见 这里 。
Eent | Ref | Docker Tags |
---|---|---|
pull_request | refs/pull/2/merge | pr-2 |
push | refs/heads/main | main |
push | refs/heads/releases/1 | releases-1 |
push tag | refs/tags/1.2.3 | 1.2.3 , latest |
push tag | refs/tags/2.0.8-beta.67 | 2.0.8-beta.67 , latest |
workflow_dispatch | refs/heads/main | main |
- Git 创建并推送
tag
的命令
1 | # 创建标签 |
- 当 Push 新的
tag
到 GitHub 仓库后,等待 GitHub Actions 的自动构建操作完成,最后登录 DockerHub 的官网,可以看到已经有相应的 Docker 镜像被创建。