SpringBoot项目部署(Docker)——通过Dockerfile将打包好的jar包创建成镜像 在IDEA中配置docker,一键启动容器 用swagger进行测试

目录

  • 引出
  • SpringBoot项目部署(jar包)
  • Dockefile初识
  • idea配置docker
    • 在Linux中配置docker remote api
    • 配置idea docker插件
  • 部署项目Springboot整合Dockerfile
    • 准备项目
    • 创建Dockerfile文件
    • 进行测试
  • 总结

引出


1.Dockerfile命令初识,CMD…;
2.idea配置docker,图形化界面;
3.编写Dockerfile把jar包制作成镜像,并用idea一键生成和启动容器;
4.在Linux中测试,在宿主机用swagger进行测试;

SpringBoot项目部署(jar包)

SpringBoot项目部署(jar包)——项目用maven打包成jar包 & windows + Linux平台运行 & Linux安装java & 遇到的问题

在这里插入图片描述

Dockefile初识

在这里插入图片描述

Docker是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用中,可以实现快速部署。Docker利用容器(Container)来运行应用。容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。Docker的主要概念包括镜像和容器。

其中,Images(镜像)是一个只读模板,含创建Docker容器的说明,它与操作系统的安装光盘有点像。Containers(容器)是镜像的运行实例,镜像与容器的关系类比面向对象中的类和对象。Docker镜像通过Dockefile文件构建,文件中包含指定的基础镜像、运行命令等

在这里插入图片描述

在这里插入图片描述

FROM:指定创建镜像的基础镜像

MAINTAINER:Dockerfile作者信息,一般写的是联系方式

RUN:运行Linux系统的命令使用

CMD:指定容器启动执行的命令;启动容器中的服务

LABEL:指定生成镜像的源数据标签

EXPOSE:指定镜像容器监听端口号;发布服务使用

ENV:使用环境变量

ADD:对压缩文件进行解压缩;将数据移动到指定的目录

COPY:复制宿主机数据到镜像内部使用

WORKDIR:切换到镜像容器中的指定目录中

VOLUME:挂载数据卷到镜像容器中

USER:指定运行容器的用户

ARG:指定构建运行时参数

ONBUILD:创建镜像,作为其他镜像的基础镜像运行操作指令

ENTRYPOINT:指定运行容器启动过程执行命令,覆盖CMD参数

idea配置docker

在Linux中配置docker remote api

配置docker.service 让linux开放Docker Remote API。

查询配置文件位置

systemctl show —property=FragmentPath docker

在这里插入图片描述

[root@localhost ~]# systemctl show --property=FragmentPath docker
FragmentPath=/usr/lib/systemd/system/docker.service
[root@localhost ~]# cat /usr/lib/systemd/system/docker.service

在这里插入图片描述

使用vim编辑此文件

[root@localhost ~]# vim /usr/lib/systemd/system/docker.service
 ExecStart=/usr/bin/dockerd-current -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 \

在这里插入图片描述

修改语句

ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 \--add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \--default-runtime=docker-runc \--exec-opt native.cgroupdriver=systemd \--userland-proxy-path=/usr/libexec/docker/docker-proxy-current \--init-path=/usr/libexec/docker/docker-init-current \--seccomp-profile=/etc/docker/seccomp.json \$OPTIONS \$DOCKER_STORAGE_OPTIONS \$DOCKER_NETWORK_OPTIONS \$ADD_REGISTRY \$BLOCK_REGISTRY \$INSECURE_REGISTRY \$REGISTRIES
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
KillMode=process
[Install]
WantedBy=multi-user.target

在这里插入图片描述

重载配置文件

[root@localhost ~]# systemctl daemon-reload

重启docker

[root@localhost ~]# systemctl  restart docker

测试2375端口

[root@localhost ~]# netstat -nplt|grep 2375
tcp6       0      0 :::2375                 :::*                    LISTEN      30524/dockerd

在这里插入图片描述

linux开放2375端口

在这里插入图片描述

