容器可以承载微服务,也可以承载数据库,微服务的配置文件,数据库的数据文件,都需要持久化,也就是即使容器销毁了,这些数据也需要存在。
一方面可以釆用手工方式用命令行拷贝,在容器很多的情况下,是不可取的。另一方面可以自动保存到宿主机或者远程存储上。
容器中将用于存储的文件目录称为卷(Volume),可见容器的存储便是对目录的操作。
可以直接将容器目录映射到主机目录,称为数据卷;也可以构建专门挂载数据卷的容器,称为数据卷容器。
1. docker cp命令
首先启动名称为dockervolumtest1的ubuntu环境,并以/bin/bash方式进入到容器。
root@linux:/home# docker run -it --name="dockervolumtest1" ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
125a6e411906: Pull complete
Digest: sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d
Status: Downloaded newer image for ubuntu:latest
root@51d152e09898:/# 进入到容器
再新建dockerdata1.log作为测试文件。
root@51d152e09898:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@51d152e09898:/# cd tmp
root@51d152e09898:/tmp# ls
root@51d152e09898:/tmp# touch dockerdata1.log
root@51d152e09898:/tmp# echo this is docker data test > dockerdata1.log
root@51d152e09898:/tmp# cat dockerdata1.log
this is docker data test
root@51d152e09898:/tmp#
使用docker cp命令在主机和容器进行数据拷贝。
命令格式:
docker cp 容器ID:/目录 主机目录
root@linux:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
51d152e09898 ubuntu "/bin/bash" 4 minutes ago Up 4 minutes dockervolumtest1
root@linux:/# docker cp 51d152e09898:/tmp /
root@linux:/# cd tmp
root@linux:/tmp# ls
dockerdata1.log
root@linux:/tmp# cat dockerdata1.log
this is docker data test
root@linux:/tmp#
2. 数据卷
使用docker run命令,并指定-v选项,便可在启动容器的时挂载数据卷;
命令格式1:
docker run -v /宿主机路径:容器内路径 镜像名
# 如指定的目录不存在,系统会自动创建
root@linux:/home# docker run -it --name="volummnttest1" -v /tmp/hostdir:/tmp/dockerdir ubuntu /bin/bash
root@ae1b5eda679d:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
# 新建测试文件volum.log
root@ae1b5eda679d:/# cd /tmp/dockerdir/
root@ae1b5eda679d:/tmp/dockerdir# ls
root@ae1b5eda679d:/tmp/dockerdir# touch volum.log
root@ae1b5eda679d:/tmp/dockerdir# echo this is a volum test > volum.log
root@ae1b5eda679d:/tmp/dockerdir#
新建命令窗口,查看Host宿主机的文件信息:
root@linux:/tmp/hostdir# ll
total 12
drwxr-xr-x 2 root root 4096 May 12 17:12 ./
drwxrwxrwt 16 root root 4096 May 12 17:11 ../
-rw-r--r-- 1 root root 21 May 12 17:13 volum.log
root@linux:/tmp/hostdir# cat volum.log
this is a volum test
root@linux:/tmp/hostdir#
命令格式2:docker run -v 容器内路径 镜像名
# 不指定主机目录,系统会默认存储在/var/lib/docker/volumes/容器ID目录
root@linux:/tmp/hostdir# docker run -it --name="volummnttest2" -v /tmp/dockerdir2 ubuntu /bin/bash
root@cf7f42544b8f:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@cf7f42544b8f:/# cd /tmp/
root@cf7f42544b8f:/tmp# ls
dockerdir2
root@cf7f42544b8f:/tmp#
新建命令窗口,查看volum2.log的相关信息:
root@linux:/# cd /var/lib/docker/
root@linux:/var/lib/docker# ls
buildkit containers image network overlay2 plugins runtimes swarm tmp trust volumes
root@linux:/var/lib/docker# cd volumes/
root@linux:/var/lib/docker/volumes# ls
9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b backingFsBlockDev metadata.db
root@linux:/var/lib/docker/volumes# cd 9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b/
root@linux:/var/lib/docker/volumes/9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b# ls
_data
root@linux:/var/lib/docker/volumes/9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b# cd _data/
root@linux:/var/lib/docker/volumes/9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b/_data# ls
volum2.log
root@linux:/var/lib/docker/volumes/9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b/_data# cat volum2.log
this is for volum2 test
root@linux:/var/lib/docker/volumes/9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b/_data#
也可通过docker inspect 容器ID,查看详情
3. 数据卷容器
首先启动容器volumedockertest
root@linux:/# docker run -it --name="volumedockertest" -v volumebase:/tmp/volumbasedata ubuntu /bin/bash
root@2933ebe42b98:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@2933ebe42b98:/# cd tmp
root@2933ebe42b98:/tmp# ll
total 12
drwxrwxrwt 1 root root 4096 May 12 09:50 ./
drwxr-xr-x 1 root root 4096 May 12 09:50 ../
drwxr-xr-x 2 root root 4096 May 12 09:50 volumbasedata/
再启动容器volumedockertest1,使用--volumes-from参数继承的volumedockertest数据卷。
root@linux:/# docker run -it --name="volumedockertest1" --volumes-from volumedockertest ubuntu /bin/bash
root@9ee901a1d422:/# ls
新建测试文件:
root@9ee901a1d422:/tmp/volumbasedata# echo this is test add data > basedata.log
root@9ee901a1d422:/tmp/volumbasedata#
宿主机查看文件
root@linux:~# cat /var/lib/docker/volumes/volumebase/_data/basedata.log
this is test add data
root@linux:~#
全部0条评论
快来发表一下你的评论吧 !