在 Docker 中,镜像的推送(push
)和拉取(pull
)是通过与**Docker 镜像仓库(Registry)**交互完成的。默认仓库是 Docker Hub,但你也可以使用私有仓库(Harbor、Nexus、AWS ECR 等)。
一、核心命令
操作 | 命令示例 | 说明 |
---|---|---|
登录仓库 | docker login | 登录 Docker Hub 或私有仓库 |
标记镜像 | docker tag 源 目标 | 给镜像加目标仓库标识 |
推送镜像 | docker push 仓库/镜像名 | 上传镜像到仓库 |
拉取镜像 | docker pull 镜像名 | 从仓库下载镜像 |
二、推送镜像步骤详解
1. 登录仓库
docker login
默认是登录 Docker Hub。若使用私有仓库:
docker login your-registry.com
2. 给镜像打标签(tag)
假设本地有镜像:my-app:1.0
docker tag my-app:1.0 username/my-app:1.0
- 如果是私有仓库:
docker tag my-app:1.0 myregistry.com/dev/my-app:1.0
3. 推送镜像
docker push username/my-app:1.0
私有仓库:
docker push myregistry.com/dev/my-app:1.0
三、拉取镜像
docker pull username/my-app:1.0
私有仓库镜像:
docker pull myregistry.com/dev/my-app:1.0
四、常见私有仓库支持
仓库类型 | 地址示例 | 特点 |
---|---|---|
Docker Hub | docker.io | 默认公开仓库 |
Harbor | harbor.mycompany.com | 企业常用,权限+审计强 |
AWS ECR | xxxx.dkr.ecr.us-west-1.amazonaws.com/repo | 云端集成强 |
GitHub Packages | ghcr.io/用户名/镜像名 | GitHub CI/CD 一体化 |
五、查看和管理镜像
docker images # 查看本地镜像
docker rmi 镜像ID # 删除镜像
docker image ls # 同上
六、本地搭建镜像仓库(Registry)
docker run -d -p 5000:5000 --name registry registry:2
推送示例:
docker tag my-app localhost:5000/my-app
docker push localhost:5000/my-app
七、配置 Docker 信任私有仓库(非 HTTPS)
如果是 HTTP 仓库(如 localhost
或自建仓库),需修改:
vim /etc/docker/daemon.json{"insecure-registries": ["localhost:5000"]
}systemctl restart docker
八、进阶技巧
技巧/问题 | 说明 |
---|---|
镜像压缩推送慢 | 用 docker save + gzip 压缩传输 |
不用每次 login | 配置 ~/.docker/config.json |
CI/CD 自动推送 | Jenkins/GitLab CI 中嵌入 login 、push |
清理本地旧镜像 | docker image prune 自动清理 |
九、镜像导出/导入(离线推送)
# 导出镜像
docker save my-app:1.0 > my-app.tar# 拷贝到目标机器后导入
docker load < my-app.tar
十、总结一张图
docker tag docker push
本地镜像 --------------> myregistry.com/my-app:1.0 -------------> 镜像仓库镜像仓库 <--------------------------------------------- docker pull拉取镜像