[root@localhost ~]# firewall-cmd --zone=public --list-ports
8000/tcp 445/tcp 8848/tcp 8080/tcp 
[root@localhost ~]# firewall-cmd --zone=public --add-port=2375/tcp --permanent
success
[root@localhost ~]# firewall-cmd --reload 
success
[root@localhost ~]# firewall-cmd --zone=public --list-ports
8000/tcp 445/tcp 8848/tcp 8080/tcp 2375/tcp

测试配置

curl localhost:2375/info

在这里插入图片描述

配置idea docker插件

1.打开settings—>docker

在这里插入图片描述

docker下点击加号

在这里插入图片描述

在这里插入图片描述

2.配置docker插件

在这里插入图片描述

3.在Services中会出现Docker选项。

在这里插入图片描述

4.选中Docker图标,鼠标左键双击会显示容器中的内容。

在这里插入图片描述

部署项目Springboot整合Dockerfile

准备项目

package com.tianju.jpa.controller;import com.tianju.jpa.entity.Car;
import com.tianju.jpa.service.ICarService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@Api(tags = "查询所有汽车的api接口类")
@RestController
@RequestMapping("/api/car")
public class CarController {@Autowiredprivate ICarService carService;@ApiOperation("findAll查询所有车的测试")@GetMapping("/findAll")public List<Car> findAll(){List<Car> all = carService.findAll();System.out.println(all);return all;}
}

在这里插入图片描述

打包成jar包

在这里插入图片描述

创建Dockerfile文件

#使用java环境,anapsix/alpine-java:latest java环境的镜像
FROM anapsix/alpine-java:latest
# 项目的端口,内部服务端口
EXPOSE 9089
# 切换到容器内部的 /workdir目录
WORKDIR /workdir# 添加要运行的jar文件
COPY target/spring-boot-jpa-1.0-SNAPSHOT.jar /workdir/JpaApp.jar# 容器启动后运行的命令
ENTRYPOINT ["java","-jar","/workdir/JpaApp.jar"]

在这里插入图片描述

参数设置

在这里插入图片描述

在这里插入图片描述

设置 host与docker容器绑定的端口号

在这里插入图片描述

镜像名,容器名

在这里插入图片描述

运行创建镜像和容器

在这里插入图片描述

镜像创建成功

在这里插入图片描述

Deploying 'springboot-jpa Dockerfile: DockerFile'��
Building image��
Preparing build context archive��
[==================================================>]86/86 files
DoneSending build context to Docker daemon��
[==================================================>] 50.11MB
DoneStep 1/5 : FROM anapsix/alpine-java:latest---> c45785c254c5
Step 2/5 : EXPOSE 9089---> Running in 339c0fb340d8---> f68047af49d2
Removing intermediate container 339c0fb340d8
Step 3/5 : WORKDIR /workdir---> 5e761fdb7189
Removing intermediate container 304cf8219b25
Step 4/5 : COPY target/spring-boot-jpa-1.0-SNAPSHOT.jar /workdir/JpaApp.jar---> 4df14839f1d1
Removing intermediate container df30a130b405
Step 5/5 : ENTRYPOINT java -jar /workdir/JpaApp.jar---> Running in 96797fd1ee7a---> 2f339789e889
Removing intermediate container 96797fd1ee7a
Successfully built 2f339789e889
Creating container��
Container Id: a773c3ea278c6a56666d3a8253fd471c36bd8c4abf430a617cfdbb395eda0725
Container name: 'springboot-jpa'
Starting container 'springboot-jpa'
'springboot-jpa Dockerfile: DockerFile' has been deployed successfully.

容器运行成功

在这里插入图片描述

端口启动成功

在这里插入图片描述

进行测试

linux服务器测试(docker容器装在此服务器) : curl url

 curl 192.168.111.130:9089/api/car/findAll

在这里插入图片描述

从外部访问容器。

http://192.168.111.130:9089/doc.htm

在这里插入图片描述


总结

