Docker的私有仓库搭建

Docker基础使用中我们推送了一个公有镜像,所有人都可以进行下载,所以并不安全,因此我们可以使用docker registry官方提供的私有仓库。

先给大家放一个docker中文文档https://yeasy.gitbooks.io/docker_practice/repository/registry.html

下载并运行registry镜像

私有仓库会被创建在容器的/var/lib/registry下,因此通过-v参数将镜像文件存储到本地的/opt/data/registry下,端口映射容器中的5000端口到宿主机的5000端口

也就是说,将docker容器内的/var/lib/registry映射到了物理机的/opt/data/registry

1
2
3
4
docker run -d \
-p 5000:5000 \
-v /opt/data/registry:/var/lib/registry \
registry

检查启动的registry镜像

1
2
3
4
root@Tony-PC:/etc/docker# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9005c0680c00 registry "/entrypoint.sh /etc…" 5 seconds ago Up 4 seconds 0.0.0.0:5000->5000/tcp musing_heyrovsky

测试连接registry容器

1
2
3
4
5
6
[c:\~]$ telnet 10.10.10.125 5000


Connecting to 10.10.10.125:5000...
Connection established.

修改要上传的镜像tag

将要上传到私有仓库中的镜像修改tag,以docker registry的地址端口开头

1
2
# 修改乌班图镜像tag
root@Tony-PC:/home/tony# docker tag ubuntu 10.10.10.125:5000/myubuntu

查看docker镜像

1
2
3
4
5
6
root@Tony-PC:/home/tony# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.10.10.125:5000/myubuntu latest a2a15febcdf3 4 weeks ago 64.2MB
ubuntu latest a2a15febcdf3 4 weeks ago 64.2MB
registry latest f32a97de94e1 6 months ago 25.8MB

修改insecure-registries

Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,这里必须写正确json数据

1
2
3
4
5
6
7
# /etc/docker/daemon.json中添加私有仓库地址insecure-registries
root@Tony-PC:/home/tony# cat /etc/docker/daemon.json
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"insecure-registries":["10.10.10.125:5000"]
}

写入到docker服务中,写入到[Service]配置块中,加载此配置文件

1
2
3
4
# 编辑该文件
root@Tony-PC:/etc/docker# vim /lib/systemd/system/docker.service
# 在[service]加载daemon文件
EnvironmentFile=/etc/docker/daemon.json

重新加载docker

1
root@Tony-PC:/etc/docker# systemctl daemon-reload

重启docker

1
root@Tony-PC:/etc/docker# systemctl restart docker

重新运行registry容器

因为重启了docker,之前运行的registry容器进程已结束,重新启动该容器

1
2
docker run --privileged=true -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
# --privileged=true docker容器的安全机制:设置特权级运行的容器

推送本地镜像

1
2
3
4
5
6
7
root@Tony-PC:/etc/docker# docker push 10.10.10.125:5000/myubuntu
The push refers to repository [10.10.10.125:5000/myubuntu]
122be11ab4a2: Pushed
7beb13bce073: Pushed
f7eae43028b3: Pushed
6cebf3abed5f: Pushed
latest: digest: sha256:ca013ac5c09f9a9f6db8370c1b759a29fe997d64d6591e9a75b71748858f7da0 size: 1152

预览私有仓库api数据列表

由于docker registry没有web节目,但是提供了API数据

curl http://10.10.10.125:5000/v2/_catalog
或者浏览器访问http://10.10.10.125:5000/v2/_catalog

浏览器显示结果如下:

下载测试镜像

先删除本地已有镜像

删除后查看当前本地所有镜像

1
2
3
4
5
6
7
root@Tony-PC:/etc/docker# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
646547989/flask-centos latest 9d07a47feca8 3 days ago 374MB
flask-contos latest 9d07a47feca8 3 days ago 374MB
contos-vim latest e90556adf335 3 days ago 369MB
centos latest 67fa590cfc1c 3 weeks ago 202MB
registry latest f32a97de94e1 6 months ago 25.8MB

下载私有仓库中的镜像

1
2
3
4
5
6
7
8
9
10
root@Tony-PC:/etc/docker# docker pull 10.10.10.125:5000/myubuntu
Using default tag: latest
latest: Pulling from myubuntu
35c102085707: Pull complete
251f5509d51d: Pull complete
8e829fe70a46: Pull complete
6001e1789921: Pull complete
Digest: sha256:ca013ac5c09f9a9f6db8370c1b759a29fe997d64d6591e9a75b71748858f7da0
Status: Downloaded newer image for 10.10.10.125:5000/myubuntu:latest
10.10.10.125:5000/myubuntu:latest

再次查看已有镜像

1
2
3
4
5
6
7
8
9
root@Tony-PC:/etc/docker# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
646547989/flask-centos latest 9d07a47feca8 3 days ago 374MB
flask-contos latest 9d07a47feca8 3 days ago 374MB
contos-vim latest e90556adf335 3 days ago 369MB
centos latest 67fa590cfc1c 3 weeks ago 202MB
10.10.10.125:5000/myubuntu latest a2a15febcdf3 4 weeks ago 64.2MB
registry latest f32a97de94e1 6 months ago 25.8MB

开发环境下,本地局域网开发人员均可下载该镜像