目录
[1 前言](#1 前言)
[2 构建java应用的步骤及镜像结构图](#2 构建java应用的步骤及镜像结构图)
[2.1 构建步骤](#2.1 构建步骤)
[2.2 镜像结构图](#2.2 镜像结构图)
[3 Dockerfile常用指令](#3 Dockerfile常用指令)
[4 Dockerfile的内容举例](#4 Dockerfile的内容举例)
[4.1 一般形式](#4.1 一般形式)
[4.2 一般形式的优化](#4.2 一般形式的优化)
[5 构建镜像](#5 构建镜像)
[5.1 指令](#5.1 指令)
[5.2 实操](#5.2 实操)
[5.2.1 加载jdk镜像(基础镜像)](#5.2.1 加载jdk镜像(基础镜像))
[5.2.2 构建我们的镜像](#5.2.2 构建我们的镜像)
[5.2.3 使用我们的镜像](#5.2.3 使用我们的镜像)
1 前言
本文参考自黑马程序员,算是学习笔记。
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。具体如下。
2 构建java应用的步骤及镜像结构图
2.1 构建步骤
①准备一个Linux运行环境
②安装JRE并配置环境变量
③拷贝Jar包
④编写运行脚本
2.2 镜像结构图
该图片来自黑马程序员:
3 Dockerfile常用指令
指令 | 说明 | 示例 |
---|---|---|
FROM | 指定基础镜像 | FROM centos:7 |
ENV | 设置环境变量,可在后面指令使用 | ENV key value |
COPY | 拷贝本地文件到镜像的指定目录 | COPY ./jre11.tar.gz /tmp |
RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN tar -zxvf /tmp/jre11.tar.gz && EXPORTS path=/tmp/jre11:$path |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的,只是一个描述 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
更多详细内容可查看官网:
4 Dockerfile的内容举例
4.1 一般形式
bash
# 指定基础镜像
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
# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]
语句解释:
FROM ubuntu:16.04
:指定基础镜像为Ubuntu 16.04。
ENV JAVA_DIR=/usr/local
:设置环境变量JAVA_DIR
为/usr/local
,表示JDK的安装目录。
COPY ./jdk8.tar.gz $JAVA_DIR/
:将本地的jdk8.tar.gz
文件复制到容器的/usr/local/
目录下。
COPY ./docker-demo.jar /tmp/app.jar
:将本地的docker-demo.jar
文件复制到容器的/tmp/
目录下。
RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \ && mv ./jdk1.8.0_144 ./java8
:在容器中执行的命令,解压jdk8.tar.gz
文件,并将解压后的目录重命名为java8
。
ENV JAVA_HOME=$JAVA_DIR/java8
:设置环境变量JAVA_HOME
为/usr/local/java8
,指定JDK的安装路径。
ENV PATH=$PATH:$JAVA_HOME/bin
:将Java的bin
目录添加到系统的PATH
环境变量中,以便可以直接运行Java命令。
ENTRYPOINT ["java", "-jar", "/app.jar"]
:指定容器启动时执行的默认命令,即运行Java应用程序。这里使用java -jar /app.jar
启动/tmp/app.jar
中的Java应用程序。
4.2 一般形式的优化
一般形式中存在着许多可以复用的内容,在我们编程的时候,我们经常会将可复用的内容写成一个函数。同理,有人也将Dockerfile的可复用部分打包成了一个基础镜像。因此可以优化如下:
bash
# 基础镜像
FROM openjdk:11.0-jre-buster
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
5 构建镜像
5.1 指令
bash
docker build -t myImage:1.0 .
这个命令中,最后一部分表示在目录中查找名为
Dockerfile
的文件(如果是点则表示当前目录),并使用它来构建(-t)一个名为myImage
版本号为1.0(没指定版本号默认latest)
的Docker镜像。
5.2 实操
5.2.1 加载jdk镜像(基础镜像)
jdk镜像的百度网盘链接如下:
链接: https://pan.baidu.com/s/1p7jNRQX42cyZ3M4uOaSOMA?pwd=5ew2
提取码: 5ew2