Dockerfile-构建镜像

Docker提供了两种构建镜像的方法:dokcer commit 命令与docker文件

一、Dockerfile 解析

1.是什么?

Docker file是用来构建docker镜像的文件文件,是由一条条构建镜像所需的指令和参数构成的脚本

  • 官网:https://docs.docker.com/engine/reference/builder/
  • 构建三步骤:

         编写Dockerfile文件

         docker bulid 命令构建镜像

         docker run 依镜像运行容器示例

2.Dockerfile构建过程解析

  •  docker执行docker的大致流程

        1)docker从基础镜像运行一个容器

        2)执行一条指令并对容器做出修改

        3)执行类型 docker commit的操作提交一个新的镜像层

        4)docker 在基于刚提交的镜像运行一个容器

        5)执行dockerfile中按序执行直到所有指令都执行完成

3.Dockerfile常用指令

Dockerfile由一行行命令语句组成,并且支持#开头注释

1)构建指令用于构建image,其指定操作不会在运行image的容器执行

2)设置指令用于设置image的属性,其指定的操作将在运行image的容器中执行

一般dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令

FROM(构建指令)

指定base镜像,必须指定且需要dockerfile其他指令的前面,后续的指令都依赖于该指定的镜像,

该命令格式有两种格式:

1)FROM <image>

2)FROM <image>:<tag>

MAINTAINER(构建指令)

设置镜像的作者,可以是任意字符串。用于将image的制作者相关的信息写入到image

中 ,现在已经被“LABEL maintainer=”取代

使用 docker inspect 命令输出相应的字段记录该信息

COPY(构建指令)

将文件从build context复制到镜像

COPY支持两种形式:

COPY  src ... dest

COPY ["src",.."dest"]

ADD (构建指令)

与COPY类似,从build context 复制到镜像,如果 src 是归档文件(tar,zip,tgz等)文件会自动解压到test

ADD包含两种格式:

1.ADD <src> ...<test>

2.ADD ["src",... "test"]

ENV(构建指令)

设置环境变量,环境可被后面的指令使用,并在容器运行时保持

格式:ENV key value

例如:

ENV MY_VERSION 1.3

RUN apt-get install -y mypackage=$MY_VERSION

EXPOSE(设置指令)

格式:

EXPOSE port

EXPOSE [<port>/<protocol>...]

指定容器开放的端口,供互联网系统使用

可以指定TCP或UDP,默认时TCP

在启动容器的时候如果使用-P,Docker主机自动分配一个端口和容器端口映射

在启动容器的时候如果使用-p,则可以具体指定哪个宿主机端口和容器端口映射

VOLUME(设置指令)

格式:VOLUME ["<mountpoint>"]

将文件或目录声明为volume,使容器中的一个目录具有持久化存储数据的功能,该目录可以被容器本身使用,也可以共享给其他容器使用,

WORKDIR(设置指令)

格式:WORKDIR /etc/passwd

示例:

      WORKDIR /a  (这时工作目录为/a)

      WORKDIR b  (这时工作目录为/a/b)

      WORKDIR c  (这时工作目录为/a/b/c)

类似于cd命令切换到当前目录,为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。

RUN (构建指令)

在构建镜像过程中指定要执行的命令

CMD(设置指令)

容器启动时运行指令的命令

dockerfile 中可以有CMD指令,但只有最后一个生效

ENTRYPOINT(设置指令)

设置容器启动时运行的命令

dockerfile 中可以有多个ENTRYPOINT 指令,但只有最后一个生效

  • USER 

USER指令用于指定容器执行程序的用户身份,默认时root用户

当服务不需要管理员权限时,通过该命令指定运行用户

格式:

  USER user

  USER user:group

  USER uid

  USER uid:gid

  USER user:gid

  USER uid:group

 示例:

  USER www

  • HEALTHCHECK

容器健康状况检查命令

语法有两种:

1.HEALTHCHECK [OPTIONS] CMD command

2.HEALTHCHECK NONE

 第一个功能是在容器内部运行一个命令来检查容器的健康状况

第二个功能是在基础镜像中取消健康检查命令

[OPTIONS]的选项支持以下三种选项:

--interval=duration 两次检查默认的时间间隔为30秒,间隔(s秒、M分钟、h小时),从容器运行起来开始计时interval秒(或者分钟小时)进行第一次健康检查

--timeout=DURATION 

--retries=N  连续失败指定次数后,则容器被认为是不健康的,状态为unhealthy,默认次数是3

