在 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拉取鏡像