『现学现忘』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服 ...
随机推荐
- 03 前端基础之JavaScript
目录 前端基础之JavaScript JavaScript JavaScript注释 变量与常量 基本数据类型 number类型 string类型 boolean类型 null与undefined类型 ...
- 基于TMS320C6670的软件无线电核心板
一.板卡概述 北京太速科技自主研发的TMS320C6670核心板,采用TI KeyStone系列的四核定点/浮点DSP TMS320C6670作主处理器.板卡引出处理器的全部信号引脚,便于客户二次开发 ...
- Spring系列15:Environment抽象
本文内容 Environment抽象的2个重要概念 @Profile 的使用 @PropertySource 的使用 Environment抽象的2个重要概念 Environment 接口表示当前应用 ...
- 【第二十四期】golang 一年经验开发 富途
他们家是按题目来的,从一个小题目慢慢延伸着问,由浅入深,问到你换题为止. 第一题 给了一个网址,解释一下浏览器填入这个网址后发生了什么? TCP为什么要三次握手四次挥手? 502是什么? 如果出现50 ...
- 使用Java的GUI技术实现 “ 贪吃蛇 ” 游戏
详细教程: 使用Java的GUI技术实现 " 贪吃蛇 " 游戏_IT打工酱的博客-CSDN博客
- mysql5.7下载
官网:https://dev.mysql.com/doc/refman/5.7/en/installing.html 二进制安装:https://dev.mysql.com/doc/refman/5. ...
- PPPoE协议测试——网络测试仪实操
前言: 与传统的接入方式相比,PPPoE具有较高的性能价格比,它在包括小区组网建设等一系列应用中被广泛采用,目前流行的宽带接入方式 ADSL 就使用了PPPoE协议. 随着低成本的宽带技术变得日益流行 ...
- 目前市面上报表软件下载排名的TOP5
目前,大部分的工作仍然离不开表格,而且工作表格的呈现更酷.效率要求更高.可以简化复杂的操作,大大提高工作效率.在企业管理中,报表可以以图表等简洁的方式向用户显示数据,从而提高工作效率.许多哦公司紧跟信 ...
- EasyUI Datagrid 数据网格 点击选中行 再次单击取消选中行
适用于jquery-easyui-1.9.15版本: 在项目中全局搜索: opts.singleSelect==true 或者在jquery.easyui.min.js中搜索: opts.single ...
- C# 反编译工具之dnSpy
下载地址:https://github.com/0xd4d/dnSpy/releases无需安装,和 ILSPY同门,感觉比ILSPY还强大 直接把dll拖拽到程序集资源管理器里面就可以啦