使用 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
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'

为了构建应用的镜像,提供 Dockerfile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
EXPOSE 5000
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
COPY app.py app.py
RUN pip install -r requirements.txt
CMD ["flask", "run"]

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 官方 Docker Hub 来下载 ubuntu 镜像,也就是 docker pull docker.io/library/ubuntu

可以查看下载到的镜像:

1
docker images

输出:

1
2
3
REPOSITORY TAG IMAGE ID CREATED SIZE
127.0.0.1:4567/study/myweb v2.0 72aa3f04d649 11 hours ago 221MB
127.0.0.1:4567/study/myweb v1.0 f626f22a3fef 12 hours ago 221MB

参考资料