> 技术文档 > Docker镜像仓库_dockerhub国内仓库

Docker镜像仓库_dockerhub国内仓库

一、Docker Hub(公有仓库

Docker Hub官网:https://hub.docker.com/

目前 Docker 官方维护了一个公共仓库Docker Hub ,大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

如果你觉得拉取 Docker Hub 的镜像比较慢的话,我们可以配置一个镜像加速器,当然国内大部分云厂商都提供了相应的加速器,简单配置即可。

注册:你可以在 https://cloud.docker.com 免费注册一个 Docker 账号。

登录:通过执行docker login 命令交互式的输入用户名及密码来完成在命令行界 面登录 Docker Hub。

注销:你可以通过docker logout 退出登录。

二、阿里云镜像仓库www.aliyun.com

(https://cr.console.aliyun.com/cn-beijing/instances)

账号注册登陆后,搜“容器镜像服务”--->点“容器镜像服务”--->\"管理控制台\"--->\"个人实例\"--->\"创建命名空间\"--->\"创建镜像仓库\"--->选择仓库\"管理\"--->可以查看“操作指南”

附带了解:镜像加速器配置https://cr.console.aliyun.com/cn-beijing/instances/mirrors

根据操作指南进行进行的上传和下载

三、实验环境

都安装好Docker服务

四、Registry(私有仓库)

公司服务器大部分都是私网,为了安全和方便可以搭建私有仓库,而不用完全手动的去导入导出镜像,因为是局域网拉取速度非常快,可以节省带宽和大量时间。

公司会有大量的镜像,而且不仅仅是单台的dockerHost。我们需要有一个本地的共用的仓库,来实现多台dockerHost直接拉取镜像而不用手动的将镜像传来传去。

Registry服务端:

1、创建基于registry的私有仓库

用docker容器运行registry私有仓库服务

registry是官方打包好的服务,端口为5000,就像其他虚拟出来的web服务一样

这里我们使用的是registry:2版本,还有一个registry镜像,这两个没有什么大的区别。registry: 是用Python语言写的,registry:2使用Go 语言写的,理论上来说,registry:2这个版本运行更快些。

下载registry镜像:

docker pull registry:2

2、运行registry私有仓库服务

docker run -d --name registry --restart=always -p 5000:5000 -v /registry:/var/lib/registry registry:2

--restart=always: 设置容器的重启策略为“always”,即容器会在 Docker 守护进程启动时自动启动,或者在容器退出时自动重启

-v /registry:/var/lib/registry: 将主机上的 /registry 目录(如果没有此目录会自动创建)挂载到容器内的 /var/lib/registry 目录。Registry 会将镜像数据存储在这个目录中

Registry客户端:

1、下载一个镜像并给镜像添加标签(要上传的镜像名需要注明私有仓库的IP)

因为我们使用的私有镜像,在上传或下载的时候,都需要我们将镜像的名称直接重命名,要注明它私有仓库的IP地址:暴露端口。切记是必须,否则将识别不到仓库而上传或下载失败。

docker pull nginx:1.20

docker tag nginx:1.20 192.168.10.11:5000/nginx

docker images

2、编辑Docker配置文件(需指定私有仓库可以http方式访问)

因为docker默认是从dockehub上下载镜像的,需要在本地指定一下私有仓库的IP加端口,这是因为 Docker默认不允许非HTTPS 方式推送镜像。 如果没做这一步,会报HTTPS的错。

在客户机上编辑docker的配置文件,指定私有仓库地址

vim /etc/docker/daemon.json

添加:

,

 \"insecure-registries\":[\"192.168.10.11:5000\"]

重新加载systemd、重启Docker服务

systemctl daemon-reload

systemctl restart docker

上传镜像到仓库测试:

docker push 192.168.10.11:5000/nginx

3、查看Registry私有仓库镜像

Registry客户端:

查看Registry中所有镜像

curl -XGET http://192.168.10.11:5000/v2/_catalog

-XGET:指定 HTTP 请求方法为 GET(默认就是 GET,所以可以省略)

获取指定镜像(这里是 nginx)的所有标签列表

curl http://192.168.10.11:5000/v2/nginx/tags/list

Registry服务器端:

curl http://localhost:5000/v2/_catalog

4、客户端下载镜像

删除之前上传的镜像

docker rmi 192.168.10.11:5000/nginx:latest

docker pull 192.168.10.11:5000/nginx

docker images

五、Harbor(企业级私有仓库)

Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装。

它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计(用户都做了哪些操作)等功能。

Harbor安装有在线安装和离线安装

这里选用离线安装的方式

为了避免冲突,删除Registry仓库的所有配置

Registry服务端:

docker rm -f $(docker ps -aq)

docker rmi $(docker images -q)

rm -rf /registry/

Registry客户端:

docker rmi 192.168.10.11:5000/nginx:latest

Harbor服务端配置:

1、下载docker-compose工具

docker-compse工具的作用是编排镜像,可以像剧本一样把要做的事先规划好,例如要启动的镜像、镜像名字、运行机制、数据卷,实现更加便捷、快速。

harbor安装好之后会有一个docker-compose.yml文件,安装docker-compse工具就是为了支持这个功能从github上下载docker-compse工具(需vpn连接下载

下载地址:https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64

将docker-compose-linux-x86_64包上传到/root目录,移动并改名到/usr/local/bin/目录(直接下载到环境变量目录)

mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

增加可执行权限

chmod +x /usr/local/bin/docker-compose

查看版本号并验证命令可用性

docker-compose -v

2、Harbor离线模式安装

有在线和离线两种方式,考虑到网速原因,这里我们采用离线下载方式(需vpn连接下载)。

下载地址:https://github.com/goharbor/harbor/releases/download/v2.8.3/harbor-offline-installer-v2.8.3.tgz

将harbor-offline-installer-v2.8.3.tgz包上传到/root目录并将Harbor包解压到/usr/local/目录

tar xf harbor-offline-installer-v2.8.3.tgz -C /usr/local/

3、拷贝Harbor配置文件并修改

cd /usr/local/harbor/

cp harbor.yml.tmpl harbor.yml

vim harbor.yml

修改:

4、安装Harbor(安装完成后会自行启动)

./prepare   ——准备环境和生成配置文件

检查系统环境:验证 Docker 和 Docker Compose 是否已安装,并检查其版本是否满足要求。

生成配置文件:根据 harbor.yml 配置文件生成 Harbor 所需的实际配置文件。

初始化数据:为 Harbor 的数据库、Redis 等组件生成初始数据。

准备存储:根据配置准备 Harbor 的存储目录。

./install.sh       ——启动 Harbor 的所有服务容器

启动 Harbor 服务:根据 docker-compose.yml 文件启动 Harbor 的所有容器。

初始化 Harbor:完成 Harbor 的初始化工作,包括数据库、Redis、Registry 等组件的启动和配置。

验证安装:确保 Harbor 的所有服务正常运行。

5、查看容器状态

docker ps -a

harbor不能启动时,可能原因是关闭防火墙后,docker服务未重启,此时只要将docker服务重启即可

6、服务启动命令

启动服务(首次或重新启动)

docker-compose up -d

停止服务,不删除容器

docker-compose stop

重启服务

docker-compose restart

7、使用浏览器访问Harbor网站并登录

浏览器输入192.168.10.11

Harbor客户端配置

1、修改Docker配置文件

vim /etc/docker/daemon.json

修改:

注:指定多个私有仓库时的语法,  \"insecure-registries\": [\"192.168.10.11\",\"192.168.10.12\"]

重新加载systemd、重启Docker服务

systemctl daemon-reload

systemctl restart docker

2、客户端登录Harbor

docker login -u admin -p Harbor12345 192.168.10.11

3、上传私有镜像到Harbor

生成新镜像名称:

镜像名称要修改成:私有仓库ip/项目名称/镜像名称

docker tag nginx:1.20 192.168.10.11/library/nginx

docker images

docker push 192.168.10.11/library/nginx

4、查看上传到Harbor的镜像

5、客户端下载镜像

删除镜像

docker rmi 192.168.10.11/library/nginx

docker images

docker pull 192.168.10.11/library/nginx

docker images