『现学现忘』Docker基础 — 32、通过DockerFile的方式挂载数据卷
1、简单了解一下DockerFile
我们这里先简单的概括一下DockerFile:
- Dockerfile就是用来构建Docker镜像的构建文件,是一个命令脚本。
- 通过这个脚本可以生成镜像,镜像是一层一层的,而脚本也是一个个的命令,每个命令都是一层。
(理解到这里就可以了)
2、通过DockerFile的方式挂载数据卷
目标:在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷。
(1)创建DockerFile文件
在宿主机的/home目录中创建一个mydocker目录。
在mydocker目录中,创建一个文件dockerfile。
如下所示:
# 进入/home目录
[root@192 ~]# cd /home/
[root@192 home]# ll
总用量 0
# 创建并进入mydocker目录
[root@192 home]# mkdir mydocker
[root@192 home]# cd mydocker/
# 创建Dockerfile文件
[root@192 mydocker]# touch dockerfile
[root@192 mydocker]# ll
总用量 0
-rw-r--r--. 1 root root 0 3月 19 19:59 dockerfile
(2)编辑Dockerfile文件
在dockerfile文件中编写如下内容。
FROM centos # 添加基础镜像
VOLUME ["volume01", "volume02"] # 添加两个容器数据卷,属于匿名挂载
CMD echo "--finished----success--" # 容器构建完成输出的信息
CMD /bin/bash # 指定终端命令
说明:
- 创建一个Dockerfile文件,名字可以随机起,建议使用Dockerfile命名。
- 文件中的指令都大写。
- Dockerfile里面的每个命令,就是镜像的一层!
提示:
出于可移植和分享的考虑,用
-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。是由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。
(3)构建Dokcer镜像
构建Dokcer镜像使用docker build命令。
执行命令:docker build -f /home/mydocker/dockerfile -t wukong/centos:1.0 .
提示:
-f:指明Dockerfile文件的路径。-t:定义镜像的命名空间/镜像名:TAG。(命名空间可以省略)- 最后的
.表示是在指定镜像构建过程中上下文环境的目录。(先按固定写法记)
# 从Dockerfile生成镜像
[root@192 mydocker]# docker build -f /home/mydocker/dockerfile -t wukong/centos:1.0 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos # 可以看到一步一步的执行Dockerfile文件的每一条语句
---> 300e315adb2f
Step 2/4 : VOLUME ["volume01", "volume02"]
---> Running in 5b470e19ab85
Removing intermediate container 5b470e19ab85
---> 9f32b7e2ec23
Step 3/4 : CMD echo "--finished----success--"
---> Running in 8e5e921be91d
Removing intermediate container 8e5e921be91d
---> c25f409aaaa3
Step 4/4 : CMD /bin/bash
---> Running in 3a09eb701bf5
Removing intermediate container 3a09eb701bf5
---> 98b1b6590b78
Successfully built 98b1b6590b78 # 最后生成的镜像ID
Successfully tagged wukong/centos:1.0
# 查看本地Docker镜像
[root@192 mydocker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wukong/centos 1.0 98b1b6590b78 3 minutes ago 209MB
mysql 5.7 a70d36bc331a 8 weeks ago 449MB
centos latest 300e315adb2f 3 months ago 209MB
(4)启动镜像,并操作镜像
执行命令:docker run -it wukong/centos /bin/bash
启动容器,并且查看wukong/centos容器的根目录。
# 启动进入容器
[root@192 ~]# docker run -it 98b1b6590b78 /bin/bash
[root@b2094527a8c4 /]#
# 查看wukong/centos容器的根目录
[root@b2094527a8c4 /]# ls -l
total 0
lrwxrwxrwx. 1 root root 7 Nov 3 15:22 bin -> usr/bin
drwxr-xr-x. 5 root root 360 Mar 19 12:52 dev
drwxr-xr-x. 1 root root 66 Mar 19 12:52 etc
drwxr-xr-x. 2 root root 6 Nov 3 15:22 home
lrwxrwxrwx. 1 root root 7 Nov 3 15:22 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Nov 3 15:22 lib64 -> usr/lib64
drwx------. 2 root root 6 Dec 4 17:37 lost+found
drwxr-xr-x. 2 root root 6 Nov 3 15:22 media
drwxr-xr-x. 2 root root 6 Nov 3 15:22 mnt
drwxr-xr-x. 2 root root 6 Nov 3 15:22 opt
dr-xr-xr-x. 126 root root 0 Mar 19 12:52 proc
dr-xr-x---. 2 root root 162 Dec 4 17:37 root
drwxr-xr-x. 11 root root 163 Dec 4 17:37 run
lrwxrwxrwx. 1 root root 8 Nov 3 15:22 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Nov 3 15:22 srv
dr-xr-xr-x. 13 root root 0 Mar 19 04:07 sys
drwxrwxrwt. 7 root root 145 Dec 4 17:37 tmp
drwxr-xr-x. 12 root root 144 Dec 4 17:37 usr
drwxr-xr-x. 20 root root 262 Dec 4 17:37 var
drwxr-xr-x. 2 root root 6 Mar 19 12:52 volume01
drwxr-xr-x. 2 root root 6 Mar 19 12:52 volume02
从上面我们到,在容器的根目录多了两个文件夹volume01和volume02。
其实这两个文件夹就是我们在Dockerfile文件中定义的数据卷挂载,是以匿名挂载的方式挂载数据卷的。
在容器启动的时候,会自动挂载这两个数据卷目录。
然后我们进入volume01目录创建一个文件container.txt。
# 创建container.txt文件
[root@b2094527a8c4 /]# mkdir /volume01/container.txt
# 查看文件是否创建成功
[root@b2094527a8c4 /]# ls -l /volume01
total 0
drwxr-xr-x. 2 root root 6 Mar 19 12:58 container.txt
(5)查看数据卷
我们通过docker inspect命令,查看容器的详细信息。
# 查看当前运行的容器
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
b2094527a8c4 98b1b6590b78 "/bin/bash" 8 minutes ago Up 8 minutes
# 查看容器详细信息
[root@192 ~]# docker inspect b2094527a8c4
下图是截取容器挂载部分的内容。

上图就证明容器启动时,自动创建了volume01和volume02两个挂载数据卷目录。
并且使用匿名挂载的方式进行挂载。
我们进入宿主机的/var/lib/docker/volumes/2a2c26cec7ba4908a33a381aa90367a5e4123bb6e6fd9f5ef0887911a962ba19/_data目录,查看是否存在container.txt文件。
[root@192 ~]# cd /var/lib/docker/volumes/2a2c26cec7ba4908a33a381aa90367a5e4123bb6e6fd9f5ef0887911a962ba19/_data
[root@192 _data]# ll
总用量 0
drwxr-xr-x. 2 root root 6 3月 19 20:58 container.txt
说明在容器中volume01目录下创建的container.txt,同步到宿主机中了。
提示:
使用DockerFile挂载数据卷的方式我们未来使用的十分多,因为我们通常会构建自己的镜像。
假设构建镜像时候没有挂载数据卷,那我们就要手动进行数据卷的挂载了,
-v 卷名:容器内路径。
『现学现忘』Docker基础 — 32、通过DockerFile的方式挂载数据卷的更多相关文章
- 『现学现忘』Docker基础 — 34、DockerFile文件详解
目录 1.DockerFile文件说明 2.Dockerfile构建过程解析 (1)Docker容器构建三步骤 (2)Dockerfile文件的基本结构 (3)Dockerfile注意事项 (4)Do ...
- 『现学现忘』Docker基础 — 28、Docker容器数据卷介绍
目录 1.什么是Docker容器数据卷 2.数据卷的作用 3.数据卷的使用 1.什么是Docker容器数据卷 Docker容器数据卷,即Docker Volume(卷). 当Docker容器运行的时候 ...
- 『现学现忘』Docker基础 — 29、Docker容器数据卷的应用
目录 1.验证容器和宿主机之间数据共享 2.容器停止退出后,主机修改后数据是否同步 3.带只读权限的挂载数据卷 1.验证容器和宿主机之间数据共享 通过上面的操作,接下来我们演示一下通过数据卷的挂载,实 ...
- 『现学现忘』Docker基础 — 30、Docker中数据卷相关命令
目录 1.Volume命令说明 2.Volume命令的使用 (1)创建数据卷 (2)查看本地数据卷列表 (3)打印myVolume数据卷的详细信息 (4)删除数据卷 (5)删除所有未使用的数据卷 3. ...
- 『现学现忘』Docker基础 — 33、Docker数据卷容器的说明与共享数据原理
目录 1.数据卷容器的说明 2.数据卷容器共享数据原理 3.总结 4.练习:MySQL实现数据共享 1.数据卷容器的说明 (1)什么是数据卷容器 一个容器中已经创建好的数据卷,其它容器通过这个容器实现 ...
- 『现学现忘』Docker基础 — 16、Docker中的基本概念和底层原理
目录 1.Docker的底层原理 2.Docker中常用的基本概念 3.run命令的运行流程 4.为什么Docker比VM快 Docker架构图: 我们依照Docker架构图进行Docker基础概念的 ...
- 『现学现忘』Docker基础 — 22、使用Docker安装Nginx
目录 步骤1:搜索镜像 步骤2:下载Nginx镜像 步骤3:运行Nginx镜像 步骤4:进行本机测试 步骤5:进入容器内操作 步骤6:测试外网访问容器 步骤1:搜索镜像 使用docker search ...
- 『现学现忘』Docker基础 — 24、Docker图形化管理工具Portainer
目录 1.Portainer介绍 2.Portainer安装启动 3.Portainer初始化配置 4.Portainer汉化 1.Portainer介绍 (1)Portainer 是一款轻量级的图形 ...
- 『现学现忘』Docker基础 — 31、实现MySQL同步数据
目录 1.搜索镜像 2.拉取镜像 3.查看镜像 4.启动镜像 5.操作容器 (1)在MySQL中创建数据库 (2)外部连接Dokcer容器中的MySQL服务 (3)查看挂载情况 (4)测试MySQL服 ...
随机推荐
- Linux源码编译安装php7.2
以下简单的介绍下如何源码安装PHP,对于版本不一定是7.2,也可以是7.3,当然方法都是换汤不换药的,核心东西不变. 一.下载PHP源码 需要到指定的路径下载源码,执行下面的命令 wget http: ...
- 3U VPX i7 刀片计算机
产品概述 该产品是一款基于第三代Intel i7双核四线程的高性能3U VPX刀片式计算机.产品提供了多个高速PCIe总线接口,其中3个x4 PCIe 3.0接口,1个x4 PCIe 2.0接口.x4 ...
- 如何封装安全的go
如何封装安全的go 在业务代码开发过程中,我们会有很大概率使用go语言的goroutine来开启一个新的goroutine执行另外一段业务,或者开启多个goroutine来并行执行多个业务逻辑.所以我 ...
- Python 面向对象编程之封装的艺术
1. 面向对象编程 OOP ( Object Oriented Programming) 即面向对象编程. 面向对象编程是一种编码思想,或是一种代码组织方式.如同编辑文章时,可以选择分段.分节的方式 ...
- 大家好 这里是yi术家
好久没有来打卡了的说,可能你以为我忽然一时的热度刷题,但是事情并不是这样. 我在之前的章节里写到,我觉得每天的打卡有点浪费资源和时间,所以决定一周打一次卡. 可是上周好像也忘了打卡的样子. 这样任性的 ...
- BGP4协议测试——信而泰网络测试仪实操
文章关键词 BGP:路由测试:协议测试:矢量路由协议: 一.前言: BGP是自治系统外部路由协议,用来在AS之间传递路由信息 路径矢量路由协议,从设计上避免了环路的发生 其路由信息中携带了所经过的全部 ...
- 利用SSH隧道加密技术隐蔽C&C通信流量
在网络攻防博弈中,网络流量特征分析类安全防御措施得到了广泛应用.众多厂商和企业对网络流量进行恶意流量分析检测,从而针对性的采取防御措施,如各级ISP在骨干网络设备上大多采用网络流量分析检测的防御方案. ...
- JavaWeb-JDBC-Mybatis-Junit-Maven-Lombok
Java与数据库 初识JDBC JDBC是什么? JDBC英文名为:Java Data Base Connectivity(Java数据库连接),官方解释它是Java编程语言和广泛的数据库之间独立于数 ...
- [炼丹术]基于SwinTransformer的目标检测训练模型学习总结
基于SwinTransformer的目标检测训练模型学习总结 一.简要介绍 Swin Transformer是2021年提出的,是一种基于Transformer的一种深度学习网络结构,在目标检测.实例 ...
- WPS:添加公式后,行间距变宽的解决方法
找到公式所属段落的样式,右键修改样式 左下角'格式'中选择'段落' 段落间距设置为0,不要勾选与文档网格对齐