Docker私服
伸手摘星,即使一无所获,亦不致满手污泥。
请关注公众号:星河之码
在使用maven管理jar包依赖的时候,为了避免每次都从中央仓库拉取依赖包,使用了nexus做了代理仓库。docker镜像仓库与nexus私服仓库作用类似,用于将打包好的镜像保存在仓库中方便开发、测试、生产环境镜像拉取存储,减轻环境部署需要的相应操作。
一、什么是Docker私服
Docker 官方的 Docker Hub 是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像到本地,也可以把我们自己的镜像推送上去。
但是,如果我们的服务器无法访问互联网,或者需要使用自己的自己私有镜像,此时我们就需要搭建自己的私有仓库,来存储和管理自己的镜像。
docker私服分为两种:
- 官方私服
- 企业私服
一般我们个人用不到这个,而在企业应用中官方显得不是很友好,没有界面,所以一般都是使用的企业私服
二、官方私服
docker官方给我们提供了一个私服registry用于管理自己的私有镜像,官网地址如下:
https://hub.docker.com/_/registry
下面来看看docker官方私服的搭建过程
-
拉取基础私服镜像
#可以不指定版本,拉取最新的 docker pull registry:2.7.1
-
备份镜像
docker save registry:2.7.1 -o registry.2.7.1.tar
-
导入镜像
docker load -i registry.2.7.1.tar
这里的备份和导入,只是为了将在这的镜像做一个备份,以后要用就不用重新去拉取了,如果不需要备份,可以不用执行,直接运行镜像即可
-
启动私有仓库容器
docker run -itd -p 5000:5000 --name registry --restart=always registry:2.7.1
registry的端口是5000
-
访问私服
打开浏览器 输入地址:http://私有仓库服务器ip:5000/v2/_catalog 若看到 {"repositories":[]} 则表示私有仓库搭建成功
这里私服虽然构建成功,但是我们还要配置docker跟私服的关联,不然docker不会去我们搭建私服拉取镜像
-
添加私服仓库地址
#编辑配置文件 vi /etc/docker/daemon.json #增加仓库配置信息 # 在daemon.json中添加以下 key,保存退出。此步用于让 docker 信任私有仓库地址 {"insecure-registries":["192.168.242.128:5000"]}
配置了私有仓库服务器之后,拉取镜像就会先去私服中拉取,找不到则去中央仓库拉取,跟Maven的工作方式一样的,这里之所有要配置,主要是因为我们用的是HTTP的方式,而docker现在要求用HTTPS
-
重启docker
#重新加载docker配置 systemctl daemon-reload #重启docker systemctl restart docker
-
查看docker信息确认仓库是否添加
docker info
-
上传镜像
# 1、标记镜像打一个tag docker tag nginx:1.19.3-alpine 192.168.242.128:5000/nginx:v1 # 2、上传标记的镜像 docker push 192.168.242.128:5000/nginx:v1 # 记得将Ip改为自己的Ip #在上传一个tomcat的镜像 docker tag tomcat:9.0.20-jre8-alpine 192.168.242.128:5000/tomcat:v1 docker push 192.168.242.128:5000/tomcat:v1
-
浏览器查看上传的镜像
http://192.168.242.128:5000/v2/tomcat/tags/list
-
从私服拉取镜像
docker pull 192.168.242.128:5000/nginx:v1
到这里,docker的私服搭建就完成了,我们可以将自己镜像上传到私服中,留待以后使用,但是我们通过浏览器访问的时候,会发现docker私服其实没有界面,只是访问的API,返回一个json,很不方便。所以接下来搭建以下有UI的企业私服。
三、企业私服
前面安装搭建了docker官方私服Registry,接下来企业级镜像库Harbor
3.1 Harbor介绍
Harbor作为一个企业级私有Registry服务器,提供了更好的性能和安全,提升了用户使用Registry构建和运行环境传输镜像的效率。
虽然Harbor和Registry都是私有镜像仓库的选择,但是Harbor的企业级特性更强,因此也是更多企业级用户的选择。
Harbor实现了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制,也常常和K8S中的namespace结合使用。
Harbor还提供了图形化的管理界面,我们可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间
harbor官网地址
harbor官网地址:
https://goharbor.io/
github官网地址:
https://github.com/goharbor/harbor
官方帮助文档:
https://github.com/goharbor/harbor/blob/v1.9.4/docs/installation_guide.md
在官方帮助文档中有指明了安装harbor的一个硬件要求
硬件资源 | 最小配置 | 推荐配置 |
---|---|---|
CPU | 2 CPU | 4 CPU |
内存 | 4 GB | 8 GB |
硬盘 | 40 GB | 160 GB |
3.2 Harbor搭建
开发环境大部分采用http方式进行安装;生产环境必须采用https方式安装。
-
下载
https://github.com/goharbor/harbor
进入官网后,找到自己要下载的版本进行下载
下载时,选择全安装包,因为是国外的网络,所以在线安装的话可能会下不下来,所以下载全安装包
-
上传
将下载的harbor压缩包上传到服务器
-
解压harbor压缩包
cd /data tar zxf harbor-offline-installer-v2.4.1.tgz
-
进入安装目录
cd harbor ls
可以看到harbor有几个文件,其中harbor.yml.tmpl是一个harbor的配置文件的模板
-
创建配置文件harbor.yml
harbor.yml 为harbor的配置文件
cp harbor.yml.tmpl harbor.yml
-
修改配置文件harbor.yml
vi harbor.yml
-
拉取私服镜像
#修改私服镜像地址 hostname: 192.168.242.128 #修改镜像地址访问端口号 port: 5000 #harbor管理员登录系统密码 harbor_admin_password: Harbor12345 #修改harbor映射卷目录 data_volume: /data/harbor/harborVolume
-
安装harbor并启动
# 在harbor目录下执行,执行前,先把docker 在运行的容器先全部删除 # docker rm $(docker stop $(docker ps -aq)) ./install.sh
-
查看是否启动
docker ps -a
如果Nginx没有启动成功,需要修改一下Nginx的配置
执行完./install.sh命令之后在harbor 目录 会新增几个文件
common 目录下是上面 docker 启动的所有容器,在common 的config目录下有一个nginx ,进入Nginx,修改 nginx.conf 配置文件
-
访问harbor
http://192.168.242.128:5000 username: admin password: Harbor12345
3.3 添加私服仓库地址
这一步骤跟registry是一样的
-
添加私服仓库地址
#编辑配置文件 vi /etc/docker/daemon.json #增加仓库配置信息 # 在daemon.json中添加以下 key,保存退出。此步用于让 docker 信任私有仓库地址 {"insecure-registries":["私有仓库服务器IP:5000"]}
配置了私有仓库服务器之后,拉取镜像就会先去私服中拉取,找不到则去中央仓库拉取,跟Maven的工作方式一样的
-
重启docker
#重新加载docker配置 systemctl daemon-reload #重启docker systemctl restart docker
-
查看docker信息确认仓库是否添加
docker info
2.4 Harbor 的使用
-
新建项目
在harbor中新建项目,镜像是以项目隔离开的,harbor支持可以给不同的角色分配不同的权限,使用不同项目下面的镜像
这里我创建一个edwinedu的项目
-
容器中登录私服
docker login -u admin -p Harbor12345 192.168.242.128:5000
-
上传镜像
以上传nginx镜像为例
#先根据edwinedu项目打一个tag docker tag nginx:1.19.3-alpine 192.168.242.128:5000/edwinedu/nginx:v2 #将tag推送到Harbor 私服中 docker push 192.168.242.128:5000/edwinedu/nginx:v2
-
下载镜像
在Harbor 私服中选择自己要使用的镜像,点击复制按钮就可以获取该镜像的拉取命令,在docker中执行即可
docker pull 192.168.242.128:5000/edwinedu/nginx:v2
-
容器中退出私服
docker logout 192.168.242.128:5000