一:介绍

什么是容器数据卷?

我们都知道,容器中是有数据的,如果我们将容器删除,数据就会丢失,就好比我们的MySQL服务容器,我们把容器删了,数据就没了,删库跑路都不用 rm -rf /* 命令的,所以,我们需要一种可以把容器中的文件同步到本地中,这样,即使删除了容器,数据依旧存在,这便就是卷技术,总的来说,就是容器的持久化和同步操作,容器之间也可以数据共享.

二:数据卷挂载

1.使用命令完成容器卷挂载:

docker run -it v 主机目录:容器目录 [-v 主机目录:容器目录 -v 主机目录:容器目录 .....]

比如:

docker run -it -v G:\docker:/home centos /bin/bash

2.查看是否成功:

docker inspect 容器id

如下界面即代表成功

3.测试:

即使是容器停止,你在主机所做的操作也能同步:

4.停止容器:

修改主机文件:

5.运行docker容器,查看文件:

好处:
我们以后,比如说docker中的一个配置文件,我们需要频繁修改,那么我们可以使用容器卷技术,在主机修改,同步到容器中.

6.测试挂载mysql:

启动mysql容器,挂载两个目录:

docker run -d -p 3306:3306 -v G:\docker\mysql\conf:/etc/mysql/conf -v G:\docker\mysql\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

docker run 启动容器

-d 后台启动

-p 映射端口

-v 数据卷挂载 可挂载多个目录

-e 环境配置

--name 定义名字

我们可以看到挂载到本地的mysql的data目录已经同步了数据;

创建一个数据库:

本地:

7.删除容器:

对本地的数据是没有任何影响的:

三:具名匿名挂载:

1.具名挂载:

docker run -d -p 主机端口:容器端口 --name="name" -v 卷名:容器路径

如果你使用的是windows版本的docker,具名挂载之后,是找不到路径的(至少我没找到,有知道的小伙伴可以评论留言告诉我),但是linux版本的docker可以.所有docker的容器卷,在没有指定路径的情况下,存放在:

/var/lib/docker/volumes/卷名

其数据存放在_data目录下:

/var/lib/docker/volumes/卷名/_data

查看挂载地址:

docker volume inspect 卷名

我们通过具名挂载可以方便的找到我们的卷,这也是常用的挂载方法.

2.匿名挂载:

#不写主机路径

docker run -d -p 主机端口:容器端口 --name="name" -v 容器路径

我们来使用命令查看挂载情况:

docker volume [OPTIONS]

OPTIONS说明:

create 创建卷

inspect 显示一个或多个卷的详细信息

ls 查看卷列表

prune 删除所有未使用的本地卷

rm 删除一个或多个卷

#示例:

docker volume ls

区别:

命令 挂载方式
-v 容器内路径 匿名挂载
-v 卷名:容器路径 具名挂载
-v /主机路径:容器路径 指定路径挂载

扩展:

#ro readonly 只读 文件只能通过主机修改内容

docker run -d -p 8080:80 -v nginxvolume:/etc/nginx:ro nginx

#rw readwrite 读写 默认值

docker run -d -p 8080:80 -v nginxvolume:/etc/nginx:rw nginx

四.使用DockerFile完成挂载

DockerFile是用来构建docker镜像的脚本文件,通过这个脚本可以生成镜像,镜像是一层一层的,脚本是个个的命令,每个命令都是一层.

1.创建一个dockerfile文件,写入脚本:

#镜像来源于哪个镜像

FROM centos

#挂载,只写容器内地址,匿名挂载

VOLUME ["volume01","volume02"]

#完毕之后输出end

CMD echo "----end----"

#进入bin/bash

CMD /bin/bash

启动镜像,查看目录结构,我们会发现两个挂载的目录,我们可以查看主机目录.

2.查看挂载信息:

3.查看主机目录:

发现已经挂载成功,这样方式使用比较多,因为我们大多是都要构建自己的镜像.

四:数据卷容器:

如果我们想两个或者多个mysql同步数据,就需要用到数据卷容器技术,下面我们来测试一下,通过我们刚才制作的镜像,来启动三个容器.

1.启动第一个容器:

我们可以看到挂载的两个目录:

2.启动第二个容器:

#用此命令来实现容器文件共享

--volumes-from 父容器

我们在子容器创建一个文件:

切换到父容器看看文件是否同步:由图可看到数据完成了同步.

3.启动第三个容器:

我们接着创建第三个容器,让第三个容器与第二个容器实现数据共享:

4.修改父容器内容

接着修改父容器文件内容,查看两个子容器内容是否发生改变:第二个容器:

第三个容器:

我们可以看到,所有的容器都实现了数据共享.

5.删除父容器:

假如我们把父容器删除了之后,两个子容器之间的数据会丢失吗?

验证:查看子容器数据是否丢失:结果:
是不会丢失数据的.

6.删除父容器文件

那如果父容器把文件删除之后,子容器的文件会被删除吗?

创建一个新文件:删除文件结果发现,子容器文件也随之消失了.

结论:

事件 结果
删除父容器 子容器数据不会消失
删除父容器文件 子容器文件会随之消失

同理我们能够知道,子容器删除文件,父容器的文件也会随之消失.

7.扩展:

两个mysql或者多个mysql实现数据同步:

docker run -d -p 3306:3306 -v G:\docker\mysql\conf:/etc/mysql/conf -v G:\docker\mysql\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

docker run -d -p 3306:3306 -v G:\docker\mysql\conf:/etc/mysql/conf -v G:\docker\mysql\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --volumes-from mysql01 --name mysql02 mysql:5.7

数据卷容器的生命周期是直持续到没有容器使用为止。
如果你持久化到了本地,本地的数据是不会删除的.

五.DockerFile

1.DockerFile介绍:

DockerFile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

构建步骤:
1.编写一个DockerFile文件
2.使用docker build命令来执行脚本,构建镜像
3.使用docker run命令来运行我们构建的镜像
4.docker push 发布镜像,可以发送到docker hub 和阿里云镜像仓库里面

首先我们可以看看仓库里面的镜像是如何被制作的:

我们可以看到一串脚本,其中所有关键字都必须大写,比如刚开始的FROM,执行顺序和java一样,从上往下执行,可以用#注释,每一步操作都会生成一个镜像层.比如我们在基础镜像上安装了jdk,便会生成一个新的镜像层,安装完tomcat,也会生成一个新的镜像层,容器进程的写入操作只在可写容器层中进行.

如下图:

2.DockerFile命令讲解:

FROM #基础镜像,一切从这里开始,并且必须是第一条指令,如果不以任何镜像为基础,那么写法为:FROM scratch。

MAINTAINER #指定该镜像的作者,可以写成作者+邮箱的形式

RUN #运行指定的命令

ADD #添加文件

WORKDIR #设置工作目录

VOLUME #实现挂载功能

EXPOSE #暴露端口

CMD #容器启动时执行的命令,会被覆盖,且,如果有多个cmd命令,只会执行最后一个

ENTRYPOINT #启动时的默认命令,可追加命令

ONBUILD #命令只对当前镜像的子镜像生效,触发指令

COPY #将文件拷贝到镜像中

ENV #设置环境变量

3.制作一个tomcat镜像:

首先,我们需要准备一个tomcat压缩包,tomcat是采用java语言编写的,所以,我们也需要一个java的压缩包.

4.编写Dockersfile文件:

如果你命名为Dockerfile构建时就不必-f指定文件,docker会自动寻找名字为Dockerfile的文件.

#指定该镜像从哪个镜像衍生而来

FROM centos

#作者信息

MAINTAINER onion<1805222511@qq.com>

#从主机拷贝test.txt文件到镜像中的local中的test.txt

COPY test.txt /usr/local/test.txt

#添加文件,会自动帮我们解压

ADD jdk-8u231-linux-x64.tar.gz /usr/local/

ADD apache-tomcat-8.5.55.tar.gz /usr/local/

#运行指定的命令 安装vim工具

RUN yum -y install vim

#配置环境变量

ENV MYPATH /usr/local

#设置工作目录

WORKDIR $MYPATH

#设置java_home环境变量

ENV JAVA_HOME /usr/local/jdk1.8.0_231

#设置classpath环境变量,多个可用:隔开

ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

#配置tomcathome环境变量

ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.55

#配置tomcatbash环境变量

ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.55

#配置系统环境变量

ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_BASH/bin

#暴露端口

EXPOSE 8080

#容器启动时执行的命令,多个命令可以用&&符号连接

CMD $CATALINA_HOME/bin/startup.sh && tail -F $CATALINA_HOME/bin/logs/catalina.out

如何查看安装包解压之后的文件名:

将gz文件用压缩软件打开:

双击文件,可以看到文件名,这便是解压之后的文件名:

5.构建镜像:

docker build -t tomcattest:1.0 .

docker build #构建镜像

-t #设置镜像的名字及标签

每一步操作都是一层镜像:

6.查看镜像:

7.启动镜像:

docker run -d --name tomcat01 -p 8080:8080 -v /home/tomcat/webapps:/usr/local/apache-tomcat-8.5.55/webapps -v /home/tomcat/tomcatlogs/:/usr/local/apache-tomcat-8.5.55/logs tomcattest:1.0

8.查看卷:

9.查看指定镜像的创建历史:

docker history 镜像

docker 删除所有未启动的容器_Docker数据卷容器及DockerFile相关推荐

  1. docker 删除所有未启动的容器_Docker 镜像容器常用操作(让我们用 docker 溜得飞起)...

    推荐阅读: 面试字节跳动三轮凉凉,内推4面终拿下抖音offer(Java后台研发)​zhuanlan.zhihu.com 一线架构师Spring boot 学习笔记:我的成长全记在这份PDF文档里​z ...

  2. Docker 入门系列(4)- Docker 数据管理(挂载目录、挂载文件、数据卷挂载、数据卷共享、数据卷删除、数据卷容器备份和恢复)

    基于底层存储实现,Docker 提供了三种适用于不同场景的文件系统挂载方式:Bind Mount.Volume 和 Tmpfs Mount. Bind Mount 能够直接将宿主操作系统中的目录和文件 ...

  3. Docker容器-------网络模式,数据卷和数据卷容器

    目录 Docker网络实现原理 Docker的网络模式 Host模式 Container模式 none模式 bridge模式 自定义网络 查看网络模式列表 查看容器信息(包含配置.环境.网关.挂载.c ...

  4. docker数据卷容器挂载不上

    docker容器之间可以通过相互挂载实现数据共享,被挂载的容器称为 "数据卷容器" 数据卷容器相互挂载前提需要数据卷容器一方通过数据卷挂载在宿主机 docker run -d -v ...

  5. Docker创建私有仓库 | 数据卷和数据卷容器 | 容器互联 操作详解

    目录 一.Docker私有仓库的操作 1.创建私有仓库 2.上传 3.获取私有仓库列表 4.测试私有仓库下载 二.Docker数据卷和数据卷容器 1.数据卷 2.数据卷容器 三.容器互联(使用cent ...

  6. docker数据卷容器卷_如何删除Docker映像,容器和卷

    docker数据卷容器卷 Docker备忘单 (A Docker Cheat Sheet) 介绍 (Introduction) Docker makes it easy to wrap your ap ...

  7. Docker——使用docker工具管理软件/组件的运行,镜像、容器、数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境

    Docker--使用docker工具管理软件/组件的运行,镜像.容器.数据卷的基本概念,常用指令,使用docker搭建Java微服务运行环境 一.docker的安装和卸载 1.卸载 2.安装 3. 导 ...

  8. 【docker教程】docker视频教程(ubuntu)数据卷挂载、数据卷容器volume、端口映射(镜像叠加,分层复用)rootfs、bootfs(没看完)

    黑马程序员Docker容器化技术,从零学会Docker教程 可以先看1-13课.以及 docker概述 文章目录 docker概述 ubuntu安装docker docker架构 配置docker镜像 ...

  9. 【Docker】7、数据卷详解:具名挂载、匿名挂载、初识DockerFile、数据卷容器

    1.什么是容器数据卷? docker的理念回顾 将应用和环境打包成一个镜像! 如果数据都在容器中,那么容器删除,数据就会丢失!需求:数据可以持久化.如:MySQL,容器删除了,MySQL数据可以存储在 ...

最新文章

  1. PCT-36.523
  2. Html转义字符列表
  3. Windows下MongoDB的安装与设置MongoDB服务
  4. jQuery 购物车
  5. Java web后端4 会话 Cookie Session
  6. 怎样用计算机kd求平均数,利用pandas和numpy计算表中每一列的均值
  7. LeetCode最长回文子串
  8. win7 计算机定时关机脚本,定时关机命令,教您怎么使用命令行定时关机
  9. 微信api中转站(用python搭建flask服务器)
  10. 游戏思考06:游戏核心逻辑设计—战斗系统基础及进阶(未完待续,12/14)
  11. plg.Polygon
  12. 知识图谱-KGE-模型:概述【KGE模型充当打分函数的作用】【负采样】【不同模型在不同KG上的表现不一致,需要尝试对比】
  13. java-锁_自我理解
  14. ICA简介:独立成分分析
  15. 实验吧-密码学解题思路及答案(一)
  16. 强化学习keras-rl2的安装注意点
  17. C# 获取身份证中的性别/年龄
  18. 微信支付之PC网站(Native)支付详解
  19. 内存不能为read的解决方案
  20. SDUT-3924 疯狂的bLue

热门文章

  1. Python读取excel数据且横轴是日期的图像绘制
  2. 九大项目管理法则教你如何适者生存
  3. SigmaPlot是什么软件?
  4. 新奥集团:缔造全新门户平台 让沟通无极限
  5. jQuery 4.21
  6. 鸿蒙玺绶有用么,玺是什么意思 带玺字的男孩名字 用玺字起名的寓意
  7. 多核编程 与 单核多线程编程的区别
  8. Web 新租用了一个域名和虚拟主机
  9. 自由自在亮法宝 远离流感提升免疫力
  10. 中国乳腺X机市场研究与未来预测报告(2022版)