将自己的程序打包成Docker镜像映射公网访问

背景

Docker是现在主流的容器技术,使用容器部署可以忽略应用依赖环境,我们可以很便捷地部署、更新应用。我们在联调开发过程中,可以借助Docker+Frp这一方案实现远程联调。

Dockerfile编写

我现在在/opt/english-learn目录下准备好了我的程序包english-learn-backend-1.0-SNAPSHOT.jar,下面我会把他打包进Docker镜像中。我们还需要Dockerfile文件,下面是我的Dockerfile文件示例:

# 使用官方的Java 8运行时作为父镜像
FROM openjdk:8-jre

# 将jar包添加到容器中
COPY ./*.jar /app.jar

# 设置工作目录
WORKDIR /

# 指定容器启动时执行的命令
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"]

这个Dockerfile定义了镜像制作步骤,首先下载openjdk:8-jre基础镜像,然后将当前目录/opt/english-learn下的*.jar文件复制到容器/根目录下,并且重新命名包名为app.jar。设置工作目录为/根目录,最后指定启动容器的命令。

镜像制作

Dockerfile编写完成后,我的/opt/english-learn目录下就有两个文件:

root@root:/opt/english-learn# ls -l
total 48844
-rw-r--r-- 1 root root      276 May  4 02:59 Dockerfile
-rw-r--r-- 1 root root 50005065 May  4 16:51 english-learn-backend-1.0-SNAPSHOT.jar

接下来我们直接制作镜像:

docker build -t english-learn .

等待命令执行完成,这样我们就制作好了我们的english-learn镜像。docker images查看Dcoker镜像:

root@root:/opt/english-learn# docker images
REPOSITORY                  TAG                    IMAGE ID       CREATED             SIZE
english-learn               latest                 85499e063e25   About an hour ago   316MB

启动容器

在镜像制作好之后我们就可以启动应用容器了:

docker run --name english-learn -d -p 18080:8080 english-learn

我们运行english-learn:latest镜像,指定容器名称为english-learn,让容器在后台运行,将容器内的8080端口映射到虚机的18080。这样我们就可以使用ip:18080访问服务了。

因为每次Jar包更新我们都需要重新重新执行上面的步骤,重新制作镜像->重启容器。我给出我的镜像重新构建的脚本rebuild.sh,一键重构镜像并且运行容器去更新应用:

docker stop english-learn
docker rm english-learn
docker build -t english-learn .
docker run --name english-learn -d -p 19063:8080 english-learn

大家在使用过程中只要把english-learn替换成自己的应用名称。这样的话每次更新我们只要更换目录下的Jar包,再执行rebuild.sh脚本文件即可完成应用更新的发布。

公网访问

在我们使用Docker部署我们的应用之后,有时候我们远程联调需要把服务暴露到公网,这个时候就需要用到内网穿透的解决方案,frp是个不错的选择。

这需要我们有一台公网服务器,我们在服务器端配置frp服务端,在我们内网虚机中配置frp客户端,通过配置把我们的内网服务映射到公网。这里不做详细介绍。感兴趣的可私信留言,也可以参见本人往期博客《树莓派内网端口映射》。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

H3C MSTP 实验

H3C MSTP 实验 实验拓扑 ​​ 实验需求 所有交换机上创建 Vlan10,Vlan20,Vlan30 和 Vlan40所有交换机之间的端口配置为 Trunk,并放行相关 VLAN按照图示分区域配置 MSTP,并配置主备根网桥 实验步骤 VLAN基础配置(…

RateLimiter 限流 —— 通过切面对单个用户进行限流和黑名单处理

关于登录的安全性管理有较多的手段,包括;设备信息、IP信息、绑定的信息、验证码登各类方式。不过在一些网页版的登录中,如果有人想办法把你的验证码给我,我就可以登录你的账户,查看你的数据。对于一些不法分子通过让你…

windows 驱动开发-DMA技术(二)

前面描述了DMA技术中适配器相关的部分以及DMA的分类,接下来看一下系统具体在支持两种DMA时候的操作的细微差别。 此处解释一下Scatter/Gather,这个也翻译为散点/收集,是指指示设备能够读取或写入内存中的任何区域,而不仅仅是特定…

构建智能化商旅服务:酒店中台云服务架构设计与实践

随着商旅行业的不断发展和智能化趋势的兴起,酒店中台云服务成为了提升服务质量和效率的关键。本文将探讨酒店商旅中台云服务的架构设计与实现,介绍其关键特点和最佳实践,助力商旅行业迈向智能化未来。 1. **需求分析与场景设计:*…

【阿里云服务器】ubuntu 22.04.1安装docker以及部署java环境

我的服务器配置是2GB CPU 2GB 内存 Ubuntu22.04 目录 一、阿里云 ubuntu 22.04.1安装docker 二、docker基础命令 三、Windows电脑访问云服务器 四、安装java环境 安装OpenJDK 8(可以根据需要安装其他版本的JDK) 安装java的依赖管理工具maven 一、…

基于yolov2深度学习网络模型的鱼眼镜头中人员检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 load yolov2.mat% 加载训练好的目标检测器 img_size [448,448]; imgPath test/; % 图像…

LeetCode 15 —— 三数之和

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 首先我们对数组进行从小到大排序,然后遍历数组 [ 0 , n u m s . s i z e ( ) − 3 ] [0,nums.size()-3] [0,nums.size()−3] 作为三元组中的 a a a,由于三元组的索引互不相同&#xff0c…

文件与IO基础常识知识

在这里,只介绍理论知识,不介绍代码。 目录 1.IO 1.1.字面概念 1.2.输入输出模型 2.文件 2.1.文件目录 2.2.文件路径 2.3.文件分类 1.IO 为了我们接下来学习的文件IO,所以我们先来认识什么是IO。 1.1.字面概念 (1&#x…

【知识加油站】——机电产品数字孪生机理模型构建

明确一种多领域、多层次、参数化、一致性的机电一体化装备数字孪生机理模型构建准则! 关键词英文简称: 数字孪生:DT物联网:IoT网络物理系统:CPS高级架构:HLA统一建模语言:UML数控机床&#xf…

Sarcasm detection论文解析 |A2Text-Net:一种用于讽刺检测的新型深度神经网络

论文地址 论文地址:A2Text-Net: A Novel Deep Neural Network for Sarcasm Detection | IEEE Conference Publication | IEEE Xplore github:lliyuan1117/A2Text-Net (github.com) 论文首页 A2Text-Net:一种用于讽刺检测的新型深度神经网络 &#x1f4c5…

Win11 怎么让软件运行后台全部显示在任务栏上 win11任务栏展开显示所有软件图标

Win11 怎么让软件运行后台全部显示在任务栏上 win11任务栏展开显示所有软件图标 方法二 搜索cmd 打开命令行面板 然后输入 explorer shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}就能显示出来了 ## 方法三 通知区域图标不存在 如图,显示为这样 这种时候桌面…

深入解析Java中的String对象及其性能优化

作者主页: 🔗进朱者赤的博客 精选专栏:🔗经典算法 作者简介:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名) ❤️觉得文章还…

uniapp乡村社区户籍问外来人员管理系统 微信小程序python+java+node.js+php

基于微信小程序的外来人员管理系统项目的概述设计分析,主要内容有的私教预约平台系统平台的具体分析,进行数据库的是设计,数据采用MySQL数据库,并且对于系统的设计采用比较人性化的操作设计,对于系统出现的错误信息可以…

用Jenkins Gerrit-Trigger插件实现提交gerrit后自动启动编译验证-解决编译依赖问题

用Jenkins Gerrit-Trigger插件实现提交gerrit后自动启动编译验证-CSDN博客讨论了如何利用插件在提交gerrit的时候自动出发一个jenkins job编译固件,但是没有解决编译依赖问题。本文提出一种解决方案 首先在git commit -m ""的时候在commit message中设置Depend-On:…

Typescript基础语法(四)

模块化 模块化是指将复杂的程序拆解为多个独⽴的⽂件单元,每个⽂件被称为⼀个模块。在 TypeScript 中,默认情况下,每个模块都拥有⾃⼰的作⽤域,这意味着在⼀个模块中声明的任何内容(如变量、函数、类等)在该…

我们的手机是如何连接上网的?骨干网又是什么?

什么是骨干网(Backbone Network) 几台计算机连接起来,互相可以看到其他人的文件,这叫局域网。整个城市的计算机都连接起来,就是城域网。把城市之间连接起来的网就叫骨干网。 这些骨干网是国家批准的可以直接和国外连…

CUDA CPP Unity Compute Shader

为学 开始一个新的学习计划,涵盖: 主题学习内容CUDAProfessional CUDA C Programming/NVIDIA CUDA初级教程视频(周斌)CCPrimer / The Cherno CPPUnity Compute ShaderUdemy Learn to Write Unity Compute ShadersLinear AlgebraMIT 18.06 Prof.Gilbert…

【Anaconda 3 】Jupyter Notebook 的安装配置及使用

Jupyter Notebook 的安装配置及使用 一、引言 Jupyter Notebook 是一种交互式笔记本,它允许用户将代码、注释、方程式、可视化内容等整合到一个文档中,并支持多种编程语言,如 Python、R、Julia 等。它在数据科学、机器学习和教育领域中得到…

Idea 自动生成测试

先添加测试依赖&#xff01;&#xff01; <!--Junit单元测试依赖--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9.1</version><scope>test</scope><…

MATLAB 集成

MATLAB 集成&#xff08;Integration&#xff09; 集成处理两种本质上不同的问题。 在第一种类型中&#xff0c;给出了函数的导数&#xff0c;我们想找到函数。因此&#xff0c;我们从根本上扭转了分化的过程。这种反向过程称为反微分&#xff0c;或者找到原始函数&#xff0…
最新文章