3.3 Dockerfile自定义镜像

一、镜像结构

  1. 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成

  2. 镜像结构:

    1. 基础镜像(BaseImage),应用依赖的系统函数库、环境、配置、文件等

    2. 安装

    3. 配置

    4. 入口(Entrypoint),镜像运行入口,一般是程序启动的脚本和参数

      备注:上面是按照选后顺序记录的

      ​ 每一步,都可以称为一层(Layer):在BaseImage基础上添加安装依赖、配置等,每次操作都形成新的一层

二、Dockerfile语法

  1. Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每个指令都会形成一层Layer

    指令

    说明

    示例

    FROM

    制定基础镜像

    FROM centos:

    ENV

    设置环境变量,可在后面指令使用

    ENV key value

    COPY

    拷贝本地文件到镜像指定目录

    copy ./mysql-5.7.rpm /tmp

    RUN

    执行Linux的shell命令,一般是安装过程的命令

    RUN yum install gcc

    EXPORT

    制定容器运行时监听的端口,是给镜像使用者看的

    EXPORT 8080

    ENTRYPOINT

    镜像中应用的启动命令,容器运行时调用

    ENTRYPOINT java -jar xxx.jar

    备注:更详细的语法,可以参考官方文档:https://docs.docker.com/engine/reference/builder/

  2. 举例Dockerfile文件

     # 指定基础镜像
     FROM ubuntu:16.04
     # 配置环境变量,JDK的安装目录
     ENV JAVA_DIR=/usr/local
    
     # 拷贝jdk和java项目的包
     COPY ./jdk8.tar.gz $JAVA_DIR/
     COPY ./docker-demo.jar /tmp/app.jar
    
     # 安装JDK
     RUN cd $JAVA_DIR \
      && tar -xf ./jdk8.tar.gz \
      && mv ./jdk1.8.0_144 ./java8
    
     # 配置环境变量
     ENV JAVA_HOME=$JAVA_DIR/java8
     ENV PATH=$PATH:$JAVA_HOME/bin
    
     # 暴露端口
     EXPOSE 8090
     # 入口,java项目的启动命令
     ENTRYPOINT java -jar /tmp/app.jar
  3. 构建命令:docker build -t javaweb:1.0 .

    ​ 从当前目录(.)构建一个javaweb:1.0版本的镜像

最后更新于

这有帮助吗?