使用 gitlab 搭建 docker 私有仓库
我们知道,gitlab 可以用来管理 git 提交的源代码,此外,gitlab 还集成了 docker registry 的功能,可以用来作为一个 docker 镜像私有仓库使用。
启用 gitlab registry 功能
我们假设已安装好 gitlab,具体安装可参考 《使用 docker 安装 gitlab》。
Gitlab 默认不打开 docker registry 的功能,需要修改配置打开。
修改配置 /etc/gitlab/gitlab.rb
文件,将 registry_external_url
的值修改为 http://127.0.0.1:4567
:
1 | registry_external_url 'http://127.0.0.1:4567' |
registry_external_url
这个地址是我们使用 docker 命令进行 pull 或者 push 镜像的仓库地址。
重启 gitlab 后,可以在 gitlab 左侧面板看到 Container Registry 的菜单。
上传镜像
我们以一个常见的 flask 应用为例,说明如何向 gitlab registry 上传镜像。
Flask 应用源代码包括以下代码:
app.py
是 flask 应用的入口代码:
1 | #!/usr/bin/env python |
为了构建应用的镜像,提供 Dockerfile:
1 | FROM python:3.7-alpine |
requirements.txt
用于安装 python 包:
1 | flask |
将上述 flask 的有关源代码提交至 gitlab 的 myweb 项目。
可以看到 myweb 项目左侧菜单已包含 Container Registry 的菜单,并展示了有关该项目有关镜像的使用说明:
按照 gitlab 给出的提示,我们先登录上 gitlab 的 registry:
1 | docker login 127.0.0.1:4567 |
输入 gitlab 的用户名和密码,便可以成功登录。Gilab registry 与 gitlab 共享相同的用户权限和密码体系。
构建镜像:
1 | docker build -t 127.0.0.1:4567/study/myweb:v1.0 . |
镜像的名称格式为 registry host ip:port/group name/project name:tag。
然后执行推送镜像命令:
1 | docker push 127.0.0.1:4567/study/myweb:v1.0 |
这时可以在 gitlab Container Registry 菜单看到已经推送的镜像:
推送镜像后,我们可以在其他地方下载镜像(下面讲述),并运行:
1 | docker run -d -p 5000:5000 127.0.0.1:4567/study/myweb:v2.0 |
下载镜像
登录上 gitlab registry 后,可以使用 docker pull
下载镜像:
1 | docker pull 127.0.0.1:4567/study/myweb:v1.0 |
该命令会从我们搭建的 gitlab registry 下载镜像。
这里需要区分我们平时使用的 docker pull
命令,例如:
1 | docker pull ubuntu |
该命令等同于 docker pull docker.io/library/ubuntu
,是从 docker 官方 Docker Hub 来下载 ubuntu 镜像。
可以使用 docker images
查看下载到的镜像:
1 | docker images |
输出:
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
参考资料
- https://github.com/wenwenxiong/book/blob/master/devops/gitlab%E5%90%AF%E7%94%A8%E8%87%AA%E5%B8%A6%E7%9A%84docker-registry.md
- https://docs.docker.com/registry/introduction/
- https://docs.gitlab.com/ce/user/packages/container_registry/
- https://www.cnblogs.com/edisonchou/p/docker_registry_repository_setup_introduction.html
- https://yeasy.gitbooks.io/docker_practice/repository/registry.html
- https://dormousehole.readthedocs.io/en/latest/quickstart.html