Docker 容器内修改保存

什么是 Docker 容器?

Docker 是一个开源的容器化平台,可以将应用程序及其依赖打包成一个容器,实现快速、可靠地部署和运行。容器是一个独立的、可执行的软件包,包含了运行所需的所有文件、库、环境变量等。

Docker 容器的特点

  • 轻量级:Docker 容器与宿主机共享操作系统内核,不需要额外的虚拟机系统,因此非常轻量级。
  • 可移植性:Docker 容器可以在不同的操作系统上运行,而不需要担心依赖包的问题。
  • 快速启动:与传统的虚拟机相比,Docker 容器的启动速度非常快。
  • 简化部署流程:通过 Docker 容器,可以轻松地将应用程序及其依赖打包成一个镜像,部署到任意环境中。

Docker 容器内修改保存的挑战

在 Docker 容器中,应用程序及其依赖通常以镜像的形式提供,容器是从镜像中创建出来的。当我们修改了容器内的文件或者配置,我们希望这些修改能够保存下来,以便下次使用。然而,Docker 容器的设计初衷是临时性的,容器内的改动通常不会被保存下来。

持久化数据卷

为了解决容器内修改保存的问题,Docker 提供了持久化数据卷的功能。数据卷是一个特殊的目录,可以绕过容器的文件系统,直接将改动保存到主机上。这样,即使容器被删除或者重新创建,数据卷中的内容仍然可以被保留。

Docker 提供了多种方式来创建和使用数据卷:

  1. 在运行容器时创建数据卷:使用 -v 或者 --mount 参数可以在运行容器时创建数据卷,并将其挂载到容器的指定路径上。
docker run -v /path/on/host:/path/in/container image
  1. 使用 Dockerfile 创建数据卷:在 Dockerfile 中使用 VOLUME 指令可以创建一个或多个数据卷。
VOLUME /path/in/container
  1. 使用 docker volume 命令创建数据卷:使用 docker volume create 命令可以创建一个匿名数据卷,使用 docker volume create --name <volume_name> 命令可以创建一个具名数据卷。
docker volume create --name myvolume

示例:使用数据卷保存 MySQL 数据

下面我们通过一个示例来演示如何使用数据卷保存 MySQL 数据。

  1. 创建一个具名数据卷
docker volume create --name mysql_data
  1. 运行 MySQL 容器,并将数据卷挂载到 /var/lib/mysql 目录中
docker run -d -p 3306:3306 -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password mysql

这样,MySQL 容器中的数据将会保存在 mysql_data 数据卷中。

数据卷容器

除了直接将数据卷挂载到容器中,我们还可以使用数据卷容器来存储数据。

  1. 创建一个数据卷容器
docker run -v /var/lib/mysql --name mysql_data_container busybox
  1. 运行 MySQL 容器,并将数据卷从数据卷容器中挂载到 /var/lib/mysql 目录中
docker run -d -p 3306:3306 --volumes-from mysql_data_container -e MYSQL_ROOT_PASSWORD=password mysql

这样,通过数据卷容器,我们可以将数据卷和应用容器分离,实现更好的解耦。

关系图

下面是一个使用 Docker 容器内修改保存的关系图示例:

erDiagram
    Docker --> 容器
    Docker --> 数据卷
    容器 --> 数据卷
    数据卷 --> 数据卷容器