『现学现忘』Docker基础

您所在的位置:网站首页 dockerfileとdocker 『现学现忘』Docker基础

『现学现忘』Docker基础

2023-08-26 06:16| 来源: 网络整理| 查看: 265

目录1、简单了解一下DockerFile2、通过DockerFile的方式挂载数据卷(1)创建DockerFile文件(2)编辑Dockerfile文件(3)构建Dokcer镜像(4)启动镜像,并操作镜像(5)查看数据卷

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

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

image

上图就证明容器启动时,自动创建了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 卷名:容器内路径。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3