Docker 镜像仓库操作指南
镜像仓库与注册中心概念解析
在 Docker 生态中,镜像仓库(Repository)是用于存储和组织容器镜像的逻辑单元。一个仓库通常包含同一软件的不同版本镜像,通过标签(tag)进行区分。而注册中心(Registry)则是托管这些仓库的服务实体,可以理解为存放多个仓库的服务器节点。例如,在地址 registry.example.com/nginx 中,registry.example.com 是注册中心主机名,nginx 是具体的镜像仓库名称。
公共镜像平台:Docker Hub
Docker Hub 是由 Docker 官方维护的全球性公共注册中心,用户可以通过其网页界面浏览、创建或删除公开/私有的镜像仓库。此外,它支持与 GitHub、GitLab 等代码托管平台集成,实现自动化构建流程。
国内加速配置建议
由于网络延迟问题,中国大陆用户访问官方 Registry 可能较慢。推荐使用国内第三方提供的 registry mirror 服务,如 DaoCloud、阿里云容器镜像服务等。配置方法通常是在 Docker 守护进程的启动参数中添加 --registry-mirror 指令,或将镜像源写入 /etc/docker/daemon.json 文件以持久化设置。
官方镜像与社区镜像区别
官方镜像(Official Images)由 Docker 团队审核并维护,命名简洁,不带用户名前缀,例如 ubuntu、nginx,其完整路径为 docker.io/library/ubuntu。这类镜像通常基于最小化系统构建,安全性和兼容性较高。相比之下,社区镜像由普通用户上传,命名格式为 用户名/仓库名,如 anliven/myapp,适用于特定场景定制,但需注意来源可信度。
自动化构建机制
Docker Hub 提供 Automated Builds 功能,允许将用户的代码仓库与镜像构建过程绑定。当目标 Git 仓库中的代码发生提交时,系统会自动触发构建任务,生成新的镜像并推送到指定仓库。启用该功能需要以下步骤:
- 登录 Docker Hub 并授权连接 GitHub/GitLab 账号;
- 创建自动构建项目,选择对应的代码仓库及分支;
- 指定 Dockerfile 所在路径(默认为根目录);
- 保存后即可在构建日志页面查看每次执行状态。
常用命令行操作
docker images # 列出本地已下载的所有镜像
docker search # 在注册中心搜索可用镜像
docker pull # 从远程仓库拉取镜像到本地
docker login # 登录到指定的镜像注册中心
docker push # 将本地镜像推送至远程仓库
示例一:搜索与拉取镜像
[root@host ~]# docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Debian-based Linux 5919 [OK]
rastasheep/ubuntu-sshd SSH-enabled Ubuntu 81 [OK]
[root@host ~]# docker pull ubuntu:20.04
Pulling from library/ubuntu
Digest: sha256:abc123...
Status: Downloaded newer image
[root@host ~]# docker images ubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 6a2f32de169d 2 weeks ago 117MB
ubuntu 20.04 302fa07d8117 2 weeks ago 188MB
示例二:登录镜像仓库
[root@host ~]# docker login
Username: anliven
Password: ********
Login Succeeded
# 认证信息将加密保存于 ~/.docker/config.json
[root@host ~]# ls -la .docker/
total 8
drwx------ 2 root root 24 Apr 28 10:32 .
dr-xr-x--- 18 root root 4096 Apr 28 10:32 ..
-rw------- 1 root root 99 Apr 28 10:32 config.json
示例三:推送自定义镜像
[root@host ~]# docker images
REPOSITORY TAG IMAGE ID SIZE
hello-world latest 48b5124b2768 1.84kB
# 给镜像打上用户命名空间标签
[root@host ~]# docker tag 48b5124b2768 anliven/hello-world:test
[root@host ~]# docker images
REPOSITORY TAG IMAGE ID SIZE
anliven/hello-world test 48b5124b2768 1.84kB
hello-world latest 48b5124b2768 1.84kB
# 推送至 Docker Hub
[root@host ~]# docker push anliven/hello-world:test
The push refers to repository [docker.io/anliven/hello-world]
test: digest: sha256:c55157... size: 524
# 验证是否可被搜索到
[root@host ~]# docker search anliven/hello-world
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
anliven/hello-world 0