默认情况下,我们下载镜像的位置都是 https://hub.docker.com。
在国内,使用上面的仓库地址可能会下载得很慢,使用国内的镜像源在很大程度上会加快下载速度。
在 /etc/docker/daemon.json
文件中添加下面内容:
1
2
3
4
| $ cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
|
在企业使用时,可能不太希望自己的镜像文件暴露在公网上,这样就催生了 Docker私有镜像仓库 的产生。
搭建私有镜像仓库的方式有两种,下面介绍的是我认为更好的一种:在docker容器中搭建docker私有镜像仓库。
在docker容器中搭建私有镜像仓库
docker有私有镜像仓库的镜像,使用起来十分的方便,只需几个命令就可以搭建起一个实用的私有仓库。
1
2
3
4
5
6
7
8
9
10
11
| $ docker container run -d --name my_registry -v /home/xiaohui/.registry/:/var/lib/registry -p 5000:5000 --restart=always registry
Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
c87736221ed0: Pull complete
1cc8e0bb44df: Pull complete
54d33bcb37f5: Pull complete
e8afc091c171: Pull complete
b4541f6d3db6: Pull complete
Digest: sha256:3b00e5438ebd8835bcfa7bf5246445a6b57b9a50473e89c02ecc8e575be3ebb5
Status: Downloaded newer image for registry:latest
872e0619a6b0fe84ffc099de20982c0e8972414991ecb5e682b746b34650a071
|
- -v - 指定私有仓库的数据卷映射。
- -p - 指定容器与宿主机的端口映射。
在宿主机上上传下载镜像
上面的命令就搭建好了一个简单的私有镜像仓库。我们可以上传下载自己的镜像文件了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| $ docker image tag alfonsxh/jupyter:latest 127.0.0.1:5000/my_jupyter
$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest f32a97de94e1 5 weeks ago 25.8MB
127.0.0.1:5000/my_jupyter latest 319e7e409a6a 7 weeks ago 297MB
alfonsxh/jupyter latest 319e7e409a6a 7 weeks ago 297MB
// 上传镜像至本地仓库
$ docker push 127.0.0.1:5000/my_jupyter
The push refers to repository [127.0.0.1:5000/my_jupyter]
1370fa617ec7: Pushed
1d08f718d11c: Pushed
31f774dbb6c4: Pushed
01234f01aa77: Pushed
35e69abd31ba: Pushed
503e53e365f3: Pushed
latest: digest: sha256:0c081e0c24d3dc9dd1ff3f20c1251d2f9c2c5240ee21d5f97c2df155873742eb size: 1580
|
下载的话,只需要将镜像的来源地址指定到本地的地址就可以了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| // 从本地私有仓库下载镜像文件
$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest f32a97de94e1 5 weeks ago 25.8MB
$ docker image pull 127.0.0.1:5000/my_jupyter
Using default tag: latest
latest: Pulling from my_jupyter
6c40cc604d8e: Pull complete
eb28c72fd5c9: Pull complete
8b7b7e8a3ec6: Pull complete
07400c149ca6: Pull complete
93b52b0b4673: Pull complete
7ffe8540cda4: Pull complete
Digest: sha256:0c081e0c24d3dc9dd1ff3f20c1251d2f9c2c5240ee21d5f97c2df155873742eb
Status: Downloaded newer image for 127.0.0.1:5000/my_jupyter:latest
$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest f32a97de94e1 5 weeks ago 25.8MB
127.0.0.1:5000/my_jupyter latest 319e7e409a6a 7 weeks ago 297MB
// 如果不想要镜像名前面的一长串地址信息,可以使用tag命令对镜像重新打tag
$ docker image tag 127.0.0.1:5000/my_jupyter:latest my_jupyter
$ docker image ls -a
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest f32a97de94e1 5 weeks ago 25.8MB
127.0.0.1:5000/my_jupyter latest 319e7e409a6a 7 weeks ago 297MB
my_jupyter latest 319e7e409a6a 7 weeks ago 297MB
|
在局域网内上传下载镜像
上面演示的是本机上的操作,对于非宿主机来说,需要进行一些其他的设置才能从私有仓库进行下载。如果不进行设置,则可能会出现下面的问题。
1
2
3
4
5
6
7
| // 查看私有镜像仓库
$ curl 192.168.2.68:5000/v2/_catalog
{"repositories":["my_jupyter"]}
$ docker pull 192.168.2.68:5000/my_jupyter
Using default tag: latest
Error response from daemon: Get https://192.168.2.68:5000/v2/: http: server gave HTTP response to HTTPS client
|
如上面的命令,尝试从局域网的私有仓库中下载镜像时,会出现 http: server gave HTTP response to HTTPS client
的错误。原因在于,私有服务器默认是启用了 http服务,但客户端这边默认使用的是https进行访问。
解决方式有两种:
- 一种是在客户端的
/etc/docker/daemon.json
配置文件中,添加忽略条件。 - 另一种是在服务端启用https协议。
修改客户端的配置文件
这种方式比较简单,只需要修改 /etc/docker/daemon.json
配置文件,在配置文件中添加服务端的域名和端口信息。
1
2
3
4
5
6
| {
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries":[
"192.168.2.68:5000"
]
}
|
然后重启docker服务,便能下载了。
1
2
3
4
5
6
7
8
9
10
11
12
| $ systemctl restart docker.service
$ docker pull 192.168.2.68:5000/my_jupyter
Using default tag: latest
latest: Pulling from my_jupyter
6c40cc604d8e: Already exists
eb28c72fd5c9: Pull complete
8b7b7e8a3ec6: Pull complete
07400c149ca6: Pull complete
93b52b0b4673: Pull complete
7ffe8540cda4: Pull complete
Digest: sha256:0c081e0c24d3dc9dd1ff3f20c1251d2f9c2c5240ee21d5f97c2df155873742eb
Status: Downloaded newer image for 192.168.2.68:5000/my_jupyter:latest
|
在服务端启用https服务
(未完,待续)
Author
Alfons
LastMod
2019-05-14
License
Creative Commons BY-NC-ND 3.0