Dockerfile文件制作
1 | # |
The JAR_FILE could be passed in as part of the docker command E.g. for Maven:
JAR_FILE可以作为docker命令的一部分传入,就是target/*.jar1
$ docker build --build-args=target/*.jar -t myorg/myapp .
如果你已经有了jar包则可以直接指定位置,来制作镜像1
2
3
4FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
现在我们可以简单的构建镜像1
$ docker build -t myorg/myapp .
然后运行1
$ docker run -p 80:8080 myorg/app
如果你像进入镜像查看可以输入1
2
3
4
5$ docker run -ti --entrypoint /bin/sh myorg/myapp
/ # ls
app.jar dev home media proc run srv tmp var
bin etc lib mnt root sbin sys usr
/ #
目前docker的配置非常简单,但是效率不高。docker镜像有一个简单文件系统分层放置jar包,每一次
对程序的改动都会影响到该层,肯能是10M或者更多。我们应该将jar分到其他层来改善这种情况。
精简图像
上述构建镜像的基础镜像是:openjdk:8-jdk-alpine,这是一个比标准更为精简的镜像。然后你还可以使用“jre”而非
“jdk”来作为基础镜像可以省下20MB的空间,并不是说图像越小越好,小只是代表下载方便,前提是,他们的没有中间层被缓存
解压缩文件到target/depency目录,并构建docker镜像1
2
3$ mkdir target/dependency
$ (cd target/dependency; jar -xf ../*.jar)
$ docker build -t myorg/myapp .
构建镜像dockerFile1
2
3
4
5
6
7FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","hello.Application"]
多阶段构建
1 | FROM openjdk:8-jdk-alpine as build |
docker-compose的max-size选项来实现控制容器日志大小