docker是将应用和环境打包成一个镜像,如果数据都在容器中,那么删除容器后,数据就丢失了,
容器之间有一个数据共享的技术,目录的挂载,即将容器内的目录,挂载到linux宿主机上
使用-v命令挂载数据卷
docker run -it -v 外部宿主机目录:容器内目录 要启动的镜像名称 /bin/bash
lh@lh-pc:~$ docker run -it -v /home/lh/test:/home centos /bin/bash
[root@deaea451f3a1 /]#
上述命令挂载完以后,我们宿主机上/home/lh/test目录下的所有修改会同步到容器内的/home目录,容器内/home下的内容,也会同步到宿主机的/home/lh/test目录。
查看容器的挂载内容
使用docker inspect 容器id 来查看
lh@lh-pc:~/test$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
deaea451f3a1 centos "/bin/bash" 27 minutes ago Up 27 minutes beautiful_williams
lh@lh-pc:~/test$ docker inspect deaea451f3a1

mysql同步数据
下载镜像
docker pull mysql:5.7
运行容器并做数据挂载,还需要配置mysql密码
-d 后台运行
-p 端口映射
-v 数据卷挂载
-e 环境配置
--name 容器名字
lh@lh-pc:~$ docker run -d -p 3310:3306 -v /home/mysql/config:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
c775e8129092ff4453b05976cda5d0c5680f71ab4bfff64ea3ffca650c4b82df
lh@lh-pc:~$
匿名挂在和具名挂载
匿名挂载
docker run -d -P --name nginx01 -v /etc/nginx nginx
lh@lh-pc:~$ docker volume ls
DRIVER VOLUME NAME
local b9611404bace9defeaa4661eaf05c229e66de4088662109040d5753de8c25bdd
local eb6a48aa076af428b1ae9b4fd69398e47a31d6c4e6d4cc44fe7fd0a8a18f7b60
具名挂载
lh@lh-pc:~$ docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
51e4211f79e90652034e7c1a3cbf6c7eead259e6d2dfcda27111bc9fb6b2f87a
lh@lh-pc:~$ docker volume ls
DRIVER VOLUME NAME
local b9611404bace9defeaa4661eaf05c229e66de4088662109040d5753de8c25bdd
local eb6a48aa076af428b1ae9b4fd69398e47a31d6c4e6d4cc44fe7fd0a8a18f7b60
local juming-nginx

查看下这个卷
lh@lh-pc:~$ docker volume inspect juming-nginx
[
{
"CreatedAt": "2022-11-17T10:37:30+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
"Name": "juming-nginx",
"Options": null,
"Scope": "local"
}
]

所有的容器,在没有指定目录的情况下挂载,挂载的目录都是在/var/lib/docker/volumes
设置挂载权限
只读挂载,表示这个路径只能在宿主机上操作,容器内部无法操作
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
可读可写挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
网友评论