有时候使用 DockerHub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。 docker官方提供了一个docker-registry工具,可以用于构建私有的镜像仓库。
安装运行 docker-registry
[root@DockerImages ~]# yum -y install docker-registry 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.163.com * epel: mirrors.tuna.tsinghua.edu.cn * extras: mirrors.cn99.com * updates: mirrors.163.com 软件包 docker-registry 已经被 docker-distribution 取代,改为尝试安装 docker-distribution-2.6.2-2.git48294d9.el7.x86_64 正在解决依赖关系 --> 正在检查事务 ---> 软件包 docker-distribution.x86_64.0.2.6.2-2.git48294d9.el7 将被 安装 --> 解决依赖关系完成 ...下载并运行容器
在安装了 Docker 后,可以通过获取官方 registry 镜像来运行。
[root@DockerImages ~]# docker pull registry:latest Unable to find image 'registry:latest' locally Trying to pull repository docker.io/library/registry ... latest: Pulling from docker.io/library/registry c87736221ed0: Pull complete 1cc8e0bb44df: Pull complete 54d33bcb37f5: Pull complete e8afc091c171: Pull complete b4541f6d3db6: Pull complete Digest: sha256:f87f2b82b4873e0651f928dcde9556008314543bd863b3f7e5e8d03b04e117f7 Status: Downloaded newer image for docker.io/registry:latest bd54cb4ae7e5340318384ca7c786285ca6de9ba8ee46cf43d1704ef3e442676a [root@DockerImages ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu 14.04 2c5e00d77a67 10 days ago 188 MB docker.io/registry latest f32a97de94e1 2 months ago 25.8 MB docker.io/ubuntu 12.04 5b117edd0b76 2 years ago 104 MB [root@DockerImages ~]# docker run -d -p 5000:5000 docker.io/registry:latest [root@DockerImages ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bd54cb4ae7e5 registry "/entrypoint.sh /e..." 5 minutes ago Up 5 minutes 0.0.0.0:5000->5000/tcp eager_kare此外,还可以指定本地路径(如 /home/user/registry-conf )下的配置文件。 默认情况下,仓库会被创建在容器的/tmp/registry下。可以通过-v参数来将镜像文件存放在本地的指定路径。
#例如下面的例子将上传的镜像放到/opt/data/registry 目录:
[root@DockerImages ~]# docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry docker.io/registry:latest
如果在启动过程中出现如下错,
[root@DockerImages ~]# docker run -d -p 5000:5000 docker.io/registry:latest b65bbf3963e4f87b66fce6ea87763c42ef6ac272c8eae51a431fd2f9a6a8da66 /usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint sad_wright (daceb29865bbf0e3702a8f2ec20f452f4d1a1518def975b139091715416cf591): Bind for 0.0.0.0:5000 failed: port is already allocated.解决办法:这是由于来自守护进程的错误响应,而致使外部连接失败。解决的办法就是将其docker进程 kill掉,然后再 清空掉iptables下nat表下的所有链(规则) 。最后,将 docker的网桥删除,并重启docker服务
[root@DockerImages ~]# pkill docker #终止进程 [root@DockerImages ~]# iptables -t nat -F #清空nat表的所有链 [root@DockerImages ~]# ifconfig docker0 down #停止docker默认网桥 [root@DockerImages ~]# yum install bridge-utils -y # 部分机器是无法使用brctl,所以需要提前安装 [root@DockerImages ~]# brctl delbr docker0 #删除网桥 [root@DockerImages ~]# systemctl restart docker #重启docker [root@DockerImages ~]# docker run -d -p 5000:5000 --restart=always --name registry docker.io/registry在私有仓库上传、下载、搜索镜像 创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后推送它到仓库,别的机器上就可以下载下来了。例如私有仓库地址为 192.168.13.133:5000 。
私有仓库
第一步:给镜像打标记
使用 docker tag 将 5b117edd0b76 这个镜像标记为 192.168.13.133:5000/ubuntu3 (格式为 docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG] )。
[root@DockerImages ~]# docker tag docker.io/ubuntu:12.04 192.168.13.133:5000/ubuntu3:latest12第二步:上传标记的镜像
使用 docker push 上传标记的镜像。
[root@DockerImages ~]# docker push 192.168.13.133:5000/ubuntu3:latest12 The push refers to a repository [192.168.13.133:5000/ubuntu3] 3efd1f7c01f6: Pushed 73b4683e66e8: Pushed ee60293db08f: Pushed 9dc188d975fd: Pushed 58bcc73dcf40: Pushed latest12: digest: sha256:ff38d3ab43a1f8ff7a83312369313e5b1b913df56d19c21b12029fc682783df4 size: 1359用 curl 查看仓库中的镜像。
[root@DockerImages ~]# curl 192.168.13.133:5000/v2/_catalog {"repositories":["ubuntu3"]} [root@DockerImages ~]#出现epositories":["ubuntu3"]}表明镜像已经被成功上传了,里面有一个名叫ubuntu3的镜像。
现在可以到另外一台机器去下载这个镜像。
注意:重要的是事情说三遍,这里有一个坑,在下载前需要修改/etc/docker/daemon.json文件,将文件内容{}替换为{ "insecure-registries":["192.168.13.133:5000"]},修改完后重启docker服务 注意:重要的是事情说三遍,这里有一个坑,在下载前需要修改/etc/docker/daemon.json文件,将文件内容{}替换为{ "insecure-registries":["192.168.13.133:5000"]},修改完后重启docker服务 注意:重要的是事情说三遍,这里有一个坑,在下载前需要修改/etc/docker/daemon.json文件,将文件内容{}替换为{ "insecure-registries":["192.168.13.133:5000"]},修改完后重启docker服务 如果没有修改daemon.json文件,在下载镜像时出现“Get https://192.168.13.133:5000/v1/_ping: http: server gave HTTP response to HTTPS client” ,表示下载失败
[root@DockerOne ~]# docker pull 192.168.13.133:5000/ubuntu3:latest12 Trying to pull repository 192.168.13.133:5000/ubuntu3 ... latest12: Pulling from 192.168.13.133:5000/ubuntu3 Digest: sha256:ff38d3ab43a1f8ff7a83312369313e5b1b913df56d19c21b12029fc682783df4 Status: Downloaded newer image for 192.168.13.133:5000/ubuntu3:latest12 [root@DockerOne ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.13.133:5000/ubuntu3 latest12 5b117edd0b76 2 years ago 104 MB如有问题,可在下方留言或加qq:1421691474咨询。