Docker存储及dockerfile指令04

本文详细介绍了Docker的存储驱动,包括主流的overlay2和如何挂载卷。此外,还全面讲解了Dockerfile的常用指令,如FROM、RUN、CMD、LABEL、EXPOSE等,以及如何构建和运行Docker镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、Docker存储

1、主流的Docker存储驱动

2、Docker存储驱动所支持的底层文件系统

3、添加挂载卷-v或--mount选项

4、创建和管理卷、及删除卷

二、Dockerfile常用指令

1、FROM指令——设置基础镜像

2、RUN指令——运行命令

3、CMD指令——指定容器启动时默认执行的命令

4、LABEL指令——向镜像添加标记(元数据)

5、EXPOSE指令——声明容器运行时侦听的网络端口

6、ENV指令——指定环境变量

7、COPY指令——将源文件复制到容器

8、ADD指令——将源文件复制到容器

9、ENTRYPOINT指令——配置容器的默认入口

10、VOLUME指令——创建挂载点

11、WOKDIR指令——配置工作目录

12、USER指令——设置运行镜像时使用的用户名

13、ARG指令——定义变量

14、SHELL指令——指定命令的shell格式

15、Dockerfile指令的exec和shell格式

三、构建使用DockerFile实例


一、Docker存储

1、主流的Docker存储驱动

        对于所有当前支持的Linux发行版,overlay2存储驱动是首选。 CentOS和RHEL的最新版  本现在已经支持overlay2存储驱动,并将overlay2作为推荐的存储驱动。

        对于Docker 18.06或更早的版本,aufs存储驱动是首选。

        devicemapper存储驱动用于生产环境时需要配置为direct-lvm模式。

        btrfs和zfs存储驱动对底层文件系统(backing filesystem)有用。

        vfs存储驱动用于测试,适合那些没有“写时拷贝”的文件系统。

        存储驱动的选择可能受到Docker版本、操作系统内核和发行版本的限制。

2、Docker存储驱动所支持的底层文件系统

3、添加挂载卷-v或--mount选项

-v选项

        -v选项的语法:  -v [host-src:]container-dest[:<options>]

        对于命名卷,第1个字段是卷的名称,并且在指定主机上是唯一的。对于匿名卷,第1个字段被省略。

        第2个字段container-dest是容器中被挂载的文件或目录的路径,必须采用绝对路径的形式。

        第3个字段是可选的,是一个逗号分隔的选项列表。

 --mount选项

        --mount选项的语法: --mount <key>=<value>,<key>=<value>,……

        --mount选项的语法比-v的更冗长,但键的顺序并不重要,并且键值更易于理解。

        type:要挂载的类型,值可以是bind、volume或tmpfs。

        source(或src):要挂载的源,对于命名卷,这里是卷的名字。匿名卷忽略该字段。

        destination(或dst、target):要挂载的目的地,必须采用绝对路径的形式。

        readonly:只读选项,表示卷以只读方式挂载到容器中。

        volume-opt:卷选项,可以被多次指定,由包含选项名和值的键值对组成。

示例:

        使用--mount选项的实现:

docker run -d  --name devtest  --mount source=myvol2,target=/app  nginx:latest

        改用-v选项的实现:

docker run -d --name devtest  -v myvol2:/app  nginx:latest

4、创建和管理卷、及删除卷

        创建卷:

        docker volume create my-vol

        列出当前的卷(列出卷驱动和卷名称)

        docker volume ls

        查看卷的详细信息

        docker volume inspect my-vol

        删除卷

        docker volume rm my-vol

        删除所有卷

        docker volume prune

二、Dockerfile常用指令

1、FROM指令——设置基础镜像

        FROM指令的用法有以下3种格式:

        FROM <image> [AS <name>]

        FROM <image>[:<tag>] [AS <name>]

        FROM <image>[@<digest>] [AS <name>]

        FROM指令为后续指令设置基础镜像,可以在同一个Dockerfile文件中多次出现,以创建多个镜像层。

        image参数指定任何有效的镜像,特别是可以从公有仓库拉取的镜像。

        FROM指令AS <name>是可选的,可以用来对此构建阶段指定一个名称。

        tag或digest的值是可选的。如果省略其中任何一个,构建器将默认使用latest。

2、RUN指令——运行命令

        RUN指令的用法有以下两种格式:

        RUN <command>

        RUN ["executable", "param1", "param2"]

        第1种是shell格式,命令在shell环境中运行。

        第2种是exec格式,不会启动shell环境。

        RUN指令将在当前镜像顶部的新层中执行命令,并提交结果。

        exec格式可以避免shell字符串转换。

        shell格式中的默认shell可以使用SHELL命令来更改。

3、CMD指令——指定容器启动时默认执行的命令

        CMD指令的用法有以下3种格式:

        CMD ["executable","param1","param2"]

        CMD ["param1","param2"]

        CMD command param1 param2

        第1种是首选的exec格式。

        第2种提供给ENTRYPOINT指令的默认参数。

        第3种是shell格式。

        一个Dockerfile文件中若有多个CMD指令,则只有最后一个CMD有效。

        CMD指令的主要目的是为运行中的容器提供默认值。

