docker基础
01、Docker简介
02、Docker的安装(通过yum安装)
03、Docker安装的问题补充
04、Docker的安装(通过RPM软件包)
05、Docker的安装(通过脚本安装)
06、Docker的卸载
07、Docker配置阿里云镜像加速器
08、Docker中的基本概念和底层原理
09、Docker常用命令(帮助命令)
10、Docker常用命令(镜像命令)
11、Docker常用命令(容器命令01)
12、Docker常用命令(容器命令02)
13、Docker常用命令(容器命令03)
14、Docker安装Nginx
15、Docker图形化管理工具Portainer
16、Docker镜像讲解
17、Docker镜像分层的理解
18、Docker镜像的commit操作
19、Docker容器数据卷介绍
20、Docker容器数据卷的应用
21、Docker中数据卷相关命令
22、Docker数据卷实现MySQL数据持久化
23、DockerFile的方式挂载数据卷
24、Docker数据卷容器的说明与共享数据原理
25、DockerFile文件详解
26、Docker实战:自定义CentOS镜像
27、CMD指令和ENTRYPOINT指令的区别
28、ONBUILD指令介绍
29、COPY指令和ADD指令
30、自定义Tomcat9镜像
31、发布镜像到DockerHub
32、将本地镜像推送到阿里云
33、补充:save和load命令说明
34、Jenkins + Docker + Github 自动部署
本文档使用 MrDoc 发布
-
+
首页
23、DockerFile的方式挂载数据卷
### **1、简单了解一下DockerFile** 我们这里先简单的概括一下DockerFile: - Dockerfile就是用来构建Docker镜像的构建文件,是一个命令脚本。 - 通过这个脚本可以生成镜像,镜像是一层一层的,而脚本也是一个个的命令,每个命令都是一层。 ### **2、通过DockerFile的方式挂载数据卷** **目标:在Dockerfile中使用VOLUME指令来给镜像添加一个或多个数据卷。** **(1)创建DockerFile文件** 在宿主机的`/home`目录中创建一个`mydocker`目录。 在`mydocker`目录中,创建一个文件`dockerfile`。 如下所示: ```python # 进入/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`文件中编写如下内容。 ```python 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。(命名空间可以省略) - 最后的. 表示是**在指定镜像构建过程中上下文环境的目录**。(先按固定写法记) ```python # 从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`容器的根目录。 ```python # 启动进入容器 [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`。 ```python # 创建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`命令,查看容器的详细信息。 ```python # 查看当前运行的容器 [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`文件。 ```python [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 卷名:容器内路径`。
李智
2025年3月17日 13:22
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码