容器化技术docker之Dockerfile文件

Dockerfile

什么是Dockerfile

文件 Dockerfile Docker镜像的描述文件 作用: 用来构建docker镜像的文件

Dockerfile可以认为是Docker镜像的描述文件,是由一系列命令和参数构成的脚本。主要作用是用来构建docker镜像的构建文件

容器化技术docker之Dockerfile文件_第1张图片

 

  • 通过架构图可以看出通过DockerFile可以直接构建镜像

Dockerfile解析过程

容器化技术docker之Dockerfile文件_第2张图片

 

Dockerfile的保留命令

官方说明:Dockerfile reference | Docker Documentation

保留字 作用
FROM 当前镜像是基于哪个镜像构建 第一个指令必须是FROM
MAINTAINER 镜像维护者的姓名和邮箱地址 废弃
RUN 构建镜像时需要运行的指令
EXPOSE 当前容器对外暴露出的端口号
WORKDIR 指定在创建容器后,终端默认登录进来的工作目录,一个落脚点
ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar包
COPY 类似于ADD,拷贝文件和目录到镜像中 将从构建上下文目录中<原路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
ENV 用来在构建镜像过程中设置环境变量
VOLUME 容器数据卷,用于数据保存和持久化工作 docker -v /root/data:/usr/local/tomcat/webapps
CMD 指定一个容器启动时要运行的命令 Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
ENTRYPOINT 指定一个容器启动时要运行的命令 ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及其参数

FROM 命令

  • 基于那个镜像进行构建新的镜像,在构建时会自动从docker hub拉取base镜像 必须作为Dockerfile的第一个指令出现

  • 语法:

    FROM  
    FROM  [:]     使用版本不写为latest
    FROM  [@]  使用摘要

MAINTAINER 命令

  • 镜像维护者的姓名和邮箱地址[废弃]

  • 语法:

    MAINTAINER 

RUN 命令

  • RUN指令将在当前映像之上的新层中执行任何命令并提交结果。生成的提交映像将用于Dockerfile中的下一步

  • 语法:

    RUN  (shell form, the command is run in a shell, which by default is /bin/sh -c on Linux or cmd /S /C on Windows)
    RUN echo hello
    ​
    RUN ["executable", "param1", "param2"] (exec form)
    RUN ["/bin/bash", "-c", "echo hello"]

EXPOSE 命令

  • 用来指定构建的镜像在运行为容器时对外暴露的端口

    • 注意: 仅仅是一个说明

    Tomcat Dockerfile: EXPOSE 3306 ==> docker run -p 宿主机端口:8080

    MYSQL Dockerfile: EXPOSE 3306

    RabbitMQ: Dockerfile: EXPOSE 5672 15672

  • 语法:

    EXPOSE 80/tcp  如果没有显示指定则默认暴露都是tcp
    EXPOSE 80/udp

CMD 命令

  • 用来为启动的容器指定执行的命令,在Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令才会生效。

  • 注意: Dockerfile中只能有一条CMD指令。如果列出多个命令,则只有最后一个命令才会生效。

  • 语法:

    CMD ["executable","param1","param2"] (exec form, this is the preferred form)
    CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
    CMD command param1 param2 (shell form)

WORKDIR 命令

  • 用来为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。如果WORKDIR不存在,即使它没有在任何后续Dockerfile指令中使用,它也将被创建。

  • 语法:

    WORKDIR /path/to/workdir
    ​
    WORKDIR /a
    WORKDIR b  /a/b 
    WORKDIR c  /a/b/c
    `注意:WORKDIR指令可以在Dockerfile中多次使用。如果提供了相对路径,则该路径将与先前WORKDIR指令的路径相对`

ENV 命令

  • 用来为构建镜像设置环境变量。这个值将出现在构建阶段中所有后续指令的环境中。

  • 语法:

    ENV  
    ENV = ...

ADD 命令

  • 用来从context上下文复制新文件、目录或远程文件url,并将它们添加到位于指定路径的映像文件系统中。

  • 语法:

    ADD hom* /mydir/       通配符添加多个文件
    ADD hom?.txt /mydir/   通配符添加
    ADD test.txt relativeDir/  可以指定相对路径
    ADD test.txt /absoluteDir/ 也可以指定绝对路径
    ADD url 

COPY 命令

  • 用来将context目录中指定文件复制到镜像的指定目录中

  • 语法:

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

VOLUME 命令

tomcat: /usr/local/tomcat/webapps

mysql: /var/lib/mysql

docker run -v 宿主机目录:/容器中目录

  • 用来定义容器运行时可以挂在到宿主机的目录

    • 注意:这个volume也是一个说明

  • 语法:

    VOLUME ["/data"]

ENTRYPOINT命令

  • 用来指定容器启动时执行命令和CMD类似

  • 语法:

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

    ENTRYPOINT指令,往往用于设置容器启动后的第一个命令,这对一个容器来说往往是固定的。 CMD指令,往往用于设置容器启动的第一个命令的默认参数,这对一个容器来说可以是变化的。

    Dockerfile说明

    容器化技术docker之Dockerfile文件_第3张图片

     

    Dockerfile构建项目

    准备springboot项目并且使用packge命令打成jar包容器化技术docker之Dockerfile文件_第4张图片

    将可运行项目放入linux虚拟机中

     容器化技术docker之Dockerfile文件_第5张图片

     

    编写Dockerfile

    FROM openjdk:8
    WORKDIR /ems
    ADD ems.jar /ems
    EXPOSE 8989
    ENTRYPOINT ["java","-jar"]
    CMD ["ems.jar"]

    构建镜像

    [root@localhost ems]# docker build -t ems .

    运行镜像

    [root@localhost ems]# docker run -p 8989:8989 ems

    访问项目

    http://10.15.0.8:8989/ems/login.html



你可能感兴趣的:(容器化技术之docker,docker,容器,运维)