介绍
本章节将涵盖在 Docker 环境中使用持久化数据存储(称为数据卷,Volumes)的方法。你将学习持久化数据存储的特性,例如内部卷与外部卷的区别,以及如何以及何时使用它们。
本章节将涵盖在 Docker 环境中使用持久化数据存储(称为数据卷,Volumes)的方法。你将学习持久化数据存储的特性,例如内部卷与外部卷的区别,以及如何以及何时使用它们。
数据卷是 Docker 中实现数据持久化的标准操作。在本节中,我将带你通过实际操作掌握数据卷的标准管理流程。
你的目标是使用 docker 命令创建一个名为 my-vol 的数据卷,并在该卷中添加一个名为 test.txt 的文件。
以下是你在完成此挑战后应能达到的效果示例:
my-vol 的数据卷。labex:~/ $ docker volume ls
DRIVER VOLUME NAME
local jenkins-data
local minikube
local my-vol
Mountpoint)。[
{
"CreatedAt": "2024-01-20T17:37:33+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
"Name": "my-vol",
"Options": {},
"Scope": "local"
}
]
test.txt 文件。root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## pwd
/var/lib/docker/volumes/my-vol/_data
root@iZj6cj604ytlr2cacq6vi2Z:/var/lib/docker/volumes/my-vol/_data## ls
test.txt
要完成此挑战,你需要:
docker 命令创建数据卷。root 用户创建文件。sudo su 切换到 root 用户,使用 sudo passwd root 设置 root 用户密码。在本节中,我们将使用 Docker 数据卷创建容器,并进行文件副本操作。
你的目标是创建一个名为 nginx-vol 的 Docker 数据卷,然后启动一个名为 nginx 的容器并挂载该卷,最后将 /home/labex/project/index.html 文件复制到 nginx 容器中。
以下是你在完成此挑战后应能达到的效果示例:
nginx-vol 的数据卷。labex:~/ $ docker volume ls
DRIVER VOLUME NAME
local jenkins-data
local minikube
local my-vol
local nginx-vol
nginx 的容器,将其 /usr/share/nginx/html 目录挂载到 nginx-vol 数据卷。labex:~/ $ docker ps | grep nginx
c39296aaf39e nginx "/docker-entrypoint.…" 35 seconds ago Up 31 seconds 80/tcp nginx
/home/labex/project/index.html 文件复制到 nginx 容器中。labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat index.html
hello world
nginx 容器。labex:/tmp/ $ docker exec nginx cat /usr/share/nginx/html/index.html
hello world
要完成此挑战,你需要:
docker 命令创建数据卷。在许多情况下,我们可能不习惯使用 Docker 管理的数据卷,而是直接使用宿主机的原生目录进行数据持久化(即绑定挂载)。在本节中,我们将使用宿主机目录来创建容器。
你的目标是创建一个使用「宿主机路径」(Host Path)的容器,然后将 /home/labex/project/nginx.txt 文件复制到容器中,并验证容器内的文件与宿主机路径中的文件是否一致。
以下是你在完成此挑战后应能达到的效果示例:
/tmp 目录下创建一个 nginx 目录。labex:/tmp/ $ ls | grep nginx
nginx
nginx 镜像启动 nginx-host 容器,将宿主机的 /tmp/nginx 目录挂载到容器内的 /usr/share/nginx/html 目录。labex:/tmp/ $ docker ps | grep nginx-host
6fc2d40e12df nginx "/docker-entrypoint.…" 44 seconds ago Up 43 seconds 80/tcp nginx-host
docker inspect 命令检查具体的挂载详情。"Mounts": [
{
"Type": "bind",
"Source": "/tmp/nginx",
"Destination": "/usr/share/nginx/html",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
/home/labex/project/nginx.txt 文件复制到 nginx-host 容器的 /usr/share/nginx/html 目录。labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat nginx.txt
hello nginx
labex:nginx/ $ docker exec nginx-host cat /usr/share/nginx/html/nginx.txt
hello nginx
/tmp/nginx 目录,确认是否存在 nginx.txt 文件。labex:nginx/ $ pwd
/tmp/nginx
labex:nginx/ $ cat nginx.txt
hello nginx
要完成此挑战,你需要:
cd、mkdir、touch 等。在容器化环境中,有时需要在容器之间共享数据。在这种情况下,可以使用多种技术来实现数据共享。本挑战将探索如何在容器之间共享数据。
你的目标是实现两个容器之间的数据共享。具体来说,你将使用「宿主机路径」启动容器 A,然后启动另一个容器 B 并挂载容器 A 的存储卷,最终实现两个容器之间的数据互通。
以下是你在完成此挑战后应能达到的效果示例:
/tmp/share 目录。labex:/tmp/ $ ls -ld /tmp/share
drwxr-xr-x 2 labex labex 4096 Jan 20 18:20 /tmp/share
nginx 镜像创建一个名为 nginx-share 的容器,并将本地 /tmp/share 目录挂载到容器内的 /usr/share/nginx/html 目录。labex:/tmp/ $ docker ps | grep nginx-share
216d02d94f39 nginx "/docker-entrypoint.…" 55 seconds ago Up 55 seconds 80/tcp nginx-share
busybox 镜像创建一个名为 busybox-share 的容器,并从 nginx-share 容器挂载卷。labex:/tmp/ $ docker ps | grep busy
30bf04aee681 busybox "sh" 43 seconds ago Up 42 seconds busybox-share
/home/labex/project/share.txt 文件复制到 busybox-share 容器。labex:/tmp/ $ pwd
/tmp
labex:/tmp/ $ cat share.txt
hello share
nginx-share 容器中是否存在该文件。labex:/tmp/ $ docker exec nginx-share cat /usr/share/nginx/html/share.txt
hello share
busybox-share 容器查看 share.txt 文件是否存在。labex:/tmp/ $ docker exec busybox-share cat /usr/share/nginx/html/share.txt
hello share
要完成此挑战,你需要:
cd、mkdir、touch 等。恭喜你完成了这次挑战!如果你现在已经能够熟练地在容器中使用存储卷,那就继续保持,迎接更多的挑战吧。