目录
什么是 Docker Registry
镜像仓库生活案例
镜像仓库分类
镜像仓库工作机制
常用的镜像仓库
私有仓库
镜像仓库命令
镜像命令[部分]
容器命令[部分]
什么是 Docker Registry
定义:Docker Registry 负责存储、管理和分发镜像,并提供了登录认证能力,建立了仓库的索引。例如:
结构:
- 镜像仓库(Registry):确定镜像仓库的位置,通常通过 DNS 或 IP 地址,如 hub.docker.com。一个 Registry 中可以存在多个 Repository。
- Repository:特定 Docker 镜像的所有迭代版本组成的集合。Repository 可分为“顶层仓库”和“用户仓库”,用户仓库名称格式为“用户名/仓库名”。
- 镜像名称(name)+标签(tag):如 nginx:latest。
- 认证能力:提供用户注册、登录、登出功能。
- 索引:提供镜像的索引信息,便于检索。
镜像仓库生活案例
- 类比超市,一个 Repository 就是一个货架,不同的产品标签即为 tag。
镜像仓库分类
按是否对外开放:
- 公有仓库:如阿里云、DockerHub,无需登录即可下载镜像。
- 私有仓库:位于私有网络,仅限公司内部使用。
按供应商和面向群体:
- Sponsor Registry:供客户和 Docker 社区版使用。
- Mirror Registry:仅供客户使用,如阿里云需注册才能使用。
- Vendor Registry:由发布 Docker 镜像的供应商提供,如 Google 和 Redhat。
- Private Registry:仅供内部使用,无防火墙和额外安全层。许多大公司开发都有自己的私有仓库~
镜像仓库工作机制
1. 使用流程:
docker login
登录仓库docker pull
拉取镜像docker push
上传镜像
实际研发中的使用:
开发人员制作镜像并推送到公共或私有 Registry,供其他人员使用。
解释:
- 开发环境:开发人员使用的一套环境
- 测试环境:需求开发完成后,发布到供测试人员进行测试的环境
- 预发布环境:版本测试完成后,发布到和生产类似的环境,提前模拟生产发布
- 生产环境:真正面向客户的环境
拉取机制:
- 启动容器时,Docker 守护进程会尝试从本地获取镜像;若本地不存在,则从 Registry 下载并保存到本地。
常用的镜像仓库
1.DockerHub
功能:
- 注册私有仓库,发布镜像
- 提供镜像检索能力
- 提供官方和认证组织的镜像
- 支持从 GitHub 和 Bitbucket 自动构建并推送到 Docker Hub
- 支持 webhook
功能浏览:
- 镜像搜索
- 镜像 tag 查找
- 对应版本拉取命令
- 镜像大小、ID、CPU 架构查看
2. 国内镜像源
可以配置的镜像加速器:
- 阿里云加速器
- 网易云加速器
- 百度云加速器
配置方法:
- 编辑
/etc/docker/daemon.json
文件,添加镜像加速器地址 - 重启 Docker 服务
私有仓库
定义:部署在公司内部,用于存储和分发 Docker 镜像。
常见工具:
- Harbor:VMware 开源的企业级 Docker Registry,提供管理 UI、RBAC、AD/LDAP 集成、审计日志等功能。
- Nexus:Sonatype 发布的仓库管理软件,常用于 Maven 和 Docker 私服。
Docker Registry:Docker 官方提供的私有仓库,类似于 Docker Hub。(不更新了)
镜像仓库命令
1 命令清单:
docker login
:登录仓库docker pull
:拉取镜像docker push
:推送镜像docker search
:查找镜像docker logout
:登出仓库
2. 具体命令:
- docker login:
-
- 功能:登录到 Docker 镜像仓库
- 语法:
docker login [OPTIONS] [SERVER]
- 样例:
docker login -u 用户名 -p 密码
dockerhub 被 ban 了。。
- docker pull:
-
- 功能:拉取或更新指定镜像
- 语法:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
- 样例:
docker pull nginx:1.23.3
直接拉取hello-world
,可以看到其最终其实是拉取了docker.io/library/hello-world:latest
,前面的一长串是官方仓库的地址,而:latest
表示默认使用了最新版。
- docker push:
-
- 功能:上传本地镜像到仓库
- 语法:
docker push [OPTIONS] NAME[:TAG]
- 样例:
docker push myapache:v1
- docker search:
-
- 功能:从 Docker Hub 查找镜像
- 语法:
docker search [OPTIONS] TERM
- 样例:
docker search -f stars=10 nginx
- docker logout:
-
- 功能:登出 Docker 镜像仓库
- 语法:
docker logout [SERVER]
- 样例:
docker logout
镜像命令[部分]
- docker images:
-
- 功能:列出本地镜像
- 语法:
docker images [OPTIONS] [REPOSITORY[:TAG]]
- 样例:
docker images
,docker images ubuntu
- docker image inspect:
-
- 功能:查看镜像详细信息
- 语法:
docker image inspect [OPTIONS] IMAGE [IMAGE...]
- 样例:
docker image inspect nginx:1.23.3
- docker tag:
-
- 功能:标记本地镜像,归入某一仓库
- 语法:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
- 样例:
docker tag ubuntu:22.04 myregistry.com/myubuntu:22.04
通过docker tag可以给镜像打上一个新的标签,此处就给helllo-world镜像打了一个v1的标签。可以发现,打标签后,两者的image id是相同的,因为两者的镜像内容相同,只是名字不同。
docker tag还可以给镜像起别名,通过这种方式,给镜像名前面加上一串仓库路径,可以方便提交。
容器命令[部分]
- docker run:
-
- 功能:创建并运行新容器
- 语法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 样例:
docker run --name mynginx -d nginx:latest
,docker run -p 80:80 -v /data:/data -d nginx:latest
- docker ps:
-
- 功能:列出容器
- 语法:
docker ps [OPTIONS]
- 样例:
docker ps -a
博主还在研究科学上网,实战和具体的命令之后 ok 了再慢慢更新叭~