Docker 镜像导出、导入与使用本地镜像启动服务的完整指南

在开发和部署过程中,我们经常需要将 Docker 镜像从一台机器迁移到另一台机器,或者直接使用本地镜像启动服务,而无需从 Docker Hub 拉取镜像。本文将详细介绍如何导出、导入 Docker 镜像,如何使用本地镜像启动服务,以及后续的排查和修改步骤。


1. 导出 Docker 镜像

在源机器上,将本地镜像导出为 .tar 文件。

命令

docker save -o all_images.tar $(docker images -q)

说明

docker save -o all_images.tar:将所有镜像保存到 all_images.tar 文件中。 $(docker images -q):获取所有本地镜像的 ID。

示例

docker save -o all_images.tar dnmp-nginx:latest dnmp-php:latest dnmp-php80:latest

2. 导入 Docker 镜像

在目标机器上,将 .tar 文件中的镜像导入到本地。

命令

docker load -i all_images.tar

说明

docker load -i all_images.tar:从 all_images.tar 文件中导入镜像。

验证

导入后,运行以下命令查看本地镜像:

docker images

3. 使用本地镜像启动服务

docker-compose.yml 中,保留 build 部分的同时,添加 image 字段,确保优先使用本地镜像。

修改后的 docker-compose.yml

version: "3"
services:
  nginx:
    image: dnmp-nginx:latest  # 优先使用本地镜像
    build:
      context: ./services/nginx
      args:
        NGINX_VERSION: nginx:${NGINX_VERSION}
        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
        NGINX_INSTALL_APPS: ${NGINX_INSTALL_APPS}
    container_name: nginx
    ports:
      - "${NGINX_HTTP_HOST_PORT}:80"
      - "${NGINX_HTTPS_HOST_PORT}:443"
    volumes:
      - ${SOURCE_DIR}:/www/:rw
      - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw
    environment:
      TZ: "$TZ"
    networks:
      - default

  php:
    image: dnmp-php:latest  # 优先使用本地镜像
    build:
      context: ./services/php
      args:
        PHP_VERSION: php:${PHP_VERSION}-fpm-alpine
        CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
        PHP_EXTENSIONS: ${PHP_EXTENSIONS}
    container_name: php
    volumes:
      - ${SOURCE_DIR}:/www/:rw
    networks:
      - default

启动服务

docker compose up -d

跳过构建

如果本地镜像已存在,可以使用 --no-build 参数跳过构建步骤:

docker compose up -d --no-build

4. 修改配置后重新构建镜像

如果修改了配置(如 Dockerfile 或环境变量),可以重新构建镜像并启动服务。

重新构建镜像

docker compose build

启动服务

docker compose up -d

5. 常见问题排查

问题 1:无法拉取镜像(403 Forbidden)

原因

Docker Hub 对匿名用户和免费用户有一定的拉取限制。

解决方法

登录 Docker Hub

docker login

配置镜像加速器 修改 Docker 配置文件 daemon.json

{
  "registry-mirrors": [
    "https://<你的加速器地址>"
  ]
}

问题 2:本地镜像与配置不匹配

原因

本地镜像的配置与 docker-compose.yml 中的配置不一致。

解决方法

更新 docker-compose.yml 确保 image 字段中的镜像名称与本地镜像一致。 重新构建镜像 修改配置后,运行 docker compose build 重新构建镜像。

问题 3:端口冲突

原因

端口被其他服务占用。

解决方法

检查端口占用

netstat -tuln | grep <端口号>

修改 docker-compose.yml 中的端口配置


6. 总结

通过以上步骤,你可以轻松地导出、导入 Docker 镜像,并使用本地镜像启动服务。同时,保留 build 部分的支持,确保在修改配置后能够重新构建镜像。这种方式非常适合本地开发和测试环境,能够提高效率并避免不必要的网络拉取。

如果你在实践过程中遇到问题,欢迎在评论区留言讨论!


相关资源 Docker 官方文档 Docker Compose 官方文档


希望这篇博客对你有帮助!如果有其他问题或需要进一步优化,请随时联系我!

所有用户都可以去薅羊毛,192元充值200元话费!先到先得!导航栏话费充值,正规可靠,快充慢充自由选择。
欧阳逸资源站 » Docker 镜像导出、导入与使用本地镜像启动服务的完整指南

发表评论