🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
本文主要介绍如何将微服务实例的 jar 构建成 docker 镜像。
一、实验环境
本文的试验环境是 CentOS 7.9,如下所示。
[root@k8s-master ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[root@k8s-master ~]#
二、制作 jar
我创建了一个微服务实例,打包成了 jar,如下所示。
上面的微服务实例可以通过 localhost:8088/index 访问,返回 hello,如下所示。
在 Linux 环境中创建一个目录 imagesJar,将 demo-0.0.1-SNAPSHOT.jar 拷贝到该目录下,如下所示。
[node@k8s-master imagesJar]$ ls
demo-0.0.1-SNAPSHOT.jar
[node@k8s-master imagesJar]$
二、打包镜像
在微服务实例同一目录下(imagesJar目录下)创建 DockerFile 文件,如下所示。
[node@k8s-master imagesJar]$ ls
demo-0.0.1-SNAPSHOT.jar DockerFile
[node@k8s-master imagesJar]$
下面编写 DockerFile 文件。
2.1 编写 DockerFile
编写 DockerFile 文件内容如下所示。
#penjdk:8-jre 为基础镜像,来构建此镜像,可以理解为运行的需要基础环境
FROM openjdk:8-jre
#WORKDIR指令用于指定容器的一个目录, 容器启动时执行的命令会在该目录下执行。
WORKDIR /opt/docker/images/metabase/
#将当前metabase.jar 复制到容器根目录下
ADD demo-0.0.1-SNAPSHOT.jar demo-0.0.1-SNAPSHOT.jar
#将依赖包 复制到容器根目录/libs下,metabase.jar已不再需要添加其它jar包
#ADD libs /libs
#暴露容器端口为 8088 Docker镜像告知Docker宿主机应用监听了8088端口
EXPOSE 8088
#容器启动时执行的命令
CMD java -jar demo-0.0.1-SNAPSHOT.jar
2.2 构建 docker 镜像
在 imagesJar 目录下执行如下命令。
[node@k8s-master imagesJar]$ sudo docker build -f DockerFile -t test/demo:1.2.0 .
Sending build context to Docker daemon 16.5 MB
Step 1/5 : FROM openjdk:8-jre
---> 0c14a0e20aa3
Step 2/5 : WORKDIR /opt/docker/images/metabase/
---> Using cache
---> 971fa909168f
Step 3/5 : ADD demo-0.0.1-SNAPSHOT.jar demo-0.0.1-SNAPSHOT.jar
---> Using cache
---> e9c435263fb7
Step 4/5 : EXPOSE 8088
---> Running in 874466bc2650
---> 590b7380444b
Removing intermediate container 874466bc2650
Step 5/5 : CMD java -jar demo-0.0.1-SNAPSHOT.jar
---> Running in 2d14cbde1e3d
---> fff004fa39a7
Removing intermediate container 2d14cbde1e3d
Successfully built fff004fa39a7
[node@k8s-master imagesJar]$
查看打包好的镜像,执行如下命令。
[node@k8s-master imagesJar]$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
test/demo 1.2.0 fff004fa39a7 26 seconds ago 290 MB
test/demo 1.0.0 d1d4460e42b1 25 hours ago 290 MB
test/demo 1.1.0 d1d4460e42b1 25 hours ago 290 MB
nginx alpine 4937520ae206 3 weeks ago 41.4 MB
nginx latest eb4a57159180 3 weeks ago 187 MB
docker.io/openjdk 8-jre 0c14a0e20aa3 11 months ago 274 MB
192.168.231.152:5000/pod-infrastructure latest 99965fb98423 5 years ago 209 MB
registry.access.redhat.com/rhel7/pod-infrastructure latest 99965fb98423 5 years ago 209 MB
tianyebj/pod-infrastructure latest 34d3450d733b 6 years ago 205 MB
[node@k8s-master imagesJar]$
在上图中,test/demo-1.2.0 是新打得镜像。
三、运行镜像
打包完成镜像后,执行如下命令运行镜像。
[node@k8s-master imagesJar]$ sudo docker run -d -p 8088:8088 test/demo:1.2.0
4dbd849d1d79aa0874ee64f5c220a05b5b65395c94e3e12eb6e38e65121ccf29
[node@k8s-master imagesJar]$
查看运行的镜像,如下所示。
[node@k8s-master imagesJar]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4dbd849d1d79 test/demo:1.2.0 "/bin/sh -c 'java ..." 23 seconds ago Up 21 seconds 0.0.0.0:8088->8088/tcp zen_dijkstra
[node@k8s-master imagesJar]$
四、远程访问容器
通过浏览器访问容器,如下所示。
参考链接:
https://blog.csdn.net/Jarbein/article/details/103627413
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