1.Dockerfile命令初识,CMD…;
2.idea配置docker,图形化界面;
3.编写Dockerfile把jar包制作成镜像,并用idea一键生成和启动容器;
4.在Linux中测试,在宿主机用swagger进行测试;

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

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

相关文章

Fiddler抓取HTTPS最全(强)攻略

对于想抓取HTTPS的测试初学者来说&#xff0c;常用的工具就是fiddler。可是在初学时&#xff0c;大家对于fiddler如何抓取HTTPS真是伤了脑筋&#xff0c;可能你一步步按着网上的帖子成功了&#xff0c;那当然是极好的。 有可能没有成功&#xff0c;这时候你就很抓狂了&#xff…

Unity3D Shader 之透视效果XRay

1、 Shader "Unlit/XRay" {Properties{_MainTex("Texture", 2D) "white" {}// 漫反射_Diffuse("Diffuse", COLOR) (1,1,1,1)// XRay 效果_XRayColor("XRay Color", COLOR) (0,1,1,1)_XRayPower("XRay Power",…

RxJS 操作符-学习笔记

提前准备&#xff1a; pipe 方法: 用于组合多个操作符,可以将一系列操作符作为参数传递给 pipe 方法&#xff0c;这些操作符将 依次 对数据流进行处理。这里的依次很关键&#xff0c;也代表着pipe()中组合的这么几个操作符的执行顺序就是从开始一直到结束的&#xff0c;其中的…

Mysql 将表里的两列值数据互换

示例&#xff1a; 需要将表中的 两个订单号互换 方案&#xff1a; 将同一张表数据做 临时数据 和主表 做数据交互 。 update 表 as main, 表 as temp set main.bill_no temp.track_bill_no, main.track_bill_no temp.bill_no where main.id temp.id…

小白的2023总结与未来的妄想

嘿&#xff0c;各位&#xff0c;很高兴各位能看到这篇文章&#xff0c;先祝各位家人2024财源茂盛达三江&#xff0c;生意兴隆通四海&#xff01;&#xff01;&#xff01;&#xff01; 那么作为一个还在读大三的入门小白&#xff0c;这一年得益于身边的各个校外大佬与校内老师的…

【Oracle数据库】两个服务端通过一个端口分别读写两个数据库账户下的表

允许两个服务端文件通过一个端口分别读写两个数据库账户下的表格数据&#xff0c;并且这两个用户名下的表格数据在一个表空间&#xff01; Q&#xff1a;一个Oracle表空间中两个用户下面的表&#xff0c;我用服务端写入和读取这两个用户下面的表格时&#xff0c;可以用一样的端…

test coverate-04-测试覆盖率 Cobertura Cobertura/emma/jacoco 的差异对比?

拓展阅读 test 系统学习-04-test converate 测试覆盖率 jacoco 原理介绍 test 系统学习-05-test jacoco 测试覆盖率与 idea 插件 test 系统学习-06-test jacoco 关于 Cobertura Cobertura是一个免费的Java代码覆盖率报告工具&#xff0c;基于jcoverage 1.0.5。详细信息请参…

新手小白如何搭建自己的服务器

由于近期六年前的域名到期了&#xff0c;阿里云的客服电话&#xff0c;正好提醒了我需要管理下这方面的东西&#xff0c; 正好看到阿里云的服务器99/年&#xff0c;而且可以原价续费两年&#xff0c;截止日期为2026年3月&#xff0c;所以我还是剁手了。 借着这次机会写一部分建…

lv 14 字符设备读写操作实现 5

一、读操作实现 ssize_t xxx_read(struct file *filp, char __user *pbuf, size_t count, loff_t *ppos); 完成功能&#xff1a;读取设备产生的数据 参数&#xff1a;filp&#xff1a;指向open产生的struct file类型的对象&#xff0c;表示本次read对应的那次openpbuf&#xf…

分布式(7)

目录 31.基于Zookeeper如何实现分布式锁&#xff1f; 32.什么是ACID&#xff1f; 33.什么是分布式的XA协议&#xff1f; 34.什么是2PC&#xff1f; 35.什么是3PC&#xff1f; 31.基于Zookeeper如何实现分布式锁&#xff1f; 顺序节点 创建一个用于发号的节点“/test/lock…

Underactuated Robotics - 欠驱动机器人学

系列文章目录 DRAKE - 基于模型的机器人设计与验证 由丰田研究所支持的 C / Python 工具箱。 前言 © Russ Tedrake, 2023 注&#xff1a;这是麻省理工学院一门课程的工作笔记。它们将在 2023 年春季学期中不断更新。讲座视频可在 YouTube 上观看。 您也可以从这里下载…

应用在游戏机触摸屏中的触摸感应芯片

触屏游戏机的屏幕是由液晶屏和触控层组成的。触控层分为电容式触屏和电阻式触屏两种。电容式触屏是将悬空电极和屏幕玻璃上的电极组成静电场,当人体接近屏幕时,就会改变静电场分布,从而实现触摸的位置探测。而电阻式触屏则是利用玻璃上的两层电极之间通电形成一个电阻值,当手指…

【python入门】day19:学生管理系统需求分析、系统设计、主函数设计

需求分析 应具备功能—— 添加学生及成绩信息&#xff1b; 将学生信息保存到文件中&#xff1b; 修改和删除学生信息&#xff1b; 查询学生信息&#xff1b; 根据学生成绩进行排序&#xff1b; 统计学生的总分 系统设计 1.录入学生信息模块 2.查找 3.删除 4.修改 5.成绩排名…

数据分析求职-简历准备

简历在整个求职过程中的重要性不言而喻&#xff0c;今天咱们来聊求职过程中简历准备的那些事儿~ 1. 简历究竟有啥用 求职的流程简单说就是&#xff1a;网申->笔试->面试->offer 其中网申环节&#xff0c;简历100%决定了你的通过与否&#xff0c;这个点大家都知道。…

react 6种方式编写样式

在React中&#xff0c;编写样式主要有以下几种方式&#xff1a; 内联样式&#xff1a;直接在React组件中使用style属性来定义样式。这种方式比较适合定义动态的样式&#xff0c;因为它允许你将JavaScript表达式作为样式的值。 外部样式表&#xff1a;通过创建外部的CSS文件&am…

计算机Java项目|Springboot+vue 学生心理咨询评估系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、Python项目、前端项目、人工智能与大数据、简…

数据结构入门到入土——ArrayList与顺序表

目录 一&#xff0c;线性表 二&#xff0c;顺序表 1.接口实现 三&#xff0c;ArrayList简介 四&#xff0c;ArrayList使用 1.ArrayList的构造 2.ArrayList常见操作 3.ArrayList的遍历 4.ArrayList的扩容机制 五&#xff0c;ArrayLisit的具体使用 杨辉三角 一&#x…

linux 使用log4cpp记录项目日志

为什么要用log4cpp记录项目日志 在通常情况下&#xff0c;Linux/UNIX 每个程序在开始运行的时刻&#xff0c;都会打开 3 个已经打开的 stream. 分别用来输入&#xff0c;输出&#xff0c;打印错误信息。通常他们会被连接到用户终端。这 3 个句柄的类型为指向 FILE 的指针。可以…

【保研记录】2023年(24届)SE上岸经历

先开个坑&#xff0c;慢慢填~ 个人信息 学校&#xff1a;某双非 专业&#xff1a;软件工程 第四轮学科评估&#xff1a;无&#xff08;对就是没有等级&#xff09; 排名&#xff1a;1/400 竞赛/荣誉&#xff1a;国奖x2&#xff0c;省三好&#xff0c;大英国二&#xff0c;…

视频剪辑方法:一键批量转码,视频转GIF教程详解

在数字媒体时代&#xff0c;视频剪辑已经成为一项必备技能。无论是专业人士还是普通用户&#xff0c;都要对视频进行剪辑、转码和制作。但是视频剪辑并不简单&#xff0c;要掌握一定的技巧和知识。下面一起来看云炫AI智剪简单易学的视频剪辑方法&#xff1a;一键批量转码和视频…