4、LABEL指令——向镜像添加标记(元数据)

        LABEL指令的语法格式如下:

        LABEL <key>=<value> <key>=<value> <key>=<value> ...

        每个标记(元数据)以键值对的形式表示。要在其中包含空格,应使用引号和反斜杠。

        一个镜像可以有多个标记。可以将多个标记合并到单个LABEL指令中以减少层数。

        基础镜像或父镜像中包含的标记会被镜像继承。

5、EXPOSE指令——声明容器运行时侦听的网络端口

        EXPOSE指令的语法格式如下:

        EXPOSE <port> [<port>...]

        EXPOSE指令通知Docker容器在运行时侦听指定的网络端口。

        EXPOSE指令不会发布该端口,只是起到声明作用。

6、ENV指令——指定环境变量

        ENV指令的用法有以下两种格式:

        ENV <key> <value>

        ENV <key>=<value> ...

        ENV指令以键值对的形式定义环境变量。

        第1种格式将单个变量设置为一个值。

        第2种格式允许一次设置多个变量,可以使用等号(=),而第1种形式不使用。

7、COPY指令——将源文件复制到容器

        COPY指令的用法有以下两种格式:

        COPY [--chown=<user>:<group>] <src>... <dest>

        COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]

        --chown选项只能用于构建Linux容器,不能在Windows容器上工作。

        COPY指令将指定的源路径(由<src>参数指定)的文件或目录复制到容器文件系统中指定的目的路径(由<dest>参数指定)。

        可以指定多个源路径,但文件和目录的路径将被视为相对于构建上下文的源路径。

        目的路径是绝对路径,或者是相对于工作目录(由WORKDIR指令指定)路径。

8、ADD指令——将源文件复制到容器

        ADD指令的用法有以下两种格式:

        ADD [--chown=<user>:<group>] <src>... <dest>

        ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]

        它与COPY指令的功能基本相同,不同之处有两点:

        源可以使用URL指定。

        归档文件在复制过程中能够被自动解压缩。

        如果源是具有可识别的压缩格式的本地Tar归档文件,则将其解包为目录。来自远程URL的资源不会被解压缩。

9、ENTRYPOINT指令——配置容器的默认入口

        ENTRYPOINT指令的用法有以下两种格式:

        ENTRYPOINT ["executable", "param1", "param2"]

        ENTRYPOINT command param1 param2

        第1种是首选的exec格式。

        第2种是shell格式。

        ENTRYPOINT指令用于配置容器运行的可执行文件。

        在Dockerfile中只有最后一个ENTRYPOINT指令会起作用。

10、VOLUME指令——创建挂载点

        VOLUME指令的语法格式如下:

        VOLUME ["/data"]

        VOLUME指令创建具有指定名称的挂载点,并将其标记为从本机主机或其他容器保留外部挂载的卷。

11、WOKDIR指令——配置工作目录

        WORKDIR指令的语法格式如下:

        WORKDIR /path/to/workdir

        WORKDIR指令为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。

        可以在一个Dockerfile文件中多次使用该指令。

12、USER指令——设置运行镜像时使用的用户名

        USER指令的用法有以下两种格式:

        USER <user>[:<group>] or

        USER <UID>[:<GID>]

        USER指令设置运行镜像时使用的用户名(或UID)和可选的用户组(或GID)。

用户没有主要组时,镜像(或下一条指令)将以root组的身份运行。

13、ARG指令——定义变量

        ARG指令的语法格式如下:

        ARG <name>[=<default value>]

        ARG指令定义一个变量(可称为构建时变量)。

        一个Dockerfile文件可以包括一个或多个ARG指令。

14、SHELL指令——指定命令的shell格式

        SHELL指令的语法格式如下:

        SHELL ["executable", "parameters"]

        SHELL指令用于指定命令的shell格式以覆盖默认的shell。

        SHELL指令可以多次出现。每个SHELL指令覆盖所有先前的SHELL指令,并影响所有后续指令。

15、Dockerfile指令的exec和shell格式

        RUN、CMD和ENTRYPOINT指令都会用到这两种格式。

        exec格式的一般用法如下:

        <指令> ["executable", "param1", "param2", ...]

        采用exec格式要使用环境变量。

        shell 格式一般用法如下:

        <指令> <command>

        指令执行时shell格式底层会调用/bin/sh -c 来执行命令。

        CMD和ENTRYPOINT指令首选exec格式。RUN指令则选择两种格式都可以。

        exec格式作为JSON数组解析,必须在单词之外使用双引号而不是单引号。

三、构建使用DockerFile实例

基于couchbase/centos7-systemd创建dockerfile,实现安装nginx并访问测试页面

1建立目录并准备所需文件:

[root@bogon ~]# mkdir dockerfile && cd dockerfile

[root@bogon dockerfile]# echo "test" > index.html

2.编写Dockerfile文件:

[root@bogon dockerfile]# vim Dockerfile

FROM couchbase/centos7-systemd

RUN yum -y install nginx

EXPOSE 80

COPY index.html /usr/share/nginx/html/

ENTRYPOINT ["nginx","-g","daemon off;"]

3.使用Docker build命令构建镜像

[root@bogon dockerfile]# docker build -t nginx:v1 .

4.启动并测试

[root@bogon dockerfile]# docker run -itd -p 80:80 nginx:v1

10d130a04cc5dd2072dbb30c82f81b4d10c716d1ca2f24a06f77159ed36e8f54

[root@bogon dockerfile]# docker ps -a

5.访问测试页面

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值