『现学现忘』Docker基础 — 32、通过DockerFile的方式挂载数据卷
2022-03-25 11:12
831 查看
[toc]
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基础学习——通过Dockerfile文件创建镜像
- 【Dockerfile】CentOS6.x中Docker通过Dockerfile构建常用的基础环境 # 设置基本的镜像,后续命令都以这个镜像为基础 FROM centos # 作者信息 MAI
- 【Dockerfile】Ubuntu中Docker通过Dockerfile构建常用的基础环境
- 『现学现忘』Docker基础 — 12、通过RPM软件包方式安装Docker
- 在以 CentOS7.6 为基础镜像的 Docker 容器中通过 NFS 将内存挂载成高速硬盘使用
- docker基础知识之挂载本地目录的方法
- docker基础:私库系列:再探Harbor:(8) https方式下的客户端docker login连接方法
- Oracle使用Linux nfs方式挂载备份文件后访问出错The file header is corrupted
- Windows Azure上通过挂载磁盘的方式修改Linux系统登录密码
- ## CSS基础知识 > CSS层叠样式表,主要是给页面编写样式的 ### 1.CSS的导入方式 - 行内样式 ``` /* * 行内样式:通过元素的style属性设置CSS样式 * 1
- Docker 基础之Dockerfile命令详解
- C#控制台基础 File.AppendAllLines,以追加的方式,即不改变txt中的原有内容,在后面添加一维string数组的内容
- Docker如何通过link方式进行通信
- docker基础知识之挂载本地目录
- 通过 DockerFile 打包镜像
- 必须知道的dockerfile基础知识
- MT6573 Android在Eclipse中Debug方式分两种,一种是编译模拟器,在模拟器的基础上进行调试,还有一种是通过真机remote debug。
- docker镜像的创建方法docker file方式
- DockerFile方式构建docker镜像
- 通过Dockerfile创建nginx服务的Centos镜像