写点什么

【Docker 系列】我们来看看容器数据卷到底是个啥

用户头像
极客good
关注
发布于: 刚刚

docker run -it -v 宿主机目录:容器目录 镜像名


我们来尝试启动一个 nginx,并将宿主机的?/home/test?目录和 nginx 的/home目录挂载起来


#docker run -d -v /home/test:/home nginx


此时我们在宿主机的/home/test目录下建一个?test.txt?并且写入一些字符串,再查看容器的?/home?目录 是否有?test.txt

宿主机

root@iZuf66y3tuzn4wp3h02t7pZ:/home/test# echo xiaomotong >> test.txt

容器

root@c8405d03a9a1:/home# ls


test.txt


root@c8405d03a9a1:/home# cat test.txt


xiaomotong


我们在容器的/home?目录下创建一个 test2.txt 文件,同样写入一些字符串,再查看 宿主机的 /home/test 目录是否有?test2.txt

容器

root@c8405d03a9a1:/home# echo xiaozhu >> test2.txt

宿主机

root@iZuf66y3tuzn4wp3h02t7pZ:/home/test# ls


test2.txt test.txt


root@iZuf66y3tuzn4wp3h02t7pZ:/home/test# cat test2.txt


xiaozhu


查看上述效果,果然是挂载 ok,数据确实同步了,哪怕是我们把 docker 容器删除掉,数据也不会丢失


docker inspect 容器 ID?,查看一下我们创建的容器的挂载情况

docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES


c8405d03a9a1 nginx "/docker-entrypoint.…" 9 minutes ago Up 9 minutes 80/tcp nginx2

docker inspect c8405d03a9a1

[


...


"Mounts": [


{


"Type": "bind",


"Source": "/home/test",


"Destination": "/home",


"Mode": "",


"RW": true,


"Propagation": "rprivate"


}


],


...


]


使用容器数据卷的便利之处:


以后我们只需要修改宿主机里面的目录和文件,即可和容器中的指定目录保持同步

mysql 实战一波

咱们再来一个实战,我们一起来看看数据卷如何使用


下载 5.7 版本的 mysql docker 镜像,也可以下载其他版本,这个没有关系

docker pull mysql:5.7

5.7: Pulling from library/mysql # 5.7 版本


33847f680f63: Already exists # 本层级已经之前已经下载过了


5cb67864e624: Pull complete


1a2b594783f5: Pull complete


b30e406dd925: Pull complete


48901e306e4c: Pull complete


603d2b7147fd: Pull complete


802aa684c1c4: Pull complete


5b5a19178915: Pull complete


f9ce7411c6e4: Pull complete


f51f6977d9b2: Pull complete


aeb6b16ce012: Pull complete


Digest: sha256:be70d18aedc37927293e7947c8de41ae6490ecd4c79df1db40d1b5b5af7d9596


Status: Downloaded newer image for mysql:5.7


docker.io/library/mysql:5.7 # 真实的 mysql 镜像地址


启动镜像,直接使用 -v 来挂载目录


使用方式


docker run -it -v 主机目录:容器的目录


开始启动镜像


咱们可以参考?dockerhub?上的文档



docker run -d -p 8888:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql1 mysql:5.7

23c31b285804cd95130e36ad40d3c07239fe744845ca


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


464b9c80e42c84848bfb

解释一下上述命令

-d 后台运行


-p 宿主机端口:容器端口 端口映射


-v 宿主机目录:容器目录 挂载卷


-e 设置环境变量


--name 设置启动容器的名字


咱们可以通过 window 的 workbench 来远程连接一下 mysql


我的是云服务器,因此输入云服务器的地址,端口填入 8888 端口


默认用户名是 root , 密码是 123456



测试连接 ok ,我们可以来进入数据库



咱们在 workbench 中新建一个数据库


看看这个数据库是否会在我们的宿主机上面有同步



查看我们挂载宿主机的目录?/home/mysql/data


root@iZuf66y3tuzn4wp3h02t7pZ:/home/mysql/data#ls


auto.cnf ca.pem client-key.pem ibdata1 ib_logfile1 mysql private_key.pem server-cert.pem sys


ca-key.pem client-cert.pem ib_buffer_pool ib_logfile0 ibtmp1 performance_schema public_key.pem server-key.pem test



果然是有的,再次 nice,这就达到了数据持久化的效果,这就是咱们从认识数据卷到使用数据卷的一个简单流程,咱们可以慢慢的深入下去


具名挂载和匿名挂载




以启动一个 nginx 为例子:


具名挂载:

docker run -d --name nginx3 -v JM:/etc/nginx:rw nginx

匿名挂载:

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
【Docker 系列】我们来看看容器数据卷到底是个啥