仓库是集中存放镜像的地方
docker 公有仓库地址
https://hub.docker.com
1.1 登录
可以通过docker login命令来输入用户名,密码和 邮箱来完成注册和登录,注册成功后,本地用户目录的.dockercfg中将保存用户的认证信息。
1.1.1 基本操作
用户无需登录可 通过 docker search 命令来查找官方仓库中的镜像,并利用docker pull 下载
[root@ybsrv1 ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 5275 [OK]
ansible/centos7-ansible Ansible on Centos7 121 [OK]
jdeathe/centos-ssh CentOS-6 6.10 x86_64 / CentOS-7 7.5.1804 x... 108 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC sessi... 83 [OK]
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 52 [OK]
...
官方镜像可以分为两类,一类是centos的基础镜像成为基础镜像或跟镜像,是有docker公司创建,验证,支持,提供。这样镜像往往使用单个单词作为名字
还有一种类型,比如ansible/centos7-ansible镜像,是由docker的用户ansible创建维护的,带有用户名称为前缀,表明是某用户的某仓库,可以通过用户名前缀user_name/来指定使用某个用户提供的镜像,比如ansible用户的镜像前缀为ansible
1.1.2 自动创建
自动创建功能对于经常升级的镜像内程序来说十分方便,有时候创建了镜像,安装了软件,如果软件发布新版本需要手动更新
而自动创建功能使得用户通过docker hub指定跟踪一个目标网站项目,一旦项目发现新的提交,则自动执行创建
配置自动创建步骤
1.创建并登录docker hub,以及目标网站,*在目标网站中链接账号到docker hub
2. 在docker hub中配置一个自动创建
3.选取一个目标网站中的项目(需要含dockerfile)和分支
4.指定dockerfile的“自动创建”页面中跟踪每次创建的状态
1.2.下载镜像
docker pull
但是要在镜像名称前添加注册服务器的具体地址
docker pull 地址/ubuntu:14.04
1.3. 创建和使用私有库
安装docker 后可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境
创建本地私有仓库默认在/tmp 下
docker run -d -p 5000:5000 --restart=always --name registry registry
-v 指定目录
docker run -d -p 5000:5000 --name=registry --privileged=true -v /data/registry:/data/registry registry
使用docker tag 命令将这个镜像标记为192.168.2.14:5000
docker tag test:latest 192.168.2.14:5000/test
上传报错
[root@kubernetes /etc/docker]# docker push 192.168.2.14:5000/busybox
The push refers to repository [192.168.2.14:5000/busybox]
Get https://192.168.1.53:5000/v2/: http: server gave HTTP response to HTTPS client
解决:
错误原因:
因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。
为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。
目前很多文章都是通过修改docker的配置文件“etc/systemconfig/docker",重启docker来解决这个问题。
但发现docker1.12.3版本并无此文件,根据网上创建此文件,并填入相应内容,重启docker无效果,仍然报此错误。
解决方法:
在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:
{ "insecure-registries":["192.168.2.14:5000"] }
#restart docker
#docker start 366c3c5fe1ea #registry容
docker push 上传标记镜像
docker push 192.168.2.14/busybox
上传成功
查看上传images的log
[root@kubernetes ~]# curl http://192.168.2.14:5000/v2/_catalog
{"repositories":["busybox","centos"]}
查看tags
[root@kubernetes ~]# curl http://192.168.2.14:5000/v2/busybox/tags/list
{"name":"busybox","tags":["latest"]}
删除上传的tags 重新下载
[root@kubernetes ~]# docker rmi 192.168.2.14:5000/busybox
Untagged: 192.168.2.14:5000/busybox:latest
Untagged: 192.168.2.14:5000/busybox@sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
[root@kubernetes ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.2.14:5000/centos latest 0f3e07c0138f 7 weeks ago 220MB
centos latest 0f3e07c0138f 7 weeks ago 220MB
busybox latest 19485c79a9bb 2 months ago 1.22MB
registry latest f32a97de94e1 8 months ago 25.8MB
registry latest f32a97de94e1 8 months ago 25.8MB
[root@kubernetes ~]# docker pull 192.168.2.14:5000/busybox
Using default tag: latest
latest: Pulling from busybox
Digest: sha256:dd97a3fe6d721c5cf03abac0f50e2848dc583f7c4e41bf39102ceb42edfd1808
Status: Downloaded newer image for 192.168.2.14:5000/busybox:latest
192.168.2.14:5000/busybox:latest
[root@kubernetes ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.2.14:5000/centos latest 0f3e07c0138f 7 weeks ago 220MB
centos latest 0f3e07c0138f 7 weeks ago 220MB
192.168.2.14:5000/busybox latest 19485c79a9bb 2 months ago 1.22MB
busybox latest 19485c79a9bb 2 months ago 1.22MB
registry latest f32a97de94e1 8 months ago 25.8MB
registry latest f32a97de94e1 8 months ago 25.8MB
2. 配置私有库
2.1. 基于容器安装运行
docker run -d -p 5000:5000 --restart=always --name registry registry
指定配置文件
docker run -d -p 5000:5000 \
--restart=always \
--name registry \
-v /home/user/registry-conf/config.yml:/etc/docker/registry/config.yml \
registry:2
指定存储位置
docker run -d -p 5000:5000 \
--restart=always \
--name registry \
-v /opt/data/registry:/var/lib/registry \
registry:2
2.2 本地安装运行
安装golang环境
yum install golang
环境准备
mkdir -p /$GOPATH/src/github.com/docker/
cd /$GOPATH/src/github.com/docker/
git clone https://github.com/docker/distribution.git
cd distribution/
mkdir /etc/docker/registry/
cp cmd/registry/config-dev.yml /etc/docker/registry
安装启动
make PREFIX=/go clean binaries
registry serve /etc/docker/registry/config.yml
2.3 配置TLS 证书
2.3.1. 自动生成
openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/myrepo.key -x509 -days 365 -out certs/myrepo.crt
2.3.2 启用证书
docker run -d \
--restart=always \
--name registry \
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/myrepo.crt \
-p 443:443 \
registry