「云原生 | Docker」手把手教你搭建镜像仓库并上传/下载镜像
时间:2023-07-17 20:37:00
教你如何携手搭建镜像仓库
- 首先,选择镜像仓库
- 二、使用 Docker 官方仓库
-
- 1. 注册帐号并登录
- 2. 创建私人仓库
- 3. 设置私钥
- 3. 登录 Docker 仓库
- 4. 上传镜像到 Docker 仓库
-
- 4.1 选用镜像
- 4.2 使用 `docker tag` 命令打 tag
- 4.3 将镜像上传到远程仓库
- 4.4 查看远程仓库
- 4.5 删除本地镜像
- 4.6 下载远程仓库镜像到本地
- 5. 退出 Docker 仓库
- 三、使用阿里云镜像仓库
-
- 1. 注册帐号并登录
- 2. 登录 Docker 仓库
- 3. 上传镜像到 Docker 仓库
-
- 3.1 选用镜像
- 3.2 使用 `docker tag` 命令打 tag
- 3.3 将镜像上传到远程仓库
- 3.4 查看远程仓库
- 3.5 删除本地镜像
- 3.6 下载远程仓库镜像到本地
- 4. 退出 Docker 仓库
- 四. 搭建本地镜像仓库
-
- 1 拉取 registry 镜像文件
- 2 启动容器运行
- 3 验证启动
- 4. 打 TAG 将镜像上传到仓库
- 5. 验证上传是否成功
- 6. 删除本地镜像,下载远程镜像
- 7. 仓库加密
- 五、总结
首先,选择镜像仓库
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 输入仓库信息,我们选择私人仓库(官方允许创建免费私人仓库)
2.3 创建完成后,我们有一个私人的 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
命令打 tagDocker 默认使用 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 官方镜像仓库、阿里云仓库、本地仓库 三种方式进行了镜像仓库搭建。如有问题请留言反馈!