zoukankan      html  css  js  c++  java
  • 【Docker】Dockerfile的基本使用

    ****************************************************************************

    本文主要介绍Dockerfile的基本使用

      1.什么是Dockerfile?

      2.Dockerfile的示例

      3.Dockerfile的常用命令

    ****************************************************************************

    1Dockerfile的使用

    1.1、什么是Dockerfile?

    Dockerfile 是Docker中创建镜像最常用的方式。Dockerfile是一个Docker镜像的文本描述文件,我们可以理解成火箭发射的A、B、C、D…的步骤。Dockerfile其内部包含了一条条的指令每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建

     

    1.2Dockerfile示例

    1)正常Dockerfile的结构如下所示:

    #基于centos镜像

    FROM centos

    #维护人的信息

    MAINTAINER The CentOS Project <303323496@qq.com>

    #安装httpd软件包

    RUN yum -y update

    RUN yum -y install httpd

    #开启80端口

    EXPOSE 80

    #复制网站首页文件至镜像中web站点下

    ADD index.html /var/www/html/index.html

    #复制该脚本至镜像中,并修改其权限

    ADD run.sh /run.sh

    RUN chmod 775 /run.sh

    #当启动容器时执行的脚本文件

    CMD ["/run.sh"]

      由上可知,Dockerfile结构大致分为四个部分:

      (1)基础镜像信息

      (2)维护者信息

      (3)镜像操作指令

      (4)容器启动时执行指令

    2)结合实际项目【运维平台】Dockerfile编写示例:

    配置说明:通常运维人员会根据项目研发人员提供的镜像封装维护手册来编写Dockerfile文件,基本使用包含引用基础镜像、下载依赖包、复制文件到指定目录、指定工作目录、启动

    1.3Dockerfile的常用命令

    1.3.1、命令直观图

     

    1.3.2、命令详解

    1)FROM

    指明构建的新镜像是来自于哪个基础镜像,例如:

    FROM centos:6

    2)RUN

    构建镜像时运行的Shell命令,例如:

    RUN ["yum", "install", "httpd"]
    RUN yum install httpd

    3)CMD

    启动容器时执行的Shell命令,例如:

    CMD ["-C", "/start.sh"]
    CMD ["/usr/sbin/sshd", "-D"]
    CMD /usr/sbin/sshd -D

    类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:

    • CMD 在docker run 时运行。
    • RUN 是在 docker build。

    作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。

    注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效

    4)ENTRYPOINT

    类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

    但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。

    优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。

    注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

    5)ADD(支持解压文件)

    ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:

    • ADD 的优点:在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。
    • ADD 的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。

    6)COPY(不支持解压文件)

    复制指令,从上下文目录中复制文件或者目录到容器里指定路径。用法同ADD,只是不支持自动下载和解压,例如:

    COPY ./start.sh /start.sh

    7)ENV设置环境内环境变量,例如:

    ENV MYSQL_ROOT_PASSWORD 123456
    ENV JAVA_HOME /usr/local/jdk1.8.0_45

    8)VOLUME

    定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。

    例如:VOLUME ["/var/lib/mysql"]

    作用:

    • 避免重要的数据,因容器重启而丢失,这是非常致命的。
    • 避免容器不断变大。

    PS:一般不会在Dockerfile中用到,更常见的还是在docker run的时候指定-v数据卷。

    9)EXPOSE

    仅仅只是声明端口。

    作用:

    • 帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射。
    • 在运行时使用随机端口映射时,也就是 docker run -P 时,会自动随机映射 EXPOSE 的端口。

    10)WORKDIR

    RUN、CMD、ENTRYPOINT以及COPY和AND设置工作目录指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。

    docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

    格式:

    WORKDIR /data

    11)利用Dockerfile创建镜像

    通过目录下的 Dockerfile 构建一个 tomcat:v1(镜像名称:镜像标签)

    docker build -t tomcat:v1 .

    12)创建容器

    docker run -itd --name=tomcate -p 8080:8080

        -v /app/webapps/:/usr/local/apache-tomcat-8.0.46/webapps/

        tomcat:v1

  • 相关阅读:
    GeoServer开发手册
    如何自行分析定位SAP BSP错误
    SAP CRM里的user parameter之COM_IOITF_DEBUG
    SAP One Order应用的跟踪工具CRMD_TRACE_SET
    明明没有发生超时错误,为什么SAP WebClient UI会显示超时错误提示?
    使用ABAP SE16查看类型为RAWSTRING的数据库列字段值
    SAP CRM附件模型和搜索相关的属性介绍
    SAP WebClient UI和business switch相关的逻辑介绍
    SAP WebClient UI页面标签的决定逻辑介绍
    SAP WebClient UI配置决定(configuration)的逻辑介绍
  • 原文地址:https://www.cnblogs.com/xjx767361314/p/14115759.html
Copyright © 2011-2022 走看看