
Docker 简介
Docker 是一个开源的容器化平台,用于打包、部署和运行应用程序及其依赖环境。Docker 容器是轻量级的虚拟化单元,运行在宿主机操作系统上,通过隔离机制(如命名空间和控制组)确保应用运行环境的一致性和可移植性。Docker 的核心组件包括:
- Docker Engine:运行和管理容器的核心服务。
- Docker Image:只读模板,包含应用及其依赖,用于创建容器。
- Docker Container:镜像的运行实例。
Docker Compose 简介
Docker Compose 是 Docker 提供的一个工具,用于定义和运行多容器应用程序。它通过一个 YAML 文件(通常命名为 docker-compose.yml)来描述多个容器、服务、网络和卷的配置,简化了多容器应用的部署和管理。Docker Compose 适合开发、测试和生产环境,特别适用于需要协调多个容器的场景。
Docker 与 Docker Compose 的区别
- 功能定位:
- Docker:核心容器运行时,专注于单个容器的创建、运行和管理。
- Docker Compose:用于管理和编排多个容器,简化多容器应用的配置和部署。
- 使用场景:
- Docker:适合运行单个容器或手动管理容器(如 docker run 启动单个容器)。
- Docker Compose:适合需要运行多个相互依赖的容器(如 Web 应用 + 数据库),通过单一命令(docker-compose up)启动整个应用栈。
- 配置文件:
- Docker:通过命令行参数或 Dockerfile 定义镜像和容器行为。
- Docker Compose:使用 docker-compose.yml 文件统一管理多个容器的配置。
- 命令差异:
- Docker:使用 docker run, docker build, docker ps 等命令操作单个容器。
- Docker Compose:使用 docker-compose up, docker-compose down 等命令操作整个服务栈。
在 Docker 和 Docker Compose 中导入导出容器
1. Docker 模式下导入导出容器
在纯 Docker 模式下,导入导出通常针对单个容器或镜像。
- 导出容器:
将运行中的容器导出为一个 tar 文件,包含容器文件系统快照(不包括数据卷)。docker export <container_name_or_id> > container.tar
示例:docker export my-container > my-container.tar
- 导入容器:
从 tar 文件导入容器,生成一个新的镜像,然后基于该镜像创建容器。docker import container.tar <image_name>:<tag>
示例:docker import my-container.tar my-image:latest docker run -d --name new-container my-image:latest
- 注意事项:
- 导出的 tar 文件只包含容器文件系统,不包括容器的配置(如端口映射、环境变量)。
- 如果需要保存镜像而非容器快照,可使用 docker save 和 docker load:
docker save -o image.tar <image_name>:<tag> docker load -i image.tar
2. Docker Compose 模式下导入导出容器
Docker Compose 管理的是多容器应用,导入导出通常涉及整个服务栈的镜像或配置,而非单个容器快照。
- 导出容器/镜像:
Docker Compose 本身没有直接的 export 命令,但可以通过以下方式保存所有相关镜像:- 列出 Compose 项目中的镜像:
docker-compose images
- 使用 docker save 导出所有镜像:
docker save -o compose-images.tar $(docker-compose images -q | sort -u)
- 复制 docker-compose.yml 文件和导出的 tar 文件到目标机器。
- 列出 Compose 项目中的镜像:
- 导入容器/镜像:
在目标机器上还原服务栈:- 导入镜像:
docker load -i compose-images.tar
- 确保 docker-compose.yml 文件在当前目录,运行 Compose:
docker-compose up -d
- 导入镜像:
- 注意事项:
- 确保 docker-compose.yml 文件与导出的镜像匹配(服务名称、镜像版本等)。
- 数据卷的数据需要单独备份(通过 docker volume 或手动复制),因为 docker save 不包含卷数据。
- 如果需要迁移数据卷,可使用工具如 docker volume backup 或手动复制卷挂载路径。
总结
- Docker 适合单容器操作,导出容器使用 docker export/import,导出镜像使用 docker save/load。
- Docker Compose 适合多容器应用,导出时保存所有镜像和 docker-compose.yml,导入时加载镜像并运行 Compose。
- 两者的核心区别在于 Docker 关注单个容器,Compose 关注多容器协同。导入导出时,需注意配置、数据卷和环境的完整性。