Spring Boot + Docker实战

news2024/11/30 8:53:22

文章目录

    • 1.编写DockerFile
    • 2.构建镜像
    • 3.查看编译的镜像
    • 4.启动镜像测试
    • 5.创建私有仓库
      • 5.1查询registry镜像
      • 5.2加载镜像
      • 5.3运行镜像容器
      • 5.4检查容器
    • 6.搭建Registry web
      • 6.1首先搜索并拉取镜像
      • 6.2运行一个registry web容器
      • 6.3验证
    • 7.推送镜像到私有仓库
    • 8.服务器拉取镜像部署
      • 8.1 资源限制

1.编写DockerFile

# 该镜像需要依赖的基础镜像
FROM openjdk:11
# 指定维护者的名字
MAINTAINER laker "935009066@qq.com"
# 将本地文件夹挂载到当前容器
# VOLUME ["/tmp"] 
# 使用东八区时间环境
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 将指定目录下的jar包复制到docker容器的/目录下
COPY /target/*.jar /app.jar
# CMD ["--server.port=8080"]
# 声明服务运行在8080端口
EXPOSE 8080
# 切换WORKDIR
# WORKDIR /opt/web/
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

2.构建镜像

在构建前,请确保 xxx.jar 文件与DockerFile在同一个目录

# 构建镜像
docker build -f Dockerfile -t laker-java:v1 .

docker build 指令用来编译Dockerfile文件,默认的情况下 docker build 会在当前的上下文目录中查找Dockerfile文件进行编译

-f : 参数可以用来指定Dockerfile文件,如果文件名为Dockerfile,可以不加这一句-f Dockerfile

-t : 参数用来设置镜像的名字及标签

注意最后有一个 . ,这个表示当前的构建环境的上下文,Dockerfile中的资源文件都默认成这个上下文的目录中查找,然后拷贝到容器当中去;也可以指定目录。

如果不带上 ”.“,或者指定的上下文目录不对,在编译时则会出现错误。

3.查看编译的镜像

 docker image ls 或者 docker images

4.启动镜像测试

docker run -d \
		   -p 8080:8080 \
		   --name laker-v1 \
		   laker-java:v1
  • -d 是后台运行
  • -p 8080:8080 是端口映射
  • –name laker-v1 给容器取 名字
  • 最后跟的 laker-java:v1 是我打包好的镜像名称。

5.创建私有仓库

官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。

但是有时候我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。

Registry在github上有两份代码:老代码库和新代码库。老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。

从2.0版本开始就到在新代码库进行开发,新代码库是采用go语言编写,修改了镜像id的生成算法、registry上镜像的保存结构,大大优化了pull和push镜像的效率。

官方在Docker hub上提供了registry的镜像,我们可以直接使用该registry镜像来构建一个容器,搭建我们自己的私有仓库服务。

来自:https://www.cnblogs.com/leozhanggg/p/12050322.html

5.1查询registry镜像

docker search registry

5.2加载镜像

选用官方的第一个镜像,也是stars数最多的

docker pull registry

5.3运行镜像容器

docker run -d \
 --name registry2 \
 --restart=always \
 -p 5000:5000 \
 -v /laker/registry:/var/lib/registry \
 registry
  • -d:后台运行
  • –name registry2:指定容器名
  • –restart=always:设置开机自动启动
  • -p 5000:5000:端口映射宿主机,通过宿主机地址访问
  • -v /laker/registry:/var/lib/registry:把镜像存储目录挂载到本地,方便管理和持久化,如果不加,重启后镜像都会丢失
  • -v /laker/registry/srv-config.yml:/etc/docker/registry/config.yml:把配置文件挂载到本地,方便修改和保存

5.4检查容器

docker ps

docker ps -a 是查询所有状态的容器。

检查仓库镜像信息

curl -XGET http://127.0.0.1:5000/v2/_catalog

也可以在浏览器上测试:

6.搭建Registry web

地址:https://hub.docker.com/r/hyper/docker-registry-web

6.1首先搜索并拉取镜像

docker search docker-registry-web
docker pull hyper/docker-registry-web    # 这个镜像用的人较多
registry:
 url: http://10.224.77.100:5000/v2
 name: localhost:5000
 readonly: false
 auth:
   enabled: false

6.2运行一个registry web容器

docker run -d \
	--name registry-web \
	--restart=always \
	-v /laker/registry-web/web-config.yml:/conf/config.yml:ro \
	-p 8000:8080 \
	hyper/docker-registry-web

6.3验证

在浏览器访问:http://ip:8000

7.推送镜像到私有仓库

创建好私有仓库之后,就可以使用 docker tag 来标记一个镜像,然后推送它到仓库。例如私有仓库地址为 10.0.0.1:5000

# 重新标记镜像
docker tag laker-java:v1 10.0.0.1:5000/laker-java:v1
# 推送镜像
docker push 10.0.0.1:5000/laker-java:v1

前提条件

想让本网段的其他主机也能把镜像推送到私有仓库。你就得把例如 10.0.0.1:5000 这样的内网地址作为私有仓库地址,这时你会发现无法成功推送镜像。

这是因为 Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,或者查看下一节配置能够通过 HTTPS 访问的私有仓库。

请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

配置非https访问:

{
  "registry-mirror": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "insecure-registries": [
    "10.0.0.1:5000"
  ]
}

然后重启Docker

systemctl daemon-reload    # 守护进程重启
systemctl restart docker    # 重启docker服务

Windows系统在下图所示位置配置,注意要重启哦。

推送截图示例

可以在Registry Web上查看镜像。

8.服务器拉取镜像部署

docker pull 10.0.0.1:5000/laker-java:v1

结果如下图

8.1 资源限制

  • 内存
  • cpu
  • 磁盘

在生产环境中,建议每个容器都添加相应的资源限制。下面给出一些执行docker run命令启动容器时可以传递的资源限制参数:

  --cpus                          限制 CPU 配额
  -m, --memory                    限制内存配额
  --pids-limit                    限制容器的 PID 个数

例如我想要启动一个 1 核 2G 的容器,并且限制在容器内最多只能创建 1000 个 PID,启动命令如下:

$ docker run -it --cpus=1 -m=2048m --pids-limit=1000 busybox sh

推荐在生产环境中限制 CPU、内存、PID 等资源,这样即便应用程序有漏洞,也不会导致主机的资源完全耗尽,最大限度降低安全风险。

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

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

相关文章

在线电子书阅读小程序,微信小程序电子书阅读,微信小程序小说阅读器毕业设计作品

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信小程序在线电子书阅读系统,前台用户使用小程序,后台管理使用基JavaMySql技术;通过后台录入电子书信息、书目录信息,用户通过小程序登录,查…

CY3-peg-海藻酸钠|海藻酸钠-荧光染料CY3|alginate-Cyanine3

CY3-peg-海藻酸钠|海藻酸钠-荧光染料CY3|alginate-Cyanine3 FITC/Rhodamine/TRITC/Comarin/Bodipy/ICG/CY3/CY3.5/CY5/CY5.5/CY7/CY7.5标记海藻酸钠 海藻酸钠的结构海藻酸酸是一种线性的阴离子多糖,由β-D-甘露糖醛酸(M)和α-L-葡糖醛酸&am…

【Android】性能监控之帧率检测Tinydancer

git地址 使用 增加依赖 dependencies {debugCompile "com.github.brianPlummer:tinydancer:0.1.2"releaseCompile "com.github.brianPlummer:tinydancer-noop:0.1.2"testCompile "com.github.brianPlummer:tinydancer-noop:0.1.2"}在Applicati…

strcat · strstr | 使用场景与模拟实现

啊我摔倒了..有没有人扶我起来学习.... 👱个人主页:《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ 💒个人社区:《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

java计算机毕业设计家教管理系统(附源码、数据库)

java计算机毕业设计家教管理系统(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技…

单调队列/单调栈优化dp

从这几篇博客学习的: DP优化小技巧(单调队列/单调栈) (单调队列优化DP) 代码源每日一题 Div1 选元素(数据加强版) 算法学习笔记(67): 单调栈 牛客多校第九场I (单调栈优化dp/单调栈的常用套路) 一. 单调队列 NC50528…

擎创技术流 | ClickHouse实用工具—ckman教程(1)部署安装

前言: 在数据量日益增长的当下,传统数据库的查询性能已满足不了业务需求。而Clickhouse在OLAP(On-Line Analysis Processing——即一种在线分析处理的,用于数据分析的计算方法)领域的应用,可以助力企业打造…

云原生之快速使用Nacos Spring Cloud

本文主要面向 Spring Cloud 的使用者,通过两个示例来介绍如何使用 Nacos 来实现分布式环境下的配置管理和服务注册发现。 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。通过 Nacos Server 和 spring-cloud-starter-alibab…

iwebsec靶场 SSRF关卡通关笔记

iwebsec靶场SSRF漏洞通关笔记。 1. 源码分析 由于URL参数无经过严格的过滤,那么攻击者可以构造任意的url利用SSRF漏洞 如上所示,分析可知有SSRF漏洞 2.SSRF漏洞文件读取 (1)访问网址根目录下ssrf文件夹下的1.txt 构造SSRF漏洞访…

云原生 · DevOps | Sonar Qube

啊我摔倒了..有没有人扶我起来学习.... 👱个人主页:《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ 💒个人社区:《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

软银集团:从零到一万亿

第一章 公司发展概况 1.1 企业创始人和发展史 软银集团在1981年由孙正义在日本创立并于1994年在日本上市,是一家综合性的风险投资公司,主要致力IT产业的投资,包括网络和电信。 1981-1996年(个人电脑及软件业务时期)…

C语言函数针对训练--递归篇(动画讲解,由易到难递归例题)

CSDN话题挑战赛第2期 参赛话题:学习笔记 前言 💖作者:龟龟不断向前 ✨简介:宁愿做一只不停跑的慢乌龟,也不想当一只三分钟热度的兔子。 👻专栏:C初阶知识点 👻工具分享: …

【FreeRTOS】队列的使用

队列的使用前言创建队列发送数据接收数据查询队列数据个数使用示例创建两个线程配置按键驱动编写按键发送子函数编写按键读取子函数前言 基于 FreeRTOS 的应用程序由一组独立的任务构成——每个任务都是具有独立权限的小程序。这些独立的任务之间很可能会通过相互通信以提供有…

leetcode算法每天一题010: 正则表达式,判断pattern和string是否匹配(动态规划)

题目描述 ‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素 PATTERNTRUEFALSEa.baab,abb,acba, ab,ba*bb,ab,aab,aaaba,abb,acbc*a.baab,caab,cccccacb,ccabbbaab,cabbbdp[i] [j] 的含义是当字符串 s 的长度为 i,模式串 p 的长度为 j 时,两…

KubeVela 插件指南:轻松扩展你的平台专属能力

KubeVela 插件(addon)可以方便地扩展 KubeVela 的能力。正如我们所知,KubeVela 是一个微内核高度可扩展的平台,用户可以通过模块定义(Definition)[1]扩展 KubeVela 的系统能力,而 KubeVela 插件…

C# Winform程序开发笔记

C#d的开发发展到今天,已经改进了不少,对于非常多的应用可以使用C#进行开发,也非常方便,希望以下笔记对于高级开发者(网络通信、线程应用)而言能有所帮助吧。 1、INI文件的读写操作 1.1 类文件 using System; using System.Collections.Generic; using System.IO; usin…

【SpringBoot笔记21】SpringBoot框架使用AOP + 自定义注解实现请求日志记录

这篇文章,主要介绍SpringBoot框架使用AOP 自定义注解实现请求日志记录。 目录 一、SpringBoot记录日志 1.1、环境搭建 1.2、配置FastJson 1.3、自定义LogRecord注解 1.4、定义日志实体类 1.5、创建HttpRequestUtil工具类 1.6、定义AOP切面 1.7、编写测试类…

arm服务器运行onlyoffice

公司的arm服务器上运行onlyoffice报错 是x86_64架构的镜像在arm服务器下不兼容 需要下载兼容arm架构的docker镜像 在dockerhub上 onlyoffice地址 Docker Hubhttps://hub.docker.com/r/onlyoffice/documentserver 下载兼容arm架构的镜像版本 # docker --version Docker ver…

《从0开始写一个微内核操作系统》5-页表映射

ChinOS https://github.com/jingjin666/GN-base/tree/chinos 页表需要多少空间 在第4节中,我们了解到,每一级页表实际上就是一个512大小的unsigned long数组,一个页表本身占用512*84K空间 /* PGD */ /* 每个ENTRY包含512G内存区域 */ typed…

JavaWeb传统商城(MVC三层架构)的促销功能模块【进阶版】

文章目录一.JavaWeb商城项目的促销功能模块【进阶版】开发过程记录1.1 项目背景1.2 需求分析1.3 开发流程/顺序二.促销页面(0.1颗星)2.1 需求介绍2.2 JSP页面2.3效果展示三,商品详情页面(0.2颗星)3.1 需求介绍和效果图3.2 数据库分析3.2 Servlet层3.3 Service层3.4 DAO层3.5 JS…