目录

1.Dockerfile

2.镜像结构

3.Dockerfile语法

4.构建Java项目

5.基于Java8构建项目

常见的镜像DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。

而要自定义镜像,就必须先了解镜像的结构才行。

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

我们以MySQL为例,来看看镜像的组成结构

简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件配置文件依赖文件

组合然后编写启动脚本打包在一起形成的文件

我们构建镜像,其实就是实现上述打包过程。  

构建自定义的镜像时,并不需要一个文件拷贝打包

我们需要告诉Docker我们的镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要安

装什么依赖启动脚本是什么,将来Docker会帮助我们构建镜像。

描述上述信息的文件就是Dockerfile文件。

Dockerfile就是一个本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操

作来构建镜像。每一个指令都会形成一层Layer。

更新详细语法说明,请参考官网文档Dockerfile reference | Docker Docs  

需求基于Ubuntu镜像构建一个新镜像,运行一个java项目

Dockerfile内容如下:

# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdkjava项目的包
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
docker build -t javaweb:1.0 
docker run --name web -p 8090:8090 -d javaweb:1.0

 

虽然我们可以基于Ubuntu基础镜像,添加任意自己需要的安装包,构建镜像,但是却比较麻烦。所以大多数情况下,我们都可以在一些安装了部分软件的基础镜像上做改造。

例如,构建java项目的镜像,可以在已经准备了JDK的基础镜像基础上构建。

需求:基于java:8-alpine镜像,将一个Java项目构建为镜像

实现思路如下:

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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注