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
部分的支持,确保在修改配置后能够重新构建镜像。这种方式非常适合本地开发和测试环境,能够提高效率并避免不必要的网络拉取。
如果你在实践过程中遇到问题,欢迎在评论区留言讨论!
相关资源 • •