公有镜像中心的搭建和使用
1 )在 官方docker镜像中心推送
-
在 hub.docker.com 上注册账号 (国内一般访问不了,原因不多说)
-
找到 Create Repository 按钮就行仓库的创建
-
这样就在官方创建了一个仓库,比如地址为: xx/y-y
- xx 是我的账户名
- y-y 是刚创建的仓库名
-
现在,我将本地的docker镜像,推送到这个仓库里
- 没有登录过,先使用 docker login 进行登录
- 假设本地的 nginx:latest 镜像,现在我要对其进行打一个新的tag
- $
docker tag nginx xx/y-y:latest
- 之后,将其推送到远程
- $
docker push xx/y-y:latest
-
如果 hub.docker.com 在国内无法访问,可以在阿里云上创建 docker hub
-
为官方docker镜像中心加速
-
配置国内 Docker 镜像源 $
vi /etc/docker/daemon.json
conf{ "registry-mirrors": ["https://registry.docker-cn.com"], "live-restore": true }
-
配置之后,需要重启 $
systemctl restart docker
2 )在阿里云docker镜像中心搭建
- 在阿里云控制台,选择 容器镜像服务
- 为何选择阿里云,因为当你下载的时候,会走cdn来加速
- 进入实例列表,有两种,个人版和企业版本
- 可以选择个人版实验一下,创建后,在 仓库管理/镜像仓库即可进行管理
搭建私有镜像中心
- 我们现在用的私有docker镜像中心是JCR,也就是 JFrog Container Registry
- 这个和开源的harbor有点类似,但是这个比harbor更加的好用,更加的强大
- 因为它不仅能管这个通用仓库,还有helm仓库,harbor是没有通用类型仓库的
整体架构图如下
- docker client 连接的是 JCR, JCR 一般连的是 docker.io/library 这个远程
- JCR 是部署在本地私有环节中的, JCR 对外除了连接官方的,还可以连接阿里云容器服务
- JCR 在这里做了一个远程代理的作用,JCR里面可以有多种不同的仓库
安装 JCR (JFrog Container Registry)
1 )准备工作
-
在 master 节点上执行以下命令
- 设置环境变量
-
$
vi ~/.bash_profile
增加 JFROG_HOME 环境变量confexport JFROG_HOME=~/jfrog
-
$
source ~/.bash_profile
生效
-
- 设置目录和文件
- $
sudo mkdir -p $JFROG_HOME/artifactory/var/etc
- $
cd $JFROG_HOME/artifactory/var/etc
- $
sudo touch ./system.yaml
- $
sudo chown -R 1030:1030 $JFROG_HOME/artifactory/var
- $
sudo chmod -R 777 $JFROG_HOME/artifactory/var
- 如果觉得这些麻烦,可以用以下的方法
- $
sudo docker volume create data_artifactory
- $
sudo docker volume inspect data_artifactory
- $
sudo docker run --name jfrog-artifactory-jcr -d --rm -v data_artifactory:/var/opt/jfrog/artifactory ...
- 这里省略,下面会有命令补充
- $
- $
- 运行docker
- docker 镜像可以先行下载,比较大
- $
docker pull releases-docker.jfrog.io/jfrog/artifactory-jcr:7.4.3
- 注意,这个镜像在 Mac 上正常运行,在 centos 9 上会有问题
- 后续较新的版本,在运行上也可能会有问题,此处在Mac上演示
- 其他版本,我试过,挺恶心的,一堆报错,包括最新版,不知道缺了啥
- 按照官方下载 jcr 版本的 Linux版自行安装, 不再赘述,有问题,找官方和社区
- $
docker run --name artifactory-jcr -v $JFROG_HOME/artifactory/var/:/var/opt/jfrog/artifactory -d -p 8081:8081 -p 8082:8082 releases-docker.jfrog.io/jfrog/artifactory-jcr:7.4.3
- $
sudo docker ps | grep jcr
查看运行状态
- 设置环境变量
-
注意,目前我的 JCR服务 是搭建在 Mac上的,不是 Centos 上的
-
这点需要说明(因为版本在Centos9上报错),现在就当它是服务器(Centos),先修改下相关配置
-
现在 master节点和 work 节点都应该可以正常访问 Mac
-
Mac作为一台独立的服务器,都先修改相关配置
-
在各台机器上,加入Mac的ip地址,修改hosts文件(Mac自身也要同时做此修改)
conf10.211.10.2 art.local
- 这是 JCR 服务器的ip地址,目前在我的机器上是 Mac的地址
-
接着,开始配置Docker insecure registry,(在 JCR服务器和其他服务节点都要一起配置)
-
$
vi /etc/docker/daemon.json
这个在服务器上执行,如果是Mac上,打开自己的Docker Desktop 进行修改conf{ "insecure-registries": ["art.local:8081"] }
- 加入如上 insecure-registries 的配置项
- 在 Mac Docker Desktop 上点击 Apply & restart 按钮
- 在服务器上执行 $
systemctl restart docker
- 以上操作,比较敏感,请谨慎操作,会导致所有docker服务暂时不可用
-
最后,可能还需要重新启动 JCR 容器服务
-
再次查看 docker 容器的运行状态 $
docker logs jfrog-artifactory-jcr
conf############################################################### ### All services started successfully in 38.044 seconds ### ###############################################################
- 发现有如下输出,则JCR服务全部启动起来了
2 ) 配置
2.1 访问 localhost:8081
2.2 之后,自动跳转,这个是 loading 界面
2.2 之后,继续跳转到登录界面
- 输入账号和密码: admin/password 之后进入下图
- 点击 Get Started 进入下个界面,先阅读服务条款,滚动窗口
- 之后选中 I have read and agree to the terms and conditions stated in the EULA. 复选框
- 点击 Next 进入下一个界面,这个邮箱输入可以不用填,不是必选项
- 点击 Next 进入重置密码界面,输入自己的新密码
- 点击 Next 进入设置baseUrl的地址界面,非必填项,可不修改
- 点击 Next 进入设置Default Proxy界面,非必填项,可不修改
- 点击 Next 进入创建仓库界面,选中下面三个
- 点击 Next 进入 Summary 界面
- 这里有:docker 本地仓库,docker远程仓库,docker虚拟仓库,点击 Finish 按钮,进入
-
进入上个界面之后,需要执行 $
docker login art.local:8081
输入账号和密码 -
如果出现,如下信息,则成功创建好了私有镜像仓库
confUsername: admin Password: Login Succeeded
-
好,现在登录 JCR 并创建 5 个仓库
-
分别创建: docker-local, docker-test, docker-release, docker-remote 和 docker virtual 仓库
- docker-local 是开发用的
- docker-test 是测试团队用的
- docker-release 是发布生产运维用的
- docker-remote 是代理远程的,比如 docker hub 或 ali registry
- docker virtual 是统一的docker虚拟仓库,能访问底层的上述四种仓库
-
上述界面,左侧菜单是是个tab栏,点击设置图标切换到 admin 版
-
展开 Repositories 菜单,对应路由是: /ui/admin/repositories/local
- 点击 New Local Repository 创建另外的2个仓库: docker-test, docker-release
- 目前,我们进入到 Virtual 卡片栏点击 docker,将我们刚创建的2个仓库加入
- 加入
- 加入后
- 基于以上,仓库就创建好了
- 备注,如果有多个 remote 仓库,registry 栏自行添加, 不再赘述
将镜像推送到私有镜像中心
-
我们可以把本地的镜像推送到上面的私有镜像中心去,我们自己的项目也可先打包成镜像
-
需要两步,用我们本地的 alpine:latest 来演示
- 本地进行tag打包
- $
docker tag alpine:latest art.local:8081/docker-local/alpine:1.0
- $
- 之后进行push, 注意要在 login 之后进行 push
-
$
docker push art.local:8081/docker-local/alpine:1.0
confThe push refers to repository [art.local:8081/docker-local/alpine] 8d3ac3489996: Pushed 1.0: digest: sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3 size: 528
-
- 本地进行tag打包
-
现在已经推送上去了,进入页面查看
- 切换到 Docker Info 界面,可见更多信息
- 同时,可以再 Properties 栏添加自定义属性,标签
- 如果后期都没有问题了,可以再这个界面,拷贝到测试环境中去
- 这样,逐级迁移(测试->生产)即可,这是拆分仓库的好处