在 Docker 容器内挂载卷


在一些项目中,可能会遇到这样的场景:您为项目的不同部分创建了多个容器,并且其中一些容器也共享一些公共文件。现在,您希望在所有容器之间创建一个共享目录,以便所有容器都可以访问该目录或卷,并从任何容器更改该目录中的文件。

您可以通过创建卷并将其挂载到所有容器来实现。这样做,所有容器将共享访问该特定卷,并且您将能够访问和修改该卷中的文件。

在本文中,我们将创建一个卷并将其挂载到两个不同的容器。然后,我们将在卷内创建一个文件,并通过这两个容器访问同一个文件。我们还将尝试删除容器,然后通过另一个容器访问同一个文件。

步骤

要显示所有现有的卷,请使用以下命令。

sudo docker volume ls

现在,使用以下命令创建一个新的卷(例如,tutorialspoint)。

sudo docker volume create tutorialspoint

您还可以使用以下命令检查刚刚创建的卷。

sudo docker volume inspect tutorialspoint

现在,我们将使用基本镜像 ubuntu 创建一个容器(例如,container01),并将 tutorialspoint 卷挂载到该容器,并使用 bash 访问该容器。

sudo docker run -it -v tutorialspoint:/sharedVol --name container01 ubuntu

在上述命令中,-i 标志用于在交互式 shell 中显示 bash,-v 标志用于将您刚刚创建的 tutorialspoint 卷挂载到名为 sharedVol 的新目录,该目录在 container01 内创建。

现在,我们将尝试通过容器的 bash 在 /sharedVol 目录中创建一个新文件。在 bash 中,依次键入以下命令。

ls
cd /sharedVol
echo “Welcome to docker tutorialspoint” > dockertutorials.txt
ls
exit

ls 命令将列出容器内的所有目录。您还将在那里找到 sharedVol 目录。移动到该目录并创建一个文件(dockertutorials.txt),其中包含消息“欢迎使用 docker tutorialspoint”。使用 ls 命令检查文件是否已创建。

现在,退出 bash。创建另一个容器(例如,container02)并将相同的卷也挂载到那里。

sudo docker run -it -v tutorialspoint:/sharedVol --name container02 ubuntu

在此容器的 bash 中,转到 sharedVol 目录,您将找到在 container01 中创建的文件。您可以使用以下命令。

cd sharedVol
ls
cat dockertutorials.txt
exit

现在,如果您删除这两个容器并创建一个新容器并挂载 tutorialspoint 卷,您将找到在那里创建的文件。让我们使用以下命令尝试一下。

sudo docker rm -f container01 container02
sudo docker ps -a
sudo docker run -it -v tutorialspoint:/sharedVol --name container03 ubuntu

以上命令删除了这两个容器,列出了现有的容器以验证容器是否已删除,并创建了一个新的 ubuntu 镜像容器 container03 并将 tutorialspoint 卷挂载到其中。

ls
cd sharedVol
ls
cat dockertutorials.txt

您会发现同一个文件也存在那里。

总而言之,如果您为项目维护多个容器,并且希望所有容器都有一个共享目录或卷,则可以使用本文中提到的步骤挂载一个新卷。

更新于: 2020-10-01

1K+ 阅读量

开启您的 职业生涯

通过完成课程获得认证

立即开始
广告