赞
踩
docker的理念回顾
将应用和环境打包成一个镜像
需求:数据可持久化
Mysql 容器删除后数据没有了 需求:Mysql可以存储在本地!
容器之间可以有一盒数据共享技术 Docker容器中产生的数据同步到本地!
这就是卷技术!目录的挂载 将我们容器内的目录挂载到Linux上面!
总结:容器的持久化和同步操作!容器间也是可以数据共享!
#方式一 直接使用命令挂载 -v docker run -it -v 主机目录:容器内目录 #测试 [root@iZ2vc20ehn0q0ihrgccmd2Z home]# docker run -it -v /home/dockerTest:/home centos /bin/bash [root@140970ec5880 /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@iZ2vc20ehn0q0ihrgccmd2Z ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 140970ec5880 centos "/bin/bash" 55 seconds ago Up 54 seconds stupefied_albattani [root@iZ2vc20ehn0q0ihrgccmd2Z ~]# docker inspect 140970ec5880 "Mounts": [ { "Type": "bind", "Source": "/home/dockerTest", "Destination": "/home", "Mode": "", "RW": true, "Propagation": "rprivate" } ],
再测试
1.停止容器 exit
2.主机修改绑定路径内的文件 vim xxx
3.启动容器 docker run 容器id
4.进入容器 docker attach 容器id
5.查看文件内容 cat xxx
docker pull mysql # 运行容器 需要做数据挂载 # 安装启动mysql 需要配置密码!!! # 官方测试 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag # -d 后台运行 -p 端口映射 -v 卷挂载 -e 环境 --name 容器名 [root@iZ2vc20ehn0q0ihrgccmd2Z home]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql-xm mysql:latest 8731e0276daa6f965f754710b1dce3fc3e0a668fd6efa3e6f74b14f5044dc7b7 # 启动成功后 我们在本地使用第三方工具测试
# 匿名挂载 -v 容器内路径 docker run -d -P --name nginx01 -v /ect/nginx nginx # 查看所有的 volumn情况 #docker volume ls # 这里发现 -v 只写了容器内的路径 没有写容器外的路径! # 具名挂载 docker run -d -P --name nginx02 -v juming-nginx:/ect/nginx nginx # 通过 -v 卷名:容器内路径 # 查看一下这个卷 [root@iZ2vc20ehn0q0ihrgccmd2Z ~]# docker volume inspect juming-nginx [ { "CreatedAt": "2021-04-02T10:12:57+08:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data", # "Name": "juming-nginx", "Options": null, "Scope": "local" } ] 所有的 docker容器内的卷 没有指定目录的情况下都是 /var/lib/docker/volumes/xxx/_data 我们通过具名挂载可以方便找到我们的一个卷 大多数情况在使用 具名挂载 # 如何确定是具名还是匿名挂载 还是指定挂载! -v 容器内路径 # 匿名 -v 卷名:容器内路径 #具名 -v /宿主机路径::容器内路径 # 指定路径挂载
拓展:
# 通过 -v 容器内路径 :ro rw 改变读写权限
ro readonly #只读
rw readwrite # 可读可写
# 一旦这个设置了容器权限 容器队我们挂载出来的内容就有限定了!
docker run -d -P --name nginx02 -v juming-nginx:/ect/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/ect/nginx:rw nginx
# ro 只要看到ro就说明这个路径只能通过宿主机操作 容器内部无法操作!
Dockerfile 就是用来构建docker 镜像的构建文件! 命令脚本!
通过这个脚本可以生成镜像 镜像是一层一层的 脚本一个一个的命令 每个命令都是一层
方式二:
# 创建一个dockerfile文件 名字随意 建议Dockerfile
# 文件中的内容 指令大写
FROM centos
VOLUME ["volume1","volume2"]
CMD echo "-----end-------"
CMD /bin/bash
# 这里每一个命令就是镜像的一层
命令: docker build -f /home/docker-test-volume/dockerfile -t xm-centos:1.0 . # -f /home/docker-test-volume/dockerfile 具体路径的文件 # -t xm-centos:1.0 名称:版本号 # 实战 [root@iZ2vc20ehn0q0ihrgccmd2Z docker-test-volume]# vim dockerfile [root@iZ2vc20ehn0q0ihrgccmd2Z docker-test-volume]# cat dockerfile FROM centos VOLUME ["volume1","volume2"] CMD echo "-----end-------" CMD /bin/bash [root@iZ2vc20ehn0q0ihrgccmd2Z docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile -t xm-centos . Sending build context to Docker daemon 2.048kB Step 1/4 : FROM centos latest: Pulling from library/centos 7a0437f04f83: Already exists Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1 Status: Downloaded newer image for centos:latest ---> 300e315adb2f Step 2/4 : VOLUME ["volume1","volume2"] ---> Running in 403d3cdbc135 Removing intermediate container 403d3cdbc135 ---> 702f06c938d5 Step 3/4 : CMD echo "-----end-------" ---> Running in a4d0e1f29b07 Removing intermediate container a4d0e1f29b07 ---> e6db3186edb9 Step 4/4 : CMD /bin/bash ---> Running in 874797a783f2 Removing intermediate container 874797a783f2 ---> a33178ea66fa Successfully built a33178ea66fa Successfully tagged xm-centos:latest [root@iZ2vc20ehn0q0ihrgccmd2Z docker-test-volume]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE xm-centos latest a33178ea66fa 2 minutes ago 209MB
这边的卷和外部一定有一个同步目录
查看挂载路径
docker inspect xxxID
"Mounts": [
{
"Type": "volume",
"Name": "96701dcb312e2bb90d70dbf208ab883df971929a040c56db11cba90599c9e517",
"Source": "/var/lib/docker/volumes/967
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。