在 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
您会发现同一个文件也存在那里。
总而言之,如果您为项目维护多个容器,并且希望所有容器都有一个共享目录或卷,则可以使用本文中提到的步骤挂载一个新卷。