Dockerfile 构建简单的微服务项目镜像 + jdk docker 镜像
在日常,我们写好了一个微服务,如何把他做成一个镜像呢?有两种选择:
- 第一种选择: 直接使用DockerMaven插件,这样做的优点呢,个人感觉肯定是快速又方便,但是感觉出错了又不好排查。
- 第二种选择: 使用Dockerfile,这种虽然比上面的复杂了一些,但是出错可以排查,可以先测试jar包是否可用,在打成镜像,这样一般是可以直接用。不怎么会出错的。
我这次分享的就是如何利用Dockerfile来制作一个开发好的微服务镜像。如有需要。一定要有耐心看完。
一、 jdk1.8 镜像的制作
在制作微服务镜像之前,我们肯定是要准备一个jdk1.8的镜像的,原因肯定不用多说了,没有jdk的话,你的项目肯定是不可以运行的。那么jdk1.8肯定又依赖centos镜像的。
1.1 拉取contos7镜像
docker pull centos:7
1.2 上传jdk压缩包到linux
这个不用说,相信大家都会。
上传结果如下:
1.3 编写Dockerfile 并上传
#依赖镜像名称和ID(切记,跟你宿主机上centos镜像的名称一样,不要复制我的)
FROM docker.io/centos:7
#指定镜像创建者信息(随便写)
MAINTAINER IMMORT
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
#(切记第一个jdk... 是你jdk文件的名字。不要复制我的,根据实际情况)
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
上传结果图 在上面 dockerfile 与jdk 在同一个目录下
1.4 使用命令制作jdk1.8镜像
docker build -t='jdk1.8' .
-t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
注意: 后面有一个点。此命令在dockerfile所在文件目录下运行。jdk1.8文件也放在此目录下。
1.5 结果
运行上面的命令之后的展示如下:
生成的镜像如下:
二、 微服务项目镜像的制作
2.1 准备微服务项目
我这里采用的项目是 配置中心 的项目来做演示。并不是使用eureka来做演示的。不过结果都一样。选用哪个并不是重点。
具体什么是配置中心, 相信大家都了解。说白了就是管理项目所用的配置文件的。这个用起来还是比较方便的。(配置文件是从gitee中获取的)
项目结构如下图:
2.2 项目模块打包
这里要特别说明一下。我们打包成jar包,一定是要配置maven插件的。打包无法运行。
插件:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
打包命令,直接上截图了:
2.3 测试jar包是否可运行
这里使用java -jar 运行jar包即可
浏览器访问测试jar包是否可以使用,如果可以使用,则你打成docker 镜像也差不多肯定是可以使用的。那么从下图我们可以看到,已经拿到配置文件了。那么我们可以确信,jar包可以使用,则打成镜像基本肯定也是没有问题的。
2.4 上传到linux。编写Dockerfile
上传,相信大家都会,那么Dockerfile 文件内容如下:
# 依赖镜像名称和ID
FROM jdk1.8
ADD app.jar /app.jar
# 暴露的端口
EXPOSE 1300
# RUN:用于执行后面跟着的命令行命令。
RUN bash -c 'touch /app.jar'
# CMD 指令允许用户指定容器的默认执行的命令。此命令会在容器启动且 docker run 没有指定其他命令时运行。
# 那么说白了,就是容器一启动,那么会自动使用java -jar 命令启动项目。
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
上传后的目录结构如下(与上面的jdk1.8的结构一样):
2.5 使用docker命令创建镜像
docker build -t='microservice_config' .
注意事项同上。创建过程如图
创建完成完成的镜像如图
2.6 项目运行测试(大功告成~)
使用命令运行:
docker run -di --name=config -p 13000:13000 microservice_config
浏览器运行测试如图:
总结。
其实这个并不难,大家有耐心一步一步的操作是没有问题的。有机会共同学习!!!!