容器使软件工程更容易、更有效,而Docker容器很受欢迎,也很容易使用。
容器对于本地开发是必不可少的。它们让你在本地环境中测试你的应用程序,并开始建立所需的基础设施。
Docker容器本质上是不可改变的。这意味着重新启动一个容器会删除你在容器中存储的所有数据。但Docker提供了卷和绑定挂载,这是两种在Docker容器中持久化数据的机制。
本教程将教你如何将本地目录绑定到你的Docker容器上,并交替使用docker管理的卷。了解了这两点,你就能在更多的用例中使用Docker容器,从而提高你的工作效率。
如何使用本地目录挂载docker run -v
docker run命令首先在指定镜像上创建一个可写的容器层,然后开始使用指定的命令。(来源:docker.com)
使用参数-v ,可以绑定一个本地目录。
-v 或 ,允许你将本地目录和文件挂载到你的容器中。例如,你可以启动一个MySQL数据库并挂载数据目录,将实际数据存储在你挂载的目录中。--volume
# run mysql container in the background
$ docker run --name mysql-db -v $(pwd)/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:8.0.28-debian
# show content of data directory
$ ls -la datadir
total 383848
-rw-r----- 1 sebarthel staff 196608 Mar 26 22:47 #ib_16384_0.dblwr
-rw-r----- 1 sebarthel staff 8585216 Mar 26 22:47 #ib_16384_1.dblwr
drwxr-x--- 12 sebarthel staff 384 Mar 26 22:47 #innodb_temp
drwxr-xr-x@ 27 sebarthel staff 864 Mar 26 22:47 .
drwxr-xr-x 3 sebarthel staff 96 Mar 26 22:47 ..
-rw-r----- 1 sebarthel staff 56 Mar 26 22:47 auto.cnf
-rw-r----- 1 sebarthel staff 913 Mar 26 22:47 binlog.000001
(more directories)
# stop mysql container
docker rm -f mysql-db
绑定目录是一种双向的同步。你在主机上改变的每个文件都会在容器中改变,而容器中改变的每个文件都会在主机上改变。因此,如果你停止和启动数据库,你可以挂载同一个目录,你的配置和存储的数据将是可用的。
这种方法的优点是使用起来很直接,而且容易访问。你应该使用绑定的本地目录来存放你想在主机上改变或观察的文件,如配置文件和日志文件。
如何使用Docker卷来坚持改变
你可以使用Docker卷来代替绑定你的本地目录。Docker卷是你的Docker存储目录中的某个地方的一个目录,可以挂载到一个或多个容器。它们是完全可管理的,不依赖于某些操作系统的具体情况。
让我们创建一个Docker卷,并挂载它以持久保存MySQL数据:
# create volume
docker volume create mysql-data
# run mysql container in the background
$ docker run --name mysql-db -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
# stop mysql container
docker rm -f mysql-db
# remove volume
docker volume remove mysql-data
在移除Docker卷之前,你可以打开你的Docker GUI,通过点击data 标签来检查卷:

你会看到这些文件,但它们被隔离在Docker卷中。建议使用它们来持久化那些你不需要从主机系统观察或改变的文件。众所周知,这种方法比本地目录绑定有更好的性能。
总结
当你知道如何持久化你的数据,并且在停止容器时不丢失它们时,Docker容器会变得更加强大。
你通过提供Docker运行-v 参数将本地目录和卷与容器绑定。你需要给出绝对的本地路径或卷的名称,并将其映射到容器内的一个目录-v <source>:<target> 。
我希望你喜欢这篇文章。