温馨提示×

ubuntu上docker镜像如何共享

小樊
43
2025-11-30 17:08:53
栏目: 智能运维

Ubuntu 上 Docker 镜像共享的常用方式

  • 离线导出导入 tar 包:用 docker save 导出为 .tar,通过 scp/rsync/USB 拷贝到目标机,再用 docker load 导入。适合无公网、跨网络或临时环境。
  • 搭建本地私有仓库 Registry:在局域网一台主机运行 registry:2,其他主机 docker tag + docker push/pull 共享,适合团队与持续交付。
  • 推送到公共或私有镜像仓库:如 Docker Hub云厂商仓库或企业仓库,便于版本化分发与协作。

方式一 离线导出导入 tar 包

  • 在源主机导出镜像
    • 命令:docker save -o myapp.tar myapp:latest
    • 说明:将镜像保存为 tar 归档,保留 仓库名:标签 与历史层信息。
  • 拷贝到目标主机
    • 命令:scp myapp.tar user@192.168.1.10:/tmp/(示例)
  • 在目标主机导入
    • 命令:docker load -i /tmp/myapp.tar
    • 校验:docker images | grep myapp
  • 补充
    • 也可使用管道直接传输:docker save myapp:latest | ssh user@host docker load
    • 若镜像较大,可用压缩流:docker save myapp:latest | gzip > myapp.tar.gz,目标机:gunzip -c myapp.tar.gz | docker load
    • 以上流程适用于 Ubuntu 及其他 Linux 发行版,且 docker load 支持从 tar(含 gzip/bzip2/xz 压缩)归档恢复镜像与标签。

方式二 搭建本地私有仓库 Registry

  • 在仓库主机 A(示例 IP 192.168.49.160)启动 Registry
    • 命令:docker run -d -p 5000:5000 --restart=always --name registry registry:2
    • 说明:默认数据目录为容器内 /var/lib/registry
  • 为镜像打标签(指向仓库主机)
    • 命令:docker tag ubuntu:18.04 192.168.49.160:5000/ubuntu:18.04
  • 推送与拉取
    • 推送:docker push 192.168.49.160:5000/ubuntu:18.04
    • 拉取:docker pull 192.168.49.160:5000/ubuntu:18.04
  • 查看仓库内容
    • 命令:curl http://192.168.49.160:5000/v2/_catalog
  • 允许局域网其他主机访问(HTTP 场景)
    • 在 A 与 B 的 /etc/docker/daemon.json 中加入:
      • { “insecure-registries”: [“192.168.49.160:5000”] }
    • 重启 Docker:sudo systemctl restart docker
  • 说明
    • 生产环境建议使用 HTTPS + 证书;内网测试可用上述 insecure-registries 配置。

方式三 推送到公共或云镜像仓库

  • 登录仓库
    • 命令:docker login(Docker Hub 或云厂商仓库,按提示输入账号密码/令牌)
  • 规范命名并打标签
    • Docker Hub:docker tag myapp:latest <你的用户名>/myapp:latest
    • 云厂商(示例命名):docker tag myapp:latest .ocir.io///myapp:latest
  • 推送与拉取
    • 推送:docker push <你的用户名>/myapp:latest
    • 拉取:docker pull <你的用户名>/myapp:latest
  • 版本固定建议
    • 使用 镜像摘要(Digest) 拉取,确保不可变:docker pull ubuntu@sha256:

常见问题与建议

  • 镜像体积较大时,优先使用 gzip 压缩流 在导出/导入时减少传输时间与磁盘占用。
  • 内网共享强烈建议用 私有 Registry,便于权限控制、审计与自动化流水线集成。
  • 需要跨主机快速拷贝少量镜像时,使用 docker save | ssh docker load 可减少中间产物与步骤。
  • 推送前统一 镜像命名规范标签策略(如 latest 仅用于稳定版本),避免协作混乱。

0