1. Docker 官方仓库:https://hub.docker.com/
2. 阿里云仓库:https://cr.console.aliyun.com/cn-beijing/instances
3. 搭建本地仓库
进入https://hub.docker.com/,注册账号并登录
2.1 进入仓库管理页面,点击 Create Repository
2.2 输入仓库信息,我们选择私有仓库(官方允许创建一个免费的私有仓库使用)
2.3 创建完成,我们就拥有了一个私有的 Docker 仓库
3.1 选择此秘钥的操作权限,我们使用全部权限 Read,Write,Delete
3.2 点击Generate
,生成自己的私有秘钥
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
本次直接使用 hello-world
镜像
[root@shangliang ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 8 months ago 13.3kB
docker tag
命令打 tagdocker 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
使用 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
远程仓库已经有我们上传的 hub_docker:v1.0 版本
[root@shangliang ~]# docker rmi shlycsd/hub_docker:v1.0
Untagged: shlycsd/hub_docker:v1.0
Untagged: shlycsd/hub_docker@sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4
使用 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
成功完成镜像的上传与下载
退出登录命令:docker logout
[root@shangliang ~]# docker logout
Removing login credentials for https://index.docker.io/v1/
1.1 进入https://cr.console.aliyun.com/cn-beijing/instances,注册账号并登录
1.2 首先创建一个命名空间
1.3 创建镜像仓库,选择我们刚创建的命名空间,输入仓库信息
代码源使用本地仓库,后续我们通过命令行推送镜像到镜像仓库。
1.4 获取镜像仓库信息
主要获取两个地址,一个是登录使用的地址,另一个是远程仓库地址
1.5 设置登录密码
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
本次直接使用 hello-world
镜像
[root@shangliang ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 8 months ago 13.3kB
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
使用 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
远程仓库已经有我们上传的 ali_docker:v1.1 版本
[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
使用 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 ~]#
成功完成镜像的上传与下载
退出登录命令:docker logout
[root@shangliang ~]# docker logout registry.cn-beijing.aliyuncs.com
Removing login credentials for registry.cn-beijing.aliyuncs.com
我们使用官方提供的工具docker-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
默认端口 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
启动成功,返回 json 串 {"repositories":[]}
[root@shangliang ~]# curl http://localhost:5000/v2/_catalog
{"repositories":[]}
[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
可以查询到我们上传的 hello-world
[root@shangliang ~]# curl http://localhost:5000/v2/_catalog
{"repositories":["hello-world"]}
使用 curl http://localhost:5000/v2/hello-world/manifests/v1.0
查询详细信息
成功删除本地镜像,重新下载了远程镜像
[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
设置密码,前提是使用 TLS 证书在 HTTPS 环境,当前环境不具备相应条件。
有需要的请参考官方文档配置 https://docs.docker.com/registry/deploying/#restricting-access
本文完成从 0 到 1 的镜像仓库搭建。使用 Docker 官方镜像仓库、阿里云仓库、本地仓库 三种方式进行了镜像仓库搭建。如有问题请留言反馈!