「云原生 | Docker」手把手教你搭建镜像仓库并上传/下载镜像


一、选择镜像仓库

1. Docker 官方仓库:https://hub.docker.com/
2. 阿里云仓库:https://cr.console.aliyun.com/cn-beijing/instances
3. 搭建本地仓库

二、使用 Docker 官方仓库

1. 注册账号并登录

进入https://hub.docker.com/,注册账号并登录

2. 创建私有仓库

2.1 进入仓库管理页面,点击 Create Repository开始创建仓库
2.2 输入仓库信息,我们选择私有仓库(官方允许创建一个免费的私有仓库使用)
创建Docker仓库
2.3 创建完成,我们就拥有了一个私有的 Docker 仓库
完成Docker仓库创建

3. 设置私有秘钥

常见私有秘钥
3.1 选择此秘钥的操作权限,我们使用全部权限 Read,Write,Delete
选择权限,生成秘钥
3.2 点击Generate,生成自己的私有秘钥
获取私有秘钥

3. 登录 Docker 仓库

3.1 使用 docker login -u 用户名 进行登录,密码为我们上一节获取到的私有秘钥

[root@shangliang ~]# docker login -u 你的Docker仓库用户名
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

4. 上传镜像到 Docker 仓库

4.1 选择使用的镜像

本次直接使用 hello-world 镜像

