1. 什么是容器数据卷

docker主要是将应用和环境打包成一个镜像。
数据:如果数据都存在容器中, 那么容器删除,数据就会丢失 需求:可以将数据持久化!
如:MySQL,容器删了,数据也就没了!需求:MySQL数据可以存储在本地!
希望:容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到linux上。

2. 使用数据卷

方式1:直接使用命令来挂载 -v

  1. docker run -it -v 主机目录:容器内的目录
  2. #测试
  3. docker run -it -v /home/ceshi:/home/centos /bin/bash
  4. #启动之后,我们可以通过docker inspect 容器id

image.png
好处:我们以后修改只需要在本地修改即可,容器内会自动同步。

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 容器环境设置

  1. ![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 />测试是否挂载成功
  2. - 连接MySQL客户端,手动创建数据库,查看文件
  3. ![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 />挂载成功
  4. <a name="4kxee"></a>
  5. ## 4. 具名和匿名挂载
  6. -v 容器内路径 #匿名挂载<br />-v 卷名:容器内路径 #具名挂载<br />-v /宿主机路径:容器内路径 #指定路径挂载
  7. <a name="h71iU"></a>
  8. ## 5. 初识Dockerfile
  9. Dockerfile就是用来构建docker镜像的构建文件,就是一个命令脚本,体验一下!
  10. - 新建一个文件 目录为:/home/docker-test-dockerfile/dockerfile01
  11. - 编辑文件脚本:
  12. ```shell
  13. [root@wjh docker-test-volume]# cat dockerfile1
  14. FROM centos
  15. VOLUME ["volume01","volume02"]
  16. CMD echo "-------end--------"
  17. CMD /bin/bash
  • 构建文件

    1. docker build -f dockerfile1 -t wjh/centos:1.0 .
    1. [root@wjh docker-test-volume]# docker build -f dockerfile1 -t wjh/centos:1.0 .
    2. Sending build context to Docker daemon 2.048kB
    3. Step 1/4 : FROM centos
    4. latest: Pulling from library/centos
    5. 8a29a15cefae: Already exists
    6. Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
    7. Status: Downloaded newer image for centos:latest
    8. ---> 470671670cac
    9. Step 2/4 : VOLUME ["volume01","volume02"]
    10. ---> Running in dba6792d83c6
    11. Removing intermediate container dba6792d83c6
    12. ---> 4c864176b31c
    13. Step 3/4 : CMD echo "-------end--------"
    14. ---> Running in b818027d044d
    15. Removing intermediate container b818027d044d
    16. ---> ef2356a399ed
    17. Step 4/4 : CMD /bin/bash
    18. ---> Running in c7470cfce351
    19. Removing intermediate container c7470cfce351
    20. ---> 4adc6c84617c
    21. Successfully built 4adc6c84617c
    22. Successfully tagged wjh/centos:1.0

    image.png

  • 启动自己的镜像文件

image.png

  • 查看挂载卷的位置

    docker inspect 4adc6c84617c
    image.png

6. 数据卷容器 —volumes-from

容器之间数据的共享,例如多个mysql同步容器
image.png
—volumes-from 相当于java里面的extend
文件之间是相互拷贝的概念