Docker4️⃣自定义镜像

1、镜像结构

镜像:应用程序及其所需函数库、依赖、环境配置等文件打包在一起形成的文件包。

  • 基础镜像:应用程序所需的系统函数库、环境配置、文件等。

  • :镜像中的每个步骤(添加安装包、依赖等)都作为单独的一层,以提高复用性。

  • 入口:镜像运行入口,一般是程序的启动脚本和参数。

    image-20210731175806273

2、Dockerfile(❗)

Dockerfile:描述性文本文件

  • 通过指令(Instruction),描述构建镜像所要执行的操作。

  • 每个指令都会形成一层 Layer。

  • 参考官网文档

    含义 说明
    FROM 指定基础镜像 基础镜像可以是操作系统,或制作好的镜像
    ENV 设置环境变量
    COPY 将本地文件拷贝到镜像的指定目录
    RUN 执行 Linux 的 shell 命令 通常用于安装操作
    EXPOSE 暴露端口 指定容器运行时的监听端口
    ENTRYPOINT 入口点 镜像中应用的启动命令,运行容器时调用

3、构建镜像

3.1、步骤

  1. 新建空文件夹,用于构建镜像。
    • 依赖文件(如安装包,项目 jar 包)
    • Dockerfile
  2. 将文件夹上传到服务器(或直接在服务器中进行以上操作)
  3. Docker build

3.2、case:构建 Java 项目

3.2.1、基于 CentOS

  1. 在服务器新建空文件夹,用于构建镜像。

    • 相关文件

      • JDK 安装包(.tar.gz
      • 项目 jar 包(任意能正常访问的 web 项目)
    • Dockerfile:安装 JDK,导入 Java 项目,暴露端口,入口点

      # 基础镜像
      FROM centos:7
      # 安装JDK
      # 安装目录
      ENV JAVA_DIR=/usr/local
      # 拷贝安装包
      COPY ./jdk8.tar.gz $JAVA_DIR/
      # 安装
      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
      
      # Java项目
      COPY ./docker-demo.jar /tmp/app.jar
      # 暴露端口:web项目中配置的访问端口
      EXPOSE 8090
      # 入口,java项目的启动命令
      ENTRYPOINT java -jar /tmp/app.jar
      
  2. 构建镜像:在 docker-demo 目录下执行命令

    # -t 镜像名 dockerfile位置
    docker build -t myweb:1.0 .
    
  3. 查看镜像:构建时会自动下载基础镜像(CentOS),成功构建自定义镜像

    image-20220601120029062

3.2.2、基于 alpine

示例:基于 java:8-alpine 镜像,将 Java 项目构建为镜像。

  1. 在服务器新建空文件夹

  2. 只需导入项目 jar 包,无需导入 JDK 安装包。

  3. Dockerfile:指定基础镜像即可安装 JDK

    FROM java:8-alpine
    COPY ./app.jar /tmp/app.jar
    EXPOSE 8090
    ENTRYPOINT java -jar /tmp/app.jar
    

3.2.3、说明

  • 以上 2 个案例,区别在于 dockerfile 中指定的基础镜像。
  • 其余内容和后续操作步骤相同。
posted @ 2022-06-01 14:56  Jaywee  阅读(38)  评论(0编辑  收藏  举报

👇