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

从上面我们到,在容器的根目录多了两个文件夹volume01volume02

其实这两个文件夹就是我们在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

下图是截取容器挂载部分的内容。

上图就证明容器启动时,自动创建了volume01volume02两个挂载数据卷目录。

并且使用匿名挂载的方式进行挂载。

我们进入宿主机的/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的方式挂载数据卷的更多相关文章

  1. 『现学现忘』Docker基础 — 34、DockerFile文件详解

    目录 1.DockerFile文件说明 2.Dockerfile构建过程解析 (1)Docker容器构建三步骤 (2)Dockerfile文件的基本结构 (3)Dockerfile注意事项 (4)Do ...

  2. 『现学现忘』Docker基础 — 28、Docker容器数据卷介绍

    目录 1.什么是Docker容器数据卷 2.数据卷的作用 3.数据卷的使用 1.什么是Docker容器数据卷 Docker容器数据卷,即Docker Volume(卷). 当Docker容器运行的时候 ...

  3. 『现学现忘』Docker基础 — 29、Docker容器数据卷的应用

    目录 1.验证容器和宿主机之间数据共享 2.容器停止退出后,主机修改后数据是否同步 3.带只读权限的挂载数据卷 1.验证容器和宿主机之间数据共享 通过上面的操作,接下来我们演示一下通过数据卷的挂载,实 ...

  4. 『现学现忘』Docker基础 — 30、Docker中数据卷相关命令

    目录 1.Volume命令说明 2.Volume命令的使用 (1)创建数据卷 (2)查看本地数据卷列表 (3)打印myVolume数据卷的详细信息 (4)删除数据卷 (5)删除所有未使用的数据卷 3. ...

  5. 『现学现忘』Docker基础 — 33、Docker数据卷容器的说明与共享数据原理

    目录 1.数据卷容器的说明 2.数据卷容器共享数据原理 3.总结 4.练习:MySQL实现数据共享 1.数据卷容器的说明 (1)什么是数据卷容器 一个容器中已经创建好的数据卷,其它容器通过这个容器实现 ...

  6. 『现学现忘』Docker基础 — 16、Docker中的基本概念和底层原理

    目录 1.Docker的底层原理 2.Docker中常用的基本概念 3.run命令的运行流程 4.为什么Docker比VM快 Docker架构图: 我们依照Docker架构图进行Docker基础概念的 ...

  7. 『现学现忘』Docker基础 — 22、使用Docker安装Nginx

    目录 步骤1:搜索镜像 步骤2:下载Nginx镜像 步骤3:运行Nginx镜像 步骤4:进行本机测试 步骤5:进入容器内操作 步骤6:测试外网访问容器 步骤1:搜索镜像 使用docker search ...

  8. 『现学现忘』Docker基础 — 24、Docker图形化管理工具Portainer

    目录 1.Portainer介绍 2.Portainer安装启动 3.Portainer初始化配置 4.Portainer汉化 1.Portainer介绍 (1)Portainer 是一款轻量级的图形 ...

  9. 『现学现忘』Docker基础 — 31、实现MySQL同步数据

    目录 1.搜索镜像 2.拉取镜像 3.查看镜像 4.启动镜像 5.操作容器 (1)在MySQL中创建数据库 (2)外部连接Dokcer容器中的MySQL服务 (3)查看挂载情况 (4)测试MySQL服 ...

随机推荐

  1. 基于GDAL库,读取.nc文件(以海洋表温数据为例)C++版

    对于做海洋数据处理的同学,会经常遇到nc格式的文件,nc文件的格式全称是NetCDF,具体的详细解释请查询官网[https://www.unidata.ucar.edu/software/netcdf ...

  2. Java如何实现消费数据隔离?

    我是3y,一年CRUD经验用十年的markdown程序员‍常年被誉为优质八股文选手 今天继续更新austin项目,如果还没看过该系列的同学可以点开我的历史文章回顾下,在看的过程中不要忘记了点赞哟!建议 ...

  3. [源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3)

    [源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3) 目录 [源码解析] NVIDIA HugeCTR,GPU版本参数服务器---(3) 0x00 摘要 0x01 回顾 0x0 ...

  4. CentOS7编译安装升级openssh8.7p1

    因生成环境服务器安全扫描出的漏洞问题,只能升级最新的openssh,适用于centos6和centos7的升级使用. 一.编译前工作 openssl版本要求1.0.1以上,zlib版本要求1.1.4以 ...

  5. 如何通过pid定位是哪个容器

    此时,我有一个pid为28117的进程,通过pdwx命令,无法找到他所在的目录,此时我判定他是docker容器 pwdx 28117 输出如下 28117: / 通过docker ps -q命令,获取 ...

  6. python-利用shutil模块rmtree方法可以将文件及其文件夹下的内容删除

    import shutil import os image_path = os.path.join(os.path.dirname(__file__),'image') # 如果存在image目录则删 ...

  7. mongodb之shard分片

    总的 1:在3台独立服务器上,分别运行 27017,27018,27019实例, 互为副本集,形成3套repl set 2: 在3台服务器上,各配置config server, 运行27020端口上 ...

  8. Python:获取某一月的天数

    import calendarcalendar.monthlen(2021,6)30calendar.monthrange(2021,6)(1, 30) calendar.monthrange( ye ...

  9. broken pipe 报错分析和解决办法

    参考资料: 1.博客1:https://blog.csdn.net/qq_37535749/article/details/113781338 2.博客2:https://blog.csdn.net/ ...

  10. python如何data格式和时间戳的转换

    Python 获取几天前的时间 计算几天前并转换为指定格式. import time import datetime # 先获得时间数组格式的日期 threeDayAgo = (datetime.da ...