前言
在有些场景下,我们可能会去使用mysql容器,但是作为数据库,我们肯定是要保证数据的安全与稳定,而不是当容器被删了之后,对应存储的数据也没有了。并且我们如果需要改数据库配置,也不可能说每次都进入到容器里面去修改。所以这个时候就推荐容器挂载技术了,将容器内的数据挂载到宿主机上,保证持久化和稳定性。接下来我们来看看具体的操作。
执行命令
为了更好的显示操作步骤,我们先从创建文件目录开始
root@VM-8-11-ubuntu:/home# pwd
/home
root@VM-8-11-ubuntu:/home# mkdir lnmp // 用于存放后期我们要放的web环境数据,挂载目录基本在这
root@VM-8-11-ubuntu:/home# cd lnmp/
root@VM-8-11-ubuntu:/home/lnmp# docker run -p 8080:80 --name some-nginx -v /home/lnmp/nginx:/usr/share/nginx/html:ro -d nginx
d4a19ff0d273b48e4a0f9178fcd1b903a340ed4f49854b65edc3d24ba2b84054
root@VM-8-11-ubuntu:/home/lnmp# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4a19ff0d273 nginx "/docker-entrypoint.…" 6 seconds ago Up 5 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp some-nginx
// 此时我们去访问网站就可以看到nginx已经运行成功了
root@VM-8-11-ubuntu:/home/lnmp# ls
nginx // 我们看到生成了一个目录,接下来看看能不能与容器同步
root@VM-8-11-ubuntu:/home/lnmp/nginx# ls
test.txt // 在宿主机中创建了一个测试文件,我们再进入容器查看
root@VM-8-11-ubuntu:/home/lnmp/nginx# docker exec -it some-nginx /bin/sh
# cd /usr/share/nginx/html
# ls
test.txt // 这时容器里也有这个文件了
–volumes-from
root@VM-8-11-ubuntu:/home/centos# docker run -it --name=mycentos -v /home/centos:/home/centos centos
root@VM-8-11-ubuntu:/home/centos# docker run -it --name=mycentos01 --volumes-from=mycentos centos
// 验证下
root@VM-8-11-ubuntu:/home/centos# ls
text.txt
root@VM-8-11-ubuntu:/home/centos# docker exec -it mycentos /bin/sh
sh-4.4# cd /home/centos
sh-4.4# ls
text.txt
sh-4.4#
root@VM-8-11-ubuntu:/home/centos# docker exec -it mycentos01 /bin/sh
sh-4.4# cd /home/centos
sh-4.4# ls
text.txt
// 我们可以看到两个容器内都有txt文件了
解析命令
docker run -p 8080:80 --name some-nginx -v /home/lnmp/nginx:/usr/share/nginx/html:ro -d nginx
说明:
-p 8080:80 宿主8080 映射容器的80端口
-v /home/lnmp/nginx:/usr/share/nginx/html:ro 这个就是挂载了,/home/lnmp/nginx 宿主目录 /usr/share/nginx/html 容器目录 ro 代表只读
注意
如果想要查看是否挂载成功 可以使用 docker inspect 容器id查看
"HostConfig": {
"Binds": [
"/home/centos:/home/centos" // 挂载地址
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
总结
- 启动新容器的时候挂载卷必须有–volumes-from,你想同步那个 就from哪个
- 这个卷的生命周期是持续到没有容器为止
- 如果你使用-v将数据持久化到宿主机上容器删除也不会丢失