1. 什么是容器数据卷
docker主要是将应用和环境打包成一个镜像。
数据:如果数据都存在容器中, 那么容器删除,数据就会丢失 需求:可以将数据持久化!
如:MySQL,容器删了,数据也就没了!需求:MySQL数据可以存储在本地!
希望:容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到linux上。
2. 使用数据卷
方式1:直接使用命令来挂载 -v
docker run -it -v 主机目录:容器内的目录
#测试
docker run -it -v /home/ceshi:/home/centos /bin/bash
#启动之后,我们可以通过docker inspect 容器id
好处:我们以后修改只需要在本地修改即可,容器内会自动同步。
3. 实战—安装MySQL
思考:MySQL的数据持久化的问题
- 启动MySQL,完成数据挂载 ```shell [root@wjh ~]# docker run -d -p 8080: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 8033cd99e9f81fe27e674d626b116957d003981b768231cf22845d952f972e4c
说明:
-d 后台运行
-p 端口映射
-v 文件挂载
-e 容器环境设置
![image.png](https://cdn.nlark.com/yuque/0/2020/png/700608/1590232784798-3ee14527-a6bc-4a2b-a664-ab8f7f17f4e7.png#align=left&display=inline&height=383&margin=%5Bobject%20Object%5D&name=image.png&originHeight=766&originWidth=1119&size=75839&status=done&style=none&width=559.5)<br />测试是否挂载成功
- 连接MySQL客户端,手动创建数据库,查看文件
![image.png](https://cdn.nlark.com/yuque/0/2020/png/700608/1590232939401-a6b8e12b-b351-4dd8-b497-314cc25bb5b0.png#align=left&display=inline&height=82&margin=%5Bobject%20Object%5D&name=image.png&originHeight=164&originWidth=971&size=48019&status=done&style=none&width=485.5)![image.png](https://cdn.nlark.com/yuque/0/2020/png/700608/1590232920874-ca37a648-2f0f-4165-be3d-299b467044f5.png#align=left&display=inline&height=101&margin=%5Bobject%20Object%5D&name=image.png&originHeight=202&originWidth=1572&size=28956&status=done&style=none&width=786)<br />挂载成功
<a name="4kxee"></a>
## 4. 具名和匿名挂载
-v 容器内路径 #匿名挂载<br />-v 卷名:容器内路径 #具名挂载<br />-v /宿主机路径:容器内路径 #指定路径挂载
<a name="h71iU"></a>
## 5. 初识Dockerfile
Dockerfile就是用来构建docker镜像的构建文件,就是一个命令脚本,体验一下!
- 新建一个文件 目录为:/home/docker-test-dockerfile/dockerfile01
- 编辑文件脚本:
```shell
[root@wjh docker-test-volume]# cat dockerfile1
FROM centos
VOLUME ["volume01","volume02"]
CMD echo "-------end--------"
CMD /bin/bash
构建文件
docker build -f dockerfile1 -t wjh/centos:1.0 .
[root@wjh docker-test-volume]# docker build -f dockerfile1 -t wjh/centos:1.0 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
latest: Pulling from library/centos
8a29a15cefae: Already exists
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for centos:latest
---> 470671670cac
Step 2/4 : VOLUME ["volume01","volume02"]
---> Running in dba6792d83c6
Removing intermediate container dba6792d83c6
---> 4c864176b31c
Step 3/4 : CMD echo "-------end--------"
---> Running in b818027d044d
Removing intermediate container b818027d044d
---> ef2356a399ed
Step 4/4 : CMD /bin/bash
---> Running in c7470cfce351
Removing intermediate container c7470cfce351
---> 4adc6c84617c
Successfully built 4adc6c84617c
Successfully tagged wjh/centos:1.0
启动自己的镜像文件
查看挂载卷的位置
docker inspect 4adc6c84617c
6. 数据卷容器 —volumes-from
容器之间数据的共享,例如多个mysql同步容器
—volumes-from 相当于java里面的extend
文件之间是相互拷贝的概念