Docker搭建私有镜像中心Harbor的详细过程
公网镜像中心
Docker Hub 和阿里云都是Docker 的公网镜像中心,用户可以将镜像push到镜像中心的镜像仓库里,可以将仓库设为私有库,他人无法访问,保证镜像安全。
但是,实际工作中,一般在公司内部搭建一个私有镜像中心。
发布镜像到阿里云
- 注册一个阿里云账号,并完成实名认证
- 创建镜像中心实例
- 登录阿里云后搜索“容器镜像服务”,然后进入并创建个人实例
- 设置Registry登录密码。
- 创建命名空间
- 阿里云在镜像中心和镜像仓库之间增加了一层“命名空间”,可以将镜像仓库分类到不同的命名空间中,所以要先创建命名空间。
- 创建镜像仓库,先选择好命名空间

这里选择本地仓库。
登录阿里云镜像中心
docker login --username=dt_5224810793 crpi-8nnmc9aojy1lrfpp.cn-chengdu.personal.cr.aliyuncs.com
复制并重命名镜像
docker tag hello-my-world crpi-8nnmc9aojy1lrfpp.cn-chengdu.personal.cr.aliyuncs.com/ali_1/ali_1_ck:1.0
推送镜像
docker push crpi-8nnmc9aojy1lrfpp.cn-chengdu.personal.cr.aliyuncs.com/ali_1/ali_1_ck:1.0
此时就推送成功了!

登出阿里云仓库
docker logout crpi-8nnmc9aojy1lrfpp.cn-chengdu.personal.cr.aliyuncs.com
私有镜像中心
htpasswd命令
registry 私有镜像中心默认没有用户认证功能,可通过htpasswd来实现用户认证!
htpasswd用于创建、更新http基本认证的密码文件。
安装httpd-tools
htpasswd 需要先安装httpd-tools 工具包
yum install -y httpd-tools
创建文件并添加用户
创建/root/auth 目录并进入。在其中存放生成的认证文件
# 指定用户zhangsan 密码123 并写入到auth目录中的htpasswd.user文件中 htpasswd -Bbc htpasswd.user zhangsan 123 # 再创建两个用户,此时无需选项-c htpasswd -Bb htpasswd.user lisi 123 htpasswd -Bb htpasswd.user wangwu 123
修改密码
# 若指定用户不存在,则添加用户;若存在,就修改密码 htpasswd -Bb htpasswd.user wangwu 456
删除用户名和密码
htpasswd -D htpasswd.user wangwu
使用-n选项创建文件
# -n选项和重定向符可将密码写入到文件,比如将用户名和密码写入当前目录的authfile中 htpasswd -Bbn wangwu 456 > authfile # 这种情况下修改密码可通过追加重定向符来完成 htpasswd -Bbn Tom 456 >> authfile
容器的退出状态码
退出状态码可以向用户反馈容器中应用的退出方式!
状态码分类
容器退出状态码是【0,255】范围内的整数,分为三类:0、【1,128】、【129,255】
- 状态码0:表示容器中应用正常退出。
- 【1,128】:非正常退出,容器内部运行错误引发的容器无法启动或应用运行出错。
- 【129,255】:非正常退出,表示容器接收到终止信号而退出。
常见状态码如下:
- 状态码1:表示程序内部错误(比如:分母为0,内存溢出)或Dockerfile中的无效引用(比如引用了不存在的文件)
- 状态码125:容器启动后要执行【command】,但是【command】没运行成功,原因一般是【command】引用了未定义的变量或者执行了没权限的目录。
- 状态码126:容器启动后要执行【command】,但是【command】没运行成功,原因是缺少依赖。
- 状态码127:容器启动后要执行【command】,但是【command】没运行成功,原因是引用了不存在的文件或目录。
- 状态码128:当自己开发的容器内的代码引发退出命令,但是给出的状态码不再0-255范围内,就会返回128
- 状态码130:容器中的应用接收到来自操作系统的终止信号,应用立即退出,返回130.
- 状态码137:容器中的应用接收到来自docker的强制终止信号,应用立即退出,返回137.
- 状态码143:容器中的应用接收到来自docker的优雅终止信号,如果没用户访问,容器会立即退出,并返回143;如果有用户访问,那么docker会等待10s,10s后向容器发送kill信号,返回137状态码
退出状态码的查看方式:docker ps -a 或 docker inspect

容器重启策略
在生产环境下,容器退出后使用手动重启不现实,这时可以使用容器重启策略,在容器创建时指定--restart 选项 不同的值,达到不同的效果。
- no:默认策略,退出时不重启。
- on-failure[:n]: 容器非正常退出时(退出状态码非0)才重启容器,气候可以跟一个整数,表示重启次数。
- always:只要退出就重启
- unless-stopped:只要退出就重启,除非docker stop 或 docker kill 命令停止容器。
harbor私有镜像中心[HTTP]
一般私有镜像中心是一台换门的服务器,不用做平时Docker容器的运行管理。其他要对其进行push或pull操作的Docker主机称为Docker客户端。
Harbor 是Go语言开发的一款Registry server 开源项目,在Docker Registry 的基础上进行二次封装。作为一个企业级私有Registry服务器,Harbor提供更好的性能和安全,也提供了方便的web管理界面。
安装Harbor
下载安装包
wget https://github.com/goharbor/harbor/releases/download/v2.6.2/harbor-offline-installer-v2.6.2.tgz
解压安装包
tar -zxvf harbor-offline-installer-v2.6.2.tgz -C /opt/apps/
修改harbor.yml
复制一份harbor解压包中的harbor.yml.tmpl 并重命名为harbor.yml
cp harbor.yml.tmpl harbor.yml
- 修改harbor.yml三个地方:
- 将hostname 指定为当前主机IP
- 注释掉所有https相关配置
- 修改admin用户的密码
运行prepare
在harbor解压目录中运行prepare命令。该命令会先拉取prepare镜像,然后生成很多的配置文件。
./prepare
运行 install.sh
在harbor解压目录中运行install.sh命令,其会自动完成五步的安装过程,并最后启动很多容器。
./install.sh
此时就可以通过http://IP 进行访问了。

Habor 的启停
Harbor是由10个容器同时运行完成的,而且是同福哦docker-compose完成的容器编排。
Harbor安装完后会在解压目录下生成docker-compose.yml文件,所以Harbor的启停命令都是由docker-compose完成的,且需要在Harbor的解压目录中完成。
docker compose stop # 停止 docker compose up -d # 启动
Docker客户端操作
- 修改daemon.json文件
- Docker客户端默认采用https请求,但私有镜像中心不接收https请求。需要手动修改Docker客户端的/etc/docker/daemon.json文件。

重启Docker引擎
systemctl restart docker
登录私有镜像中心,输入用户名和密码
docker login 192.168.192.101
复制并重命名镜像
通过docker tag 对镜像进行复制并重命名。
重命名镜像的<repository>中采用<domain-name>/<project-name>/<software-name>
如果要区分用户,也可以采用<domain-name>/<project-name>/<username>/<software-name>
docker tag hello-my-world 192.168.192.101/test/admin/hmyw:1.0
推送镜像
docker push 192.168.192.101/test/admin/hmyw:1.0
此时镜像推送完成
登出私有镜像中心
docker logout 192.168.192.101
到此这篇关于Docker--搭建私有镜像中心Harbor的文章就介绍到这了,更多相关Docker私有镜像中心Harbor内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
基于Docker、Nginx和Jenkins实现前端自动化部署
本文主要介绍了搭建Docker+Nginx+Jenkins环境,用于实现前端自动化部署的流程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2021-07-07


最新评论