Docker介绍及环境搭建参考:
Docker系列一: docker介绍&&安装(含离线安装)
Docker系列(二): 搭建docker镜像仓库-Nexus、Harbor
Docker系列(三):Idea使用docker打包和发布springboot项目
目录
一、使用Nexus作为镜像仓库
(一)、使用docker安装nexus
①拉取nexus镜像
②启动nexus
③查看启动日志
④访问Nexus
⑤修改admin默认密码
(二)、nexus配置docker镜像仓库
①创建docker-hosted仓库
②docker登陆到nexus仓库
③测试从nexus仓库推送和拉取镜像
二、使用Harbor作为镜像仓库
(一)、安装Harbor
①安装docker-compose
②:安装Harbor
③配置https
④修改harbor配置
⑤执行安装
⑥访问Harbor
(二)配置Harbor为镜像仓库
①配置harbor所在主机的host
②创建docker证书目录
③复制客户端证书
④docker添加信任仓库地址
⑤docker登录到harbor
⑥测试harbor拉取和推送镜像
⑦其他
docker pull sonatype/nexus3
docker run -d --name nexus3 --restart=always -p 8081:8081 -p 8082:8082 -p 8083:8083 -p 8084:8084 -p 8085:8085 -v /opt/nexus-data:/var/nexus-data sonatype/nexus3
docker logs -f nexus3
当看到如下启动日志,即表示启动成功
直接访问 服务器ip:8081 即可
如图所示,首次点击登陆提示了admin的密码存放在/nexus-data/admin.password文件中
此文件是docker容器中文件,所以进入nexus容器中
(1)查看docker已启动的容器列表:docker ps
(2)进入容器
docker exec -it nexus3 /bin/bash
(3)查看密码
cat /nexus-data/admin.password
(4)登陆并按照提示修改admin初始密码即可
在确保已经登陆到nexus之后接下来配置docker镜像仓库
docker添加信任仓库地址: vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://bxsfpjcb.mirror.aliyuncs.com"
],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"insecure-registries":
["127.0.0.1","192.168.1.119:5000","192.168.1.119:443","192.168.1.119:8082"]
}
按上所示追加nexus的私服地址
重启docoker
systemctl daemon-reload && systemctl restart docker
docker登陆到仓库
docker login -u admin -p <密码> 192.168.1.119:8082
如下图所示表示登陆成功
先从外网拉取一个ngxin镜像
docker pull nginx
重新打一个tag,标记为私服仓库的镜像
docker tag nginx 192.168.1.119:8082/nginx:latest
推送到nexus仓库
docker push 192.168.1.119:8082/nginx:latest
删除本地nginx镜像
docker rmi -f
查看docker 镜像列表
docker images
拉取nexus仓库中的nginx镜像
docker pull 192.168.1.119:8082/nginx:latest
再次查看docker镜像列表
docker images
从github上下载docker-compose的可执行包: https://github.com/docker/compose/releases
这里使用的1.28.6版本
下载好之后上传到服务器放到/usr/local/bin目录下并重命名为docker-compose
修改可执行权限:
chmod +x /usr/local/bin/docker-compose
查看docker compose版本:
docker-compose -v
下载离线安装包: https://github.com/goharbor/harbor/releases
下载完之后上传服务器,解压并移动解压目录到/usr/local目录下
harbor默认工作方式是http,但是这只能在页面访问,默认harbor推送拉取镜像时走的是https,所以需要配置下https
(1)生成秘钥和自签名整数
openssl req -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 3650 -out ca.crt
注意如上图中Common Name填入一个域名
(2)生成证书签名请求
openssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.imysh.com.key -out harbor.imysh.com.csr
注意如上图中Common Name填入上一步中的域名,并填写challenge password
(3)生成服务器证书
openssl x509 -req -days 3650 -in harbor.imysh.com.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out harbor.imysh.com.crt
最终得到目录下的几个证书文件
(4)安装证书
将服务器需要的文件拷贝到一个目录下
mkdir -p /data/cert/harbor/ && cp harbor.imysh.com.crt harbor.imysh.com.key /data/cert/harbor/
cd /usr/local/harbor && cp harbor.yml.tmpl harbor.yml && vi harbor.yml
按下图所示修改一下几处
执行安装准备命令
./prepare
执行安装脚本
sh install.sh
过程可能会比较慢,看到如下图所示即表示安装并启动成功
http的端口默认设置的80端口,即访问服务器ip即可
默认用户名admin,密码Harbor12345 ,登录之后即可看到harbor管理界面
添加上图红圈所示,后面的域名是前面步骤中配置harbor证书时填写的域名
mkdir -p /etc/docker/certs.d/harbor.imysh.com
注意必须是在/etc/docker目录下创建certs.d目录,并在certs.d目录下创建前面步骤中配置harbor证书时填写的域名目录
cp /usr/local/harbor/ca.crt /etc/docker/certs.d/harbor.imysh.com/
重启docoker
systemctl daemon-reload && systemctl restart docker
docker login -u admin -p Harbor12345 192.168.1.119:443
将本地nginx镜像重新打上标签并推送到harbor默认的library项目中
查看library项目中是否有刚上传的nginx镜像
删除本地的nginx,然后从harbor中拉取
(1)Harbor停止和启动
cd /usr/local/harbor
# 停止命令
docker-compose down -v
# 启动命令
docker-compose up –d
(2)Harbor添加用户
添加完成之后即可看到
(3)Harbor限制匿名访问
Harbor仓库可以设置为私有
也可以给某一个项目添加用户并给用户赋予权限
查看项目下的用户多了一个devuser
(4)Harbor角色说明
超级管理员: 即就是admin,最高的权限
项目管理员: 可以管理整个项目
维护人员: 比项目管理员少了人员和用户管理的功能
开发者: 主要是上传个下载镜像,不能删除项目和镜像
访客: 主要是下载镜像和查看项目的一些配置和人员及日志信息等
受限用户:基本就只能拉取镜像了
另外匿名用户只能查看和下载公开的项目,私有项目无法访问
写在最后:
Nexus和Harbor都可以作为docker的镜像仓库,但是Nexus不仅可以做为镜像仓库,也可以作为maven、pip、apt、npm、yum等等主流私有仓库;Harbor相比Nexus,管理界面相对友好,并且提供更细致化的权限控制,二者各有优点,可自行选择使用