准备环境:两个装有Docker(版本1.12)的虚拟机
虚拟机一:192.168.2.55 用户开发机
虚拟机二:192.168.2.10 用作私有仓库
搭建私有仓库
首先在10机器上下载registry镜像
$ docker pull registry
下载完之后我们通过该镜像启动一个容器
$ sudo docker run -d --restart=always -p 5000:5000 -v /export/data/docker/registry:/tmp/registry registry
默认情况下,registry容器会将仓库存放于容器的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我指定本地一个目录挂载到容器的/tmp/registry下。地址为:192.168.2.10:5000
在55机器下pull一个比较小的镜像来测试(此处使用的是alpine)
$ docker pull alpine
修改一下该镜像的tag
$ docker tag alpine 192.168.2.10:5000/alpine
此时还不能push到10私服上,需要在启动docker server时增加启动参数
修改docker启动配置文件(此处是修改55机器的配置)
Ubuntu下配置文件地址为:sudo vi /etc/init/docker.conf CentOS下配置文件地址为:sudo vi /etc/sysconfig/docker 找到# INSECURE_REGISTRY=‘--insecure-registry‘改为如下: INSECURE_REGISTRY=‘--insecure-registry 192.168.2.10:5000‘
修改完之后,重启Docker服务
$ sudo service docker restart
重启完之后运行推送命令,把本地镜像推送到私有服务器上
$ docker push 192.168.2.10:5000/alpine
可以看到镜像已经push到私有仓库中去了,接下来我们删除本地镜像,然后从私有仓库中pull下来该镜像
删除了本地镜像,然后我们从私有镜像仓库中下载该镜像
$ docker pull 192.168.2.10:5000/alpine
好了,到此本地搭建registry私有仓库就完结了.
以上操作都是root账号操作都,Docker也可以使用非root用户,比如我创建了www用户。
下面是使用非root用户操作的步骤
创建docker组
sudo groupadd docker
将当前用户加入docker组
sudo gpasswd -a www docker
重新启动docker服务(下面是CentOS7的命令)
sudo service docker restart
www用户退出系统重新登陆
运行docker命令
docker ps
问题:在push镜像到registry时,出现以下错误:
# docker push 192.168.163.10:5000/test The push refers to a repository [192.168.2.10:5000/test] 9ec45e5f0334: Retrying in 1 second 33f1a94ed7fc: Retrying in 1 second b27287a6dbce: Retrying in 1 second 47c2386f248c: Retrying in 1 second 2be95f0d8a0c: Retrying in 1 second 2df9b8def18a: Waiting received unexpected HTTP status: 500 Internal Server Error
解决办法:
将selinux禁用
关闭SELinux的两种方法
1 永久方法 – 需要重启服务器
修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。
2 临时方法 – 设置系统参数
使用命令setenforce 0
附:
setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式
禁用之后就可以push了
查看registry中images:
http://192.168.2.10:5000/v2/_catalog