构建私有仓库
拉取registry镜像,构建私有的镜像注册服务器
docker pull registry
运行容器
docker run --restart=always -d -p 5000:5000 -v /myregistry:/var/lib/registry registry
-d 后台运行,不会有交互终端 -it运行就会有一个终端,退出容器后,容器也停止并退出了(ctrl+p+q不会)
-p 宿主机访问该容器的端口5000后面那个5000是docker内部运行的端口,自己设定就好
-v 挂载容器卷目录,冒号前是本机目录 /myregistry,
冒号后是仓库容器中的目录 /var/lib/registry
(上传的镜像默认是这个目录),目的为了持久化到宿主机。
访问 http://192.168.220.125:5000/v2/ 返回成功,则说明运行成功
connection refused问题
docker pull 的时候产生如下错误:
Get http://192.168.220.125:5000/v2/: dial tcp 192.168.220.125:5000: connect: connection refused
原因: 容器中的配置的目录不存在
进入容器查看确认目录:docker exec -it 1e33b26152e1 /bin/sh
1e33b26152e1 为运行的容器ID
-it:以终端形式进入容器
目录无误,如果没有 查找下register目录位置 命令:find / -name registry 找到目录,停止容器,重新更改对应挂载目录运行registry镜像。
在容器的控制台中创建 /var/lib/registry目录:
mkdir /var/lib/registry
server gave HTTP response to HTTPS client
错误现象:
Error response from daemon: Get https://192.168.220.125:5000/v2/: http: server gave HTTP response to HTTPS client
原因分析:
docker registry未采用https服务,而客户端docker使用https请求push所致
解决方法:
docker客户端将https请求更改为http请求, 将以下配置添加到 /etc/docker/daemon.json 中
{ "insecure-registries":["192.168.220.125:5000"] }
注意: 该配置是配置在docker客户端,让docker客户端以不安全的http请求访问docker registry,ip以及端口填写的是提供服务容器的ip以及端口。
增加配置文件后,重启docker服务
service docker restart
以前的老方法,修改的是不同的配置文件
# gedit /etc/sysconfig/docker
OPTIONS='--selinux-enabled --insecure-registry 192.168.220.125:5000'
私有仓库使用总结:
1. docker pull registry 拉取registry镜像;
2. 运行镜像,挂在本地目录到容器
docker run --name registry --restart=always -d -p 5000:5000 -v /myregistry:/var/lib/registry registry
3. 给本地镜像打标签:
docker tag myimage:v1 192.168.220.125:5000/myimage:v1
4. push到私有仓库
docker push 192.168.220.125:5000/myimage:v1
5. 列出所有镜像仓库,访问链接
http://192.168.220.125:5000/v2/_catalog
6. 其他服务器直接拉取镜像
docker pull 192.168.220.125:5000/myimage:v1