微服务实例构建成 docker 镜像实例


🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、实验环境

二、制作 jar

二、打包镜像

2.1 编写 DockerFile

2.2 构建 docker 镜像

三、运行镜像

四、远程访问容器


本文主要介绍如何将微服务实例的 jar 构建成 docker 镜像。

一、实验环境

本文的试验环境是 CentOS 7.9,如下所示。

[root@k8s-master ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[root@k8s-master ~]#

二、制作 jar

我创建了一个微服务实例,打包成了 jar,如下所示。

图1 微服务实例

上面的微服务实例可以通过 localhost:8088/index 访问,返回 hello,如下所示。

图2 访问微服务

 在 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/#将当前目录下 demo-0.0.1-SNAPSHOT.jar 复制到容器根目录下
ADD demo-0.0.1-SNAPSHOT.jar demo-0.0.1-SNAPSHOT.jar#将依赖包 复制到容器根目录/libs下,demo-0.0.1-SNAPSHOT.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]$

四、远程访问容器

通过浏览器访问容器,如下所示。

图3 通过浏览器访问容器

参考链接:

https://blog.csdn.net/Jarbein/article/details/103627413


🎈 感觉有帮助记得「一键三连支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/21856.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8.带你入门matlab 数据统计与分析——区间参数估计 均匀分布(matlab 程序 )

1.简述 本文将涉及到数理统计的最后一个模块——参数估计,后续将更新的模块是多项式计算、数据插值和曲线拟合。 在讲述使用matlab来实现参数估计之前,有必要去了解一些基本原理。 1.离散型随机变量的极大似然估计法: (1) 似然函数 若X为离散型, 似然函数…

SQL进阶(2)——SQL语句类型 增删改查CRUD 事务初步 表关联关系 视图 +索引

目录 引出SQL语句类型1.DML数据操纵语言(重点)2.DQL数据查询语言(重点)3.DDL(Data Definition Language了解)4.DCL(Data Control Language了解)5.TCL 事务控制语言 运算符和其他函数1.运算符2.其它函数增删改查CRUD 视图索引事务1…

Qt实现画板绘制椭圆

Qt在窗体中绘图在paintEvent函数中进行,使用QPainter类进行窗体绘制 如果只是简单的在paintevent中向画布绘制椭圆,由于实时绘制的许多个椭圆重合在一起,就会出现下面的情况 你可以在每次绘制椭圆之前调用清空画布 myPix->fill(Qt::white);但是又会出现下面的情况,无法…

UE使用UnLua(一)

一、概述 Unlua是个功能丰富的插件,可以在UE中进行蓝图绑定,在Lua中进行逻辑开发,使用Lua热更新的特性,可以快速开发迭代表层逻辑 二、UnLua环境 首先下载UnLua的插件包,点击下载,不会吧不会吧还有人打不…

计算机网络-运输层

目录 一、运输层概述 二、运输层端口号、复用和分用的概念 (一)端口号 (二)发送方的复用和接收方的分用 (三)TCP/IP体系的应用层常用协议所使用的运输层熟知端口号 三、UDP和TCP的区别 四、TCP的流量…

DAY46:动态规划(八)01背包应用2:一和零(二维容量01背包)

文章目录 474.一和零思路为什么不是多重背包而是01背包与之前01背包问题的区别 DP数组的含义递推公式(也是求最大值)初始化遍历顺序完整版总结 474.一和零 本题属于 装满背包最多能有多少个物品 类型本题是容量有两个维度的背包,背包容量是m…

奥特曼与钢铁侠【InsCode Stable Diffusion美图活动一期】

文章目录 简介图片生成步骤更多体验方式 简介 InsCode 是一个一站式的软件开发服务平台,从开发-部署-运维-运营,都可以在 InsCode 轻松完成。 InsCode 的 Ins 是 Inspiration,意思是创作、寻找有灵感的代码。 Stable Diffusion是文图生成模型…

手机快充协议

高通:QC2.0、QC3.0、QC3.5、QC4.0、QC5.0、 FCP、SCP、AFC、SFCP、 MTKPE1.1/PE2.0/PE3.0、TYPEC、PD2.0、PD3.0/3.1、VOOC 支持 PD3.0/PD2.0 支持 QC3.0/QC2.0 支持 AFC 支持 FCP 支持 PE2.0/PE1.1 联发科的PE(Pump Express)/PE 支持 SFCP 在PP…

narak靶机详解

narak靶机复盘 首先对靶机进行扫描,找到靶机的真实ip地址。 然后dirb进行目录扫描,扫描到一个目录,我们打开发现是一个登陆界面。 并没有用户名和密码,我们就用cewl扫描这个网站,扫出一个字典,用来暴力破…

【微信小程序创作之路】- 小程序窗口整体配置(导航栏、标题)

【微信小程序创作之路】- 小程序窗口导航栏配置 第五章 微信小程序窗口导航栏配置 文章目录 【微信小程序创作之路】- 小程序窗口导航栏配置前言一、入口文件的配置二、页面配置三、全局默认窗口配置1.navigationBarTitleText:导航栏标题文字2.navigationBarBackgr…

Unity 限制范围-限制在4分之一圆柱形范围内活动

在我的游戏中,玩家的两只手操控中,不想让他们的手围着自己在一个圆形范围内随便乱跑,左手只想让他在左上角,右手在右上角范围活动。所以我制作这样一个算法来实现。 首先用Dot函数划分出4个区域,然后根据区域计算修正…

分配操作菜单

目录 概述介绍数据库后端前端效果展示 概述 在写后台管理系统时, 我们可以根据不同的登录人,给予不同的功能菜单 如 :给楼栋管理员登录时分配(楼栋管理,宿舍管理) 所以在数据库就要创建: 1.登录人与角色表, 2再给角色表分配操作菜单 登录时查询对应的操作菜单,将数据响应给前端…