docker仓库,用来管理镜像。主要分为公共仓库和私人仓库。下面介绍了公共仓库Docker Hub、私人仓库Registry和harbor。
1、使用公共仓库Docker Hub管理镜像
先注册账户,网址 https://hub.docker.com/
在docker客户端:
(1)登录docker hub:
docker login
会提示输入用户和密码。若不登录会出现权限问题:denied:requested access to the resource is denied
(2)推镜像到Docker Hub:
docker tag [已有的镜像] [用户名/仓库名:tag标识]
比如:docker tag openjdk:latest 1506776593/openjdk:latest
docker push [用户名/仓库名:tag标识]
比如:docker push 1506776593/openjdk:latest
此时可以登录https://hub.docker.com/可以看见这个上传的镜像
2、使用私人仓库Registry管理镜像
在这个网址(https://hub.docker.com/)先查询官方registry镜像,看有哪些版本,下面使用registry:2版本
在docker客户端:
(1)拉取registry:
docker pull registry:2
(2)启动registry:
docker run -d -p 5000:5000 --restart always --name registry registry:2
(3)推送镜像:
docker tag [已有的镜像] [localhost:5000/仓库名:tag标识]
比如:docker tag openjdk:latest localhost:5000/openjdk:latest
docker push [localhost/仓库名:tag标识]
比如:docker push localhost:5000/openjdk:latest
参见官网: https://hub.docker.com/_/registry
3、使用企业级仓库Harbor管理镜像
使用registry的缺点:只要registry主机宕机,那么上面的镜像就不见了。为了解决这个问题Harbor出现了,它不经可以水平扩展,解决了registry的问题,还提供了UI界面,只是这两点就会让人用它了,下面开始搭建一个单机版Harbor。
(1)准备环境:
一台装Linux系统的主机(下面使用的是ubuntu16.04,自带python), 安装docker 17.06.0-ce及以上、docker-compose 1.18.0及以上 等
安装docker:参考 https://blog.csdn.net/weixin_42146764/article/details/98474298
ubuntu上安装docker-compose1.18:
sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
添加权限:
chmod +x /usr/local/bin/docker-compose
查看版本,可以验证是否安装成功:
docker-compose -v #出现版本号表示安装成功
(2)到github上搜索harbor,下载某个版本的tar.gz包(Release版本的)
提供一个下载网址: https://github.com/goharbor/harbor/releases
说明一下可以离线安装或在线安装,我采用的是离线安装
下载版本为: harbor-offline-installer-v1.8.2.tgz
(3)解压缩,并进入harbor目录
tar xvf harbor-offline-installer-v1.8.2.tgz
cd harbor
(4)修改配置文件harbor.yml内容:
vi harbor.yml
可以只修改hostname,IP是安装harbor的宿主机的IP,下面会使用,比如
hostname: 192.168.0.241
#这里只修改了hostnam,其他默认了,可以按需求设置
(5)运行prepare
./prepare
或
sh prepare
(6)运行install.sh
./install
或
sh install.sh
出现下面的提示表示安装成功
可以在浏览器输入<IP>即可登录harbor UI,用户名admin, 密码默认是Harbor12345,可以在 harbor.yml中修改
(7)docker客户端需要配置insecure-registry,否则会报错
先说明一下,必须配置这一步,不然有得你难受了,不配置这个遇到的坑:
Error response from daemon: Get https://hub.carlos666.com/v2/: dial tcp: lookup hub.carlos666.com on 10.0.2.3:53: no such host
# no such host,主要可能是host文件不存在这个映射
Error response from daemon: Get https://192.168.0.241/v2/: dial tcp 192.168.0.241:443: connect: connection refused
#没有配置insecure-registry或者docker 登录(login)harbor库地址(hostname)写错
Error response from daemon: Get http://hub.carlos666.com/v2/: dial tcp: lookup hub.carlos666.com on 10.0.2.3:53: read udp 10.0.2.15:60329->10.0.2.3:53: i/o timeout
Error response from daemon: Get https://192.168.0.241:80/v2/: http: server gave HTTP response to HTTPS client
上述是我出现过的问题,去度娘查了按照其他人的设置,就是不成功。当然,也查到过我下面的配置,也配置过,就是没成功,总结就是配置未生效,所以不想入坑,请好好看下面的步骤。
现在docker支持多种操作系统,下面分系统说明配置,但要说一句就是只要docker客户端想要访问Harbor,那么就得配置insecure-registry
(7.1)docker客户端在window上
这个docker装在名为default的VM,那么要设置Docker就先得进入VM
a.进入VM
docker-machine ssh default
或者使用远程连接工具,如XShell:IP是192.168.99.100,用户名docker,密码tcuser
b.修改文件 /var/lib/boot2docker/profile
sudo vi /var/lib/boot2docker/profile
在--label provider=virtualbox下面添加一行:--insecure-registry=[IP或域名】 ,比如
--insecure-registry=192.168.0.241:80
#192.168.0.241是安装harbor的宿主机的IP,上面在harbor.yml文件中配置的,若harbor.yml文件配置的是域名就使用域名
c.重启docker
sudo /etc/init.d/docker restart
(7.2)docker客户端在Linux上
a.修改文件/etc/docker/daemon.json
在其中加入下面的语句:
{
"insecure-registries":["192.168.0.241:80"]
}
若配置了加速镜像IP,需要加上逗号分开,如
{
"registry-mirrors": ["https://7z6goecq.mirror.aliyuncs.com"],
"insecure-registries":["192.168.0.241:80"]
}
其中,192.168.0.241是安装harbor的宿主机的IP,上面在harbor.yml文件中配置的,若harbor.yml文件配置的是域名就使用域名,下面不再说明
b.重启docker
systemctl daemon-reload
systemctl restart docker
(8)重启harbor
若是docker客户端与服务端不在同一个主机上,这步可以跳过。否则最好重启harbor,不然配置可能没生效,我就被这个问题折磨了两小时。
进入到存放docker-compose.yml目录(harbor目录),执行下列命令
docker-compose restart
#上面的语句执行若出现某个服务error,就执行下面的语句,按理说,直接执行下面命令即可
docker-compose down
docker-compose up -d
(9)登录并推送镜像
在UI界面登录之后创建一个项目,如micro-service
(9.1)登录harbor
docker login 192.168.0.241:80
用户名admin, 密码Harbor12345
(9.2)推送镜像
docker tag openjdk:latest 192.168.0.241:80/micro-service/openjdk:latest
docker push 192.168.0.241:80/micro-service/openjdk:latest
(9.3)验证
UI界面在项目micro-service里面查看是否有openjdk。
没有废话,全是实战总结的。