Docker卷
在Docker的情况下,数据将存储在容器内。
当我们删除容器数据时,数据将会丢失。
在本教程中,我们将学习如何创建Docker卷,如何将其添加到容器以及在两个或者多个容器中如何共享相同的卷以存储数据。
为什么我们需要Docker的卷?
- 在删除容器上,卷不会被删除。
- 将音量连接或者分离给容器。
- 在不同的容器中共享卷(存储/数据)。
- 从存储中解耦容器。
- 存储在远程主机或者云上的音量。
我们可以拥有数据的逻辑划分以及容器。
我们可以以删除的方式保留数据
那么容器也将存在数据。
因此,在销毁容器后,我们可以将卷添加到任何现有容器以及新容器。
Docker卷入门
Docker Volume命令将显示我们可以创建卷的卷命令的详细信息,检查卷的详细数据,列出可用卷并删除卷。
# docker volume
创建Docker卷
创建Docker卷的语法是:
docker volume create <volume_name>
例子:
# docker volume create devops_volume
上面的命令将创建名为devops_volume的Docker卷。
列出Docker卷
要列出所有创建的Docker卷,请运行:
# docker volume ls
检查Docker卷
Docker Volume Inspect命令将为我们提供有关创建卷,位置,名称和范围的详细信息。
语法:
docker volume inspect <volume_name>
让我向我们展示名为devops_volume的Docker卷的详细信息。
# docker volume inspect devops_volume
创建包含添加卷的容器
语法:
docker container create --name <container_name> -it --mount source<volume_name>,target=/<folder_Name> <image_name>
例子:
# docker container create --name myBusyBox1 -it --mount source=devops_volume,target=/app busybox
要验证是否已创建容器,请使用docker ps -a命令:
启动容器
要启动新创建的容器,例如mybusybox1,运行:
# docker container start myBusyBox1
如上所述,在上面的屏幕截图中,容器mybusybox1已在8分钟前创建并启动6秒前。
从共享卷复制容器之间的文件
让我们创建一个方案,其中我们将在共享位置的一个容器中创建文件,我们将尝试从另一个容器访问该文件。
我们已经创建了一个名叫mybusybox1的容器。
让我们创建另一个,例如mybusybox2.
现在我们在运行状态,mybusybox1和mybusybox2中有两个容器。
让我们连接到第一个容器并在/app文件夹中创建一个文件。
# docker exec -it myBusyBox1 sh
上面的命令将带我们在容器内部。
然后,创建一个名为devops内部/app文件夹的新文件夹,然后退出第一个容器。
现在,将文件(例如index.html)复制到本地系统中的位置/app/devops/mybusybox1容器中的文件。
# docker container cp index.html myBusyBox1:/app/Devops
现在连接到另一个第二个容器:mybusybox2并验证Inside/app/devops文件夹index.html文件是否存在。
# docker exec -it myBusyBox2 sh
从上面的屏幕截图,确认两个容器都共享相同的体积。
我们可以使用下面的Docker卷Inspect命令检查卷的MountPoint位置:
# docker volume inspect devops_volume
如我们所见,MountPoint位置是/var/lib/docker/volumes/devops_volume/_data。
让我们转到MountPoint位置,并查看复制的文件是否可用。
在MountPoint位置,我们找到了相同的文件。
删除Docker卷
删除卷的语法是:
docker volume rm <volume_name>
让我们删除名为devops_volume的卷。
# docker volume rm devops_volume
在上面的屏幕截图中,我们正在尝试删除卷但无法删除,因为卷已经在使用中。
所以首先,我们需要杀死容器并免费制作卷。
然后我们可以删除卷。
为此,请先使用命令删除所有运行的容器:
# docker rm –f $(docker ps -aq)
然后删除卷:
# docker volume rm devops_volume
立即删除所有卷
使用Docker RM命令,我们可以一次删除一个卷。
如果我们有多个卷并希望删除所有卷,那么我们必须使用prune命令。
让我们创建一些卷:
现在使用命令一次删除所有Docker卷:
# docker volume prune