[root@shangliang ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
hello-world       latest    feb5d9fea6a5   8 months ago   13.3kB

4.2 使用 docker tag 命令打 tag

docker tag 镜像ID或 名称:版本号
docker tag 名称:版本号 名称:版本号

[root@shangliang ~]# docker tag feb5d9fea6a5 hello-world:v1.0
[root@shangliang ~]# docker tag hello-world:latest hello-world:v2.0
[root@shangliang ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
hello-world       latest    feb5d9fea6a5   8 months ago   13.3kB
hello-world       v1.0      feb5d9fea6a5   8 months ago   13.3kB
hello-world       v2.0      feb5d9fea6a5   8 months ago   13.3kB

为远程仓库创建一个用户验证上传功能镜像
docker 默认使用 docker.io 仓库,使用该仓库不需要增加地址参数
docker tag 本地镜像名称:版本号 仓库账号/远程仓库名称:版本号

[root@shangliang ~]# docker tag hello-world:v1.0 shlycsd/hub_docker:v1.0
[root@shangliang ~]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
shlycsd/hub_docker   v1.0      feb5d9fea6a5   8 months ago   13.3kB

4.3 将镜像上传到远程仓库

使用 docker push 命令上传镜像到远程服务器

[root@shangliang ~]# docker push shlycsd/hub_docker:v1.0
The push refers to repository [docker.io/shlycsd/hub_docker]
e07ee1baac5f: Mounted from library/hello-world
v1.0: digest: sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4 size: 525

4.4 查看远程仓库

远程仓库已经有我们上传的 hub_docker:v1.0 版本
在这里插入图片描述

4.5 删除本地镜像

[root@shangliang ~]# docker rmi shlycsd/hub_docker:v1.0
Untagged: shlycsd/hub_docker:v1.0
Untagged: shlycsd/hub_docker@sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4

4.6 下载远程仓库镜像到本地

使用 docker pull 命令下载远程仓库的镜像

[root@shangliang ~]# docker pull shlycsd/hub_docker:v1.0
v1.0: Pulling from shlycsd/hub_docker
Digest: sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4
Status: Downloaded newer image for shlycsd/hub_docker:v1.0
docker.io/shlycsd/hub_docker:v1.0
[root@shangliang ~]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
shlycsd/hub_docker   v1.0      feb5d9fea6a5   8 months ago   13.3kB

成功完成镜像的上传与下载

5. 退出 Docker 仓库

退出登录命令:docker logout

[root@shangliang ~]# docker logout
Removing login credentials for https://index.docker.io/v1/

三、使用阿里云镜像仓库

1. 注册账号并登录

1.1 进入https://cr.console.aliyun.com/cn-beijing/instances,注册账号并登录
注册账号并登录
1.2 首先创建一个命名空间
创建命名空间
1.3 创建镜像仓库,选择我们刚创建的命名空间,输入仓库信息
在这里插入图片描述
代码源使用本地仓库,后续我们通过命令行推送镜像到镜像仓库。
在这里插入图片描述
1.4 获取镜像仓库信息
主要获取两个地址,一个是登录使用的地址,另一个是远程仓库地址
在这里插入图片描述
1.5 设置登录密码
设置登录密码

2. 登录 Docker 仓库

2.1 使用 docker login --username=用户名 登录地址 进行登录

[root@shangliang ~]# docker login --username=账号 registry.cn-beijing.aliyuncs.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

3. 上传镜像到 Docker 仓库

3.1 选择使用的镜像

本次直接使用 hello-world 镜像

[root@shangliang ~]# docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
hello-world       latest    feb5d9fea6a5   8 months ago   13.3kB

3.2 使用 docker tag 命令打 tag

Docker 默认使用 docker.io 仓库地址,如非默认地址,需要增加远程仓库地址信息
docker tag 镜像ID 远程仓库地址/命名空间/镜像名称:版本号

[root@shangliang ~]# docker tag hello-world:v2.0 registry.cn-beijing.aliyuncs.com/sl_ali_docker/ali_docker:v1.1
[root@shangliang ~]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED        SIZE
registry.cn-beijing.aliyuncs.com/sl_ali_docker/ali_docker   v1.1      feb5d9fea6a5   8 months ago   13.3kB

3.3 将镜像上传到远程仓库

使用 docker push 命令上传镜像到远程服务器

[root@shangliang ~]# docker push registry.cn-beijing.aliyuncs.com/sl_ali_docker/ali_docker:v1.1
The push refers to repository [registry.cn-beijing.aliyuncs.com/sl_ali_docker/ali_docker]
e07ee1baac5f: Pushed
v1.1: digest: sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4 size: 525

3.4 查看远程仓库

远程仓库已经有我们上传的 ali_docker:v1.1 版本
查看远程仓库

3.5 删除本地镜像

[root@shangliang ~]# docker rmi registry.cn-beijing.aliyuncs.com/sl_ali_docker/ali_docker:v1.1
Untagged: registry.cn-beijing.aliyuncs.com/sl_ali_docker/ali_docker:v1.1

3.6 下载远程仓库镜像到本地

使用 docker pull 命令下载远程仓库的镜像

[root@shangliang ~]# docker pull registry.cn-beijing.aliyuncs.com/sl_ali_docker/ali_docker:v1.1
v1.1: Pulling from sl_ali_docker/ali_docker
Digest: sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4
Status: Downloaded newer image for registry.cn-beijing.aliyuncs.com/sl_ali_docker/ali_docker:v1.1
registry.cn-beijing.aliyuncs.com/sl_ali_docker/ali_docker:v1.1
[root@shangliang ~]# docker images
REPOSITORY                                                  TAG       IMAGE ID       CREATED        SIZE
registry.cn-beijing.aliyuncs.com/sl_ali_docker/ali_docker   v1.1      feb5d9fea6a5   8 months ago   13.3kB
[root@shangliang ~]#

成功完成镜像的上传与下载

4. 退出 Docker 仓库

退出登录命令:docker logout

[root@shangliang ~]# docker logout registry.cn-beijing.aliyuncs.com
Removing login credentials for registry.cn-beijing.aliyuncs.com

四. 搭建本地镜像仓库

我们使用官方提供的工具docker-registry ,用于构建私有镜像仓库。

1 拉取 registry 镜像文件

当前最新版本为 2.0,默认拉取最新版本

[root@shangliang ~]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
2408cc74d12b: Pull complete
ea60b727a1ce: Pull complete
c87369050336: Pull complete
e69d20d3dd20: Pull complete
fc30d7061437: Pull complete
Digest: sha256:bedef0f1d248508fe0a16d2cacea1d2e68e899b2220e2258f1b604e1f327d475
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest

2 启动容器运行

默认端口 5000,可以通过参数 -e REGISTRY_HTTP_ADDR=0.0.0.0:8888 更改端口

[root@shangliang ~]# docker run -p 5000:5000 -d --restart=always --name registry2 registry:latest
3fcee330513345a49672e385e598c00f7b6bfad57221450c4bee522f62164a52

3 验证启动情况

启动成功,返回 json 串 {"repositories":[]}

[root@shangliang ~]# curl http://localhost:5000/v2/_catalog
{"repositories":[]}

4. 打 TAG 上传镜像到仓库

[root@shangliang ~]# docker tag hello-world:v1.0 localhost:5000/hello-world:v1.0
[root@shangliang ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:5000/hello-world v1.0 feb5d9fea6a5 8 months ago 13.3kB

5. 验证是否上传成功

可以查询到我们上传的 hello-world

[root@shangliang ~]# curl http://localhost:5000/v2/_catalog
{"repositories":["hello-world"]}

使用 curl http://localhost:5000/v2/hello-world/manifests/v1.0 查询详细信息

6. 删除本地镜像下载远程镜像

成功删除本地镜像,重新下载了远程镜像

[root@shangliang ~]# docker rmi localhost:5000/hello-world:v1.0
Untagged: localhost:5000/hello-world:v1.0
Untagged: localhost:5000/hello-world@sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4
[root@shangliang ~]# docker pull localhost:5000/hello-world:v1.0
v1.0: Pulling from hello-world
Digest: sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4
Status: Downloaded newer image for localhost:5000/hello-world:v1.0
localhost:5000/hello-world:v1.0
[root@shangliang ~]# docker images

7. 仓库加密

设置密码,前提是使用 TLS 证书在 HTTPS 环境,当前环境不具备相应条件。
有需要的请参考官方文档配置 https://docs.docker.com/registry/deploying/#restricting-access

五、总结

本文完成从 0 到 1 的镜像仓库搭建。使用 Docker 官方镜像仓库、阿里云仓库、本地仓库 三种方式进行了镜像仓库搭建。如有问题请留言反馈!

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值