注意:HEALTHCHECK命令只能出现一次,如果出现了多次,只有最后一个生效

CMD关键字后面可以跟执行shell脚本的命令或者exec。CMD后面的命令执行完的返回值代表容器的运行状况,具体的返回值如下:

0: success - 表示容器是健康的

1: unhealthy - 表示容器已经不能工作

2: reserved - 保留值

  • ARG构建参数

 格式:ARG <参数名>[=<默认值>]

ARG构建参数和ENV一样,都是设置环境变量,区别在于 ARG所设置的构建环境的变量,在容器中运行时不会存在这些变量,不要因此就使用 ARG 保存密码之类的信息,因为 docker history 还是可以看到所有值的。

  • LABEL

给镜像添加信息。使用docker inspect可查看镜像的相关信息

语法:

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

一个Dockerfile种可以有多个LABEL:

LABEL "com.example.vendor"="ACME Incorporated"

LABEL com.example.label-with-value="foo"

LABEL version="1.0"

LABEL description="This text illustrates \

that label-values can span multiple lines."

但是并不建议这样写,最好就写成一行,如太长需要换行的话则使用\符号

二、docker commit

docker commit命令是创建新镜像最直观的方法,其过程包含三个步骤

• 运行容器。

• 修改容器。

• 将容器保存为新的镜像。

保存为新的镜像,新开启一个终端,执行docker commit命令将容器保存为镜像

如:

新镜像命名为centos-with-vim。查看新镜像的属性

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: dockerfile-maven-plugin 是一个 Maven 插件,用于自动生成 Docker 镜像Dockerfile 文件。它可以根据 Maven 项目的 pom.xml 文件和一些配置参数,自动生成 Dockerfile 文件,并将其用于构建 Docker 镜像。这个插件可以大大简化 Docker 镜像构建的过程,提高开发效率。 ### 回答2: dockerfile-maven-plugin 是一个用于帮助在 Maven 项目中使用 Dockerfile 构建和管理 Docker 镜像的插件。 在传统的开发中,我们需要手动构建 Docker 镜像,并在 Dockerfile 中定义构建步骤和依赖关系。而使用 dockerfile-maven-plugin 可以将这一过程集成到 Maven 构建中,进一步简化了开发过程。 使用 dockerfile-maven-plugin,我们可以在 Maven 的 pom.xml 文件中配置一系列的构建参数和指令。这些参数包括 Dockerfile 文件路径、镜像名称、版本、标签等。通过这些配置,插件可以自动地根据 Dockerfile 构建 Docker 镜像,并将其推送到远程镜像仓库。 该插件还提供了一些额外的特性,例如多阶段构建构建缓存、构建参数传递等。其中,多阶段构建允许我们按照不同的阶段构建镜像,以便优化镜像大小和构建速度;构建缓存则可以在多次构建中重复使用相同的构建步骤,避免重复构建构建参数传递则可以在构建过程中传递环境变量或者其他参数,灵活控制镜像构建的过程。 总而言之,dockerfile-maven-plugin 提供了一种便捷的方式,将 Docker 镜像构建过程整合到 Maven 构建中。使用该插件,我们可以在 Maven 构建过程中自动构建和管理 Docker 镜像,提高了开发效率和部署一致性。 ### 回答3: Dockerfile-maven-plugin是一个maven插件,用于帮助开发人员在构建过程中生成Docker镜像Docker镜像一个轻量级、可移植、自包含的容器,使应用程序的部署更加简单和可靠。 使用Dockerfile-maven-plugin,我们可以为项目配置一个Dockerfile文件,该文件指定了如何构建和运行应用程序的容器。该插件提供了一系列的目标和参数,用于自动化构建镜像打包和标记、上传到Docker Hub等操作。 在配置中,我们可以指定应用程序的依赖项、环境变量、端口映射等信息,以及Docker镜像基础映像和其他镜像相关的配置。此外,我们还可以使用插件的额外功能,如构建多阶段、使用多个Dockerfile等。 使用Dockerfile-maven-plugin,我们可以在maven构建过程中集成Docker镜像构建和发布,减少了手动操作的复杂性和错误的可能性。此外,该插件还可以与其他maven插件和工具集成,实现更复杂的自动化构建流程。 总而言之,Dockerfile-maven-plugin是一个方便的maven插件,用于在项目构建过程中生成Docker镜像。它帮助简化了Docker容器构建和部署过程,提高了开发人员的效率,并且可以与其他工具集成,实现更复杂的构建流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹黄堡!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值