Docker-自定义镜像上传阿里云

news2024/11/26 0:23:19

目录

一、Docker制作jdk镜像

jdkv.1.0的制作

步骤

 二,alpine制作jdk镜像

2.1 alpine Linux简介

2.2 基于alpine制作JDK8镜像

前期准备

2.3步骤

   2.3.1.下载镜像

   2.3.2.创建并编辑dockerfile

 2.3.3.执行dockerfile创建镜像

 2.3.4.创建并启动容器(可略)

 2.3.5.进入容器(执行红色)   

三、Alpine制作jre镜像

   1.首先下载jre

   2.rz上传至centos,并删除无用的文件,并重新压缩

  3.创建并编辑dockerfile

  4.执行dockerfile创建镜像

  5.创建并启动容器

  6.进入容器   

  7.测试jdk

四,Docker镜像上传至阿里云

   前期准备

        1.注册阿里云账户

2.登陆账户

3.配置Docker加速器

4.创建镜像仓库的命名空间

5.创建镜像仓库(创建镜像仓库时要绑定一个代码托管网站,例如:github)

push(推)镜像

   将镜像推送到Registry

   1.登录到阿里云的doker仓库,--username为阿里云的用户名,另外,密码为开通镜像

 2、为本地镜像添加tag

pull(拉)镜像

1.同样的先登录到阿里云的doker仓库

2.从Registry中拉取镜像


一、Docker制作jdk镜像

jdkv.1.0的制作

步骤

0.启动虚拟机,进入centos

1.创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件

2.编写 Dockerfile 文件

#1.指定基础镜像,并且必须是第一条指令

RROM centos:7

#2.指明该镜像的作者和其电子邮件

MAINTAINER zs "zs@qq.com"

#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录

WORKDIR /javaxl_docker/jdk

#4.一个复制命令,把jdk安装文件复制到镜像中,语法:ADD <src>... <dest>,注意:jdk*.tar.gz使用的是相对路径

ADD jdk-8u221-linux-x64.tar.gz /javaxl_docker/jdk/

#5.配置环境变量

ENV JAVA_HOME=/javaxl_docker/jdk/jdk1.8.0_221

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV PATH=$JAVA_HOME/bin:$PATH

#容器启动时需要执行的命令

#CMD ["java","-version"]

3.执行Dockerfile文件,初次依赖镜像的时候会下载相应镜像

      docker build -t jdk8:v1.0 .

      注1:-t  jdk8:v1.0  给新构建的镜像取名为 jdk8, 并设定版本为 v1.0

      注2:注意最后有个点,代表使用当前路径的 Dockerfile 进行构建

4.查看镜像

      docker images

5.创建并启动容器

      docker run -it jdk8:v1.0 /bin/bash

6.检查是否有问题

      java -version  (javac)

 dockerfile实践经验

   1. 精简镜像用途:尽量让每个镜像的用途都比较集中单一,避免构造大而复杂、多功能的镜像

   2. 选用合适的基础镜像:容器的核心是应用,选择过大的父镜像(如Ubuntu系统镜像)会造成最终生成应用镜像的膝肿,

       推荐选用瘦身过的应用镜像或者较为小巧的系统镜像(alpine)

 二,alpine制作jdk镜像

2.1 alpine Linux简介

1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和

     BusyBox以减少系统的体积和运行时的资源消耗。

   2.Alpine Linux提供了自己的包管理工具:apk(注意:ubuntu中是apt-get),我们可以通过https://pkgs.alpinelinux.org/packages 查询包信息

   3.Alpine Docker镜像继承了Alpine Linux发行版的这些优势,相比于其他Linux Docker镜像,它的体积非常小

   对比常用的、没有压缩过的基础镜像(查看当前的:latest标签): 

     Alpine - 4.8MB

     centos - 124.8 MB

     Debian - 125.1MB

     Centos - 196MB

   4.建议使用Alpine Linux 3.10.0版本,这也是 v3.10 稳定系列的首个版本

     alpine:3.10

2.2 基于alpine制作JDK8镜像

案例:现在制作jdk2.0版本,方便直观查看前面jdk1.0版本和jdk2.0版本的区别。

工具:jdk2.0版本、alpine 

目标:我希望我的jdk首先是具有java运行环境,其次大小要变小,减小我们的内存开销硬盘开销。
问:那么应该如何去缩小大小,去舍弃那些没用的文件呢?
答:在我们跑项目的时候,跑的项目是已经由.java文件编译而成的.class文件了,而.java文件是由javac命令(源于jdk)生成,.class文件是由java命令(源于jre)编译成的,所以跑项目的时候只需要留jre文件就可以了。【jre指的是运行环境,jdk包含开发环境(编译环境)又包含运行环境,但是跑项目只需要运行环境】可想而知jdk的大小是比jre的大小要大的。
结论:优化的两个点:①不适用centos7(功能太多较本周)使用alpine②使用jre不使用jdk

前期准备

将前一次的Dockerfile文件备份然后将其删掉

glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中 也就是操作了第一步

2.3步骤

   2.3.1.下载镜像

   docker pull alpine:latest

   2.3.2.创建并编辑dockerfile

   touch Dockerfile

   vi Dockerfile

   dockerfile内容

#1.指定基础镜像,并且必须是第一条指令 (若下一步出现问题 可尝试切换至第一行 版本原因)

#FROM alpine:latest

FROM alpine:3.10

#2.指明该镜像的作者和其电子邮件

MAINTAINER xyz "xyz@qq.com"

#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录

WORKDIR /javaxl_docker/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>

## ADD与COPY的区别:ADD复制并解压,COPY仅复制

ADD jdk-8u221-linux-x64.tar.gz /javaxl_docker/jdk/

## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中

COPY glibc-2.29-r0.apk /javaxl_docker/jdk/

COPY glibc-bin-2.29-r0.apk /javaxl_docker/jdk/

COPY glibc-i18n-2.29-r0.apk /javaxl_docker/jdk/

#5.更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了

RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \

    echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories

RUN apk update && apk upgrade

#6.运行指定的命令

#linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,

## 用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker

## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh: wget: not found”,网上例子少安装wget

## ca-certificates证书服务,是安装glibc前置依赖

RUN apk --no-cache add ca-certificates wget \

    && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \

    && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk \

    && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk

#7.配置环境变量

ENV JAVA_HOME=/javaxl_docker/jdk/jdk1.8.0_221

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV PATH=$JAVA_HOME/bin:$PATH

#容器启动时需要执行的命令

#CMD ["java","-version"]

2.3.3.执行dockerfile创建镜像

   docker build -t jdk8:v2.0 .

 

 2.3.4.创建并启动容器(可略)

   docker create -it jdk8:v2.0    

   docker start 容器ID

 2.3.5.进入容器(执行红色)   

   docker exec -it 容器ID /bin/sh

   注1:最后是sh而非bash

   也可直接 启动并进入容器

 docker run -it --name myjdk 容器ID

或  docker run -it --name 别名 镜像ID  /bin/sh命令

 6.测试jdk

   java -version

   注1:docker exec -it 容器ID /bin/sh 默认使用当前帐号(即root)登入,通过whoami命令可以查看当前用户名,

        还可以通过如下命令切换到其它帐号

        docker exec -it --user root <容器ID> /bin/sh  

   注2:openjdk:8-jdk-alpine这个镜像就和我们自己创建的镜像是一样,只不过JDK瘦身过了,体积更小

        大家可以自己来创建一个容器试一下

   注3:最后制作完成后的镜像大小为400M左右

三、Alpine制作jre镜像

Docker容器之最小JRE基础镜像

   1.首先下载jre

下载地址是https://www.java.com/en/download/manual.jsphttps://www.java.com/en/download/manual.jsp,大概是77M

    最终下载的资料为:/jre-8u221-linux-x64.tar.gz

   2.rz上传至centos,并删除无用的文件,并重新压缩

      解压

      tar -zxvf jre-8u221-linux-x64.tar.gz

 

      查看jre大小(瘦身前230M)

      du -sh jre1.8.0_221

      进入jre目录,并执行瘦身命令

      cd jre1.8.0_221

      执行瘦身命令(命令见资料,瘦身后111M)

#删除文本文件

rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txtTHIRDPARTYLICENSEREADME.txt Welcome.html \

#删除其他无用文件

rm -rf lib/plugin.jar \

lib/ext/jfxrt.jar \

bin/javaws \

lib/javaws.jar \

lib/desktop \

plugin \

lib/deploy* \

lib/*javafx* \

lib/*jfx* \

lib/amd64/libdecora_sse.so \

lib/amd64/libprism_*.so \

lib/amd64/libfxplugins.so \

lib/amd64/libglass.so \

lib/amd64/libgstreamer-lite.so \

lib/amd64/libjavafx*.so \

lib/amd64/libjfx*.so

 返回上级目录,重新打包jre

      cd ../

      tar -zcvf jre1.8.0_221.tar.gz jre1.8.0_221

 打包完成后 这就是最少内存的一个jre运行环境 之后就可以直接使用此压缩包制作镜像

 将之前用于创建jdk2.0版本的镜像的Dockerfile文件进行复制 并删除Dockerfile 重新创建 用于制作jre镜像

3.创建并编辑dockerfile

        与创造jdk镜像不同就在此文件内容

      注1:dockerfile内容如下

#1.指定基础镜像,并且必须是第一条指令

#FROM alpine:latest

FROM alpine:3.10

#2.指明该镜像的作者和其电子邮件

MAINTAINER xyz "xyz@qq.com"

#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录

WORKDIR /javaxl_docker/jdk

#4.将一些安装包复制到镜像中,语法:ADD/COPY <src>... <dest>

## ADD与COPY的区别:ADD复制并解压,COPY仅复制

## 注意~~~上传的瘦身后的jre

ADD jre1.8.0_221.tar.gz /javaxl_docker/jdk/

## glibc安装包如果从网络下载速度实在是太慢了,先提前下载复制到镜像中

COPY glibc-2.29-r0.apk /javaxl_docker/jdk/

COPY glibc-bin-2.29-r0.apk /javaxl_docker/jdk/

COPY glibc-i18n-2.29-r0.apk /javaxl_docker/jdk/

#5.更新Alpine的软件源为阿里云,因为从默认官源拉取实在太慢了

RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \

    echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories

RUN apk update && apk upgrade

#6.运行指定的命令

## Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,

## 用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker

## wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh: wget: not found”,网上例子少安装wget

## ca-certificates证书服务,是安装glibc前置依赖

RUN apk --no-cache add ca-certificates wget \

    && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \

    && apk add glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk \

    && rm -rf /var/cache/apk/* glibc-2.29-r0.apk glibc-bin-2.29-r0.apk glibc-i18n-2.29-r0.apk

#7.配置环境变量

## 注意~~~没有jdk啦,直接指向jre

ENV JAVA_HOME=/javaxl_docker/jdk/jre1.8.0_221

ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV PATH=$JAVA_HOME/bin:$PATH

#容器启动时需要执行的命令

#CMD ["java","-version"]

 4.执行dockerfile创建镜像

      docker build -t jdk8:v3.0 .

   5.创建并启动容器

      docker create -it jdk8:v3.0    

      docker start 容器ID

   6.进入容器   

      docker exec -it 容器ID /bin/sh

  或  docker run -it --name 别名 镜像ID  /bin/sh命令

   7.测试jdk

      java -version

   注1:openjdk:8-jdk-alpine这个镜像就和我们自己创建的镜像是一样,只不过JDK瘦身过

四,Docker镜像上传至阿里云

将Docker镜像上传至阿里云(或从阿云下载镜像)

   前期准备

   1.注册阿里云账户

   阿里云官方网站链接:开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云云原生(Cloud Native)技术帮助企业在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。 在阿里云容器服务ACK 可以帮助您快速构建并高效管理 云原生应用,帮助企业更快交付、降低未知风险、拓展业务边界。https://dev.aliyun.com

   2.登陆账户

 注:搜索“容器镜像服务”

 3.配置Docker加速器

 2.复制路径 进行访问

3.访问页面 点击新建代码库

 4.输入代码库名称即可

 5.个人设置

 6.创建访问令牌

 7.拷贝令牌

 8.放置我们刚刚创建的代码库中

 

 绑定成功啦

4.创建镜像仓库的命名空间

   例如:javaxl

5.创建镜像仓库(创建镜像仓库时要绑定一个代码托管网站,例如:github)

 进行CodeUp绑定 

现在进行下一步,把本地的镜像推送到阿里云中来。 

push(推)镜像

   将镜像推送到Registry

   1.登录到阿里云的doker仓库,--username为阿里云的用户名,另外,密码为开通镜像

docker login --username=aliyun5376531218 registry.cn-hangzhou.aliyuncs.com

服务时设置的密码,忘记密码可以点击菜单:“容器镜像服务”->“默认实例”-->“访问凭证”进行修改 

 2、为本地镜像添加tag

选择你要上传的镜像id 可以自己编写版本号

 docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/javaxl/alpine_jre:[镜像版本号]

 ​​​

 推送的是此版本的jdk 推送时命名版本为v6.0

  然后返回到我们的阿里云查看是否上传成功:

 接下来就是给大家分享如何从阿里云上拉取我们已上传的镜像,为了方便稍后的演示,我会把所有jdk的镜像都清理干净

pull(拉)镜像

我们拉取另一个仓库中的此镜像

1.同样的先登录到阿里云的doker仓库

docker login --username=aliyun5376531218 registry.cn-hangzhou.aliyuncs.com

2.从Registry中拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/ljj123/ljj:[镜像版本号]

 拉取成功!!!

 进入容器查看环境 

 本期文章到此结束 我们下期见!

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

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

相关文章

考虑碳交易机制的园区综合能源系统电热协同运行优化研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑…

【加油站会员管理小程序】05 充值套餐功能

上一篇我们讲解了轮播图的开发,本篇我们讲解充值优惠功能的开发。 开发之前我们要思考如何展示信息,在我们的功能规划里,在首页部分是要展示三个充值的套餐信息。那这个套餐呢最好是存在数据源中,便于日后维护信息。 在应用的编辑器里,点击数据源的图标,我们创建一个数…

m最小二乘法自适应均衡误码率仿真,对比LS,DEF以及LMMSE三种均衡算法误码率

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 信道估计是通信系统接收机的重要功能模块&#xff0c;主要是用来估计信号所经历信道的冲击响应&#xff0c;并用于后续的信道均衡处理&#xff0c;以便消除多径信号混叠造成的ISI。 信道估…

[附源码]Node.js计算机毕业设计二手车交易平台设计Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

硕士生论文学习——基于孪生神经网络的改进模型在中文语义相似度上的研究

文章目录摘要2.2 孪生神经网络3.2 基于孪生ELETRA网络的语义相似度交互模型结构3.3 实验结果分析3.3.4 评价指标摘要 啥啊&#xff1a;两个文本之间的交互特征 LSTM 应用于孪生神经网络的特征提取层&#xff0c;可以获取到长文本的语义信息。 孪生神经网络的特征提取层&…

【kernel exploit】CVE-2022-25636 nftables OOB 写堆指针漏洞利用

影响版本&#xff1a;Linux 5.4-rc1~5.17-rc5。5.17-rc6 已修补。 测试版本&#xff1a;Linux-5.13.19 &#xff08;原作者在Ubuntu 21.10 内核版本 5.13.0-30 中测试&#xff0c;成功率40%&#xff0c;由于用到 msg_msg 对象&#xff0c;所以只能用 5.14 以前的内核版本进行测…

Linux 下复现 Google Chrome RCE

写在前面&#xff1a;网上大多都是windows下复现的&#xff0c;不过最近我在Linux中也遇到了低版本的chrome&#xff0c;想着这也是一个点&#xff0c;但是没想到技术不够&#xff0c;没搞出来&#xff0c;还是看大佬的文档慢慢学吧。。。 目录 一.环境搭建 1.1 环境信息 1.…

GX Works3 跨网访问

需求背景 1&#xff0c;有N条产线。 2&#xff0c;每条产线是一个独立的局域网。类似于192.168.x.x 3&#xff0c;每条产线部署一台产线控制系统。采用双网卡。一张接车间网络&#xff1b;一张接产线自身的局域网。 现在的需求是&#xff1a; 需要读写任意一条产线的PLC(三…

强化学习学习资料

1、OpenAI建立的强化学习教育资源网站&#xff0c;可以让我们更轻松地学习深度强化学习。里面有很多有用的资源&#xff0c;包括&#xff1a; &#xff08;1&#xff09;强化学习基本术语、算法种类、基本理论的介绍。 &#xff08;2&#xff09;一篇关于如何成长为RL研究者的…

是一种非常的Cy类近红外荧光染料,1686147-55-6,ICG amine,本产品的ICG是临床中所使用的ICG染料的衍生物

ICG&#xff08;Indocyanine Green&#xff09;&#xff0c;是一种非常的Cy类近红外荧光染料&#xff0c;在临床中用于手术导航。ICG的体内药理学性质非常明确&#xff0c;具有良好的安全性&#xff0c;是常用近红外染料&#xff0c;被***运用于生物诊疗。ICG的荧光母核和Cy7.5…

Python中ArcPy基于矢量范围批量裁剪大量栅格遥感影像

本文介绍基于Python中ArcPy模块&#xff0c;基于矢量数据范围&#xff0c;对大量栅格遥感影像加以批量裁剪掩膜的方法。 本文所需要的代码如下所示。 # -*- coding: utf-8 -*- """ Created on Tue Dec 13 20:07:48 2022author: fkxxgis """impo…

31.前端笔记-CSS-CSS3盒子模型和其他特性

1、CSS3盒子模型 原来的CSS盒子设置了border和padding属性&#xff0c;就会撑大盒子。 现在CSS3中可以通过box-sizing来指定盒模型&#xff0c;有两个值&#xff1a; content-box&#xff1a;盒子大小是widthpaddingborderbordr-box:盒子大小就是width,padding和border不会撑…

【OpenFOAM】-olaFlow-算例2- breakwater

算例路径&#xff1a; olaFlow\tutorials\breakwater 算例描述&#xff1a; 波浪对防波堤的作用&#xff0c;堤身为孔隙可渗透结构&#xff0c;堤顶沉箱为不可渗透结构。 学习目标&#xff1a; 渗透模型、可渗结构设置、孔隙材料各项参数设置 算例快照&#xff1a; 图1 防波堤…

基于51单片机的四位数字频率计数码管显示设计

仿真原理图&#xff1a; 程序运行图&#xff1a; 部分程序&#xff1a; #include <reg52.h> #define uchar unsigned char #define uint unsigned int uchar duan[10]{0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //所需的段的位码 //uchar wei[…

企业数字化转型关键路径:构建数据驱动的管控体系

本案例以元年方舟企业数字化转型PaaS平台为某国际运动品牌&#xff0c;解决全渠道对账项目应用为例&#xff0c;通过建立全渠道对账系统研发&#xff0c;构建数据驱动的管控体系&#xff0c;帮助该零售企业实现数字化转型的突破。 关键词&#xff1a;企业数字化&#xff1b;新…

Transformer网络

Transformer网络可以利用数据之间的相关性&#xff0c;最近需要用到这一网络&#xff0c;在此做一些记录。 1、Transformer网络概述 Transformer网络最初被设计出来是为了自然语言处理、语言翻译任务&#xff0c;这里解释的也主要基于这一任务展开。 在 Transformer 出现之前…

99-127-spark-核心编程-持久化-分区-io-累加器-广播变量

99-spark-核心编程-持久化-分区-io&#xff1a; RDD持久化 1) RDD Cache 缓存 Spark02_RDD_Persist RDD 通过 Cache 或者 Persist 方法将前面的计算结果缓存&#xff0c;默认情况下会把数据以缓存在 JVM 的堆内存中。但是并不是这两个方法被调用时立即缓存&#xff0c;而是触…

OS_@假脱机技术@设备分配@设备映射

文章目录OS_假脱机技术设备分配设备映射设备分配的策略1)设备分配原则2)设备分配方式静态分配动态分配3)设备分配算法设备分配的安全性1)安全分配方式2)不安全分配方式逻辑设备名到物理设备名的映射两种方式设置逻辑设备表假脱机(Spooling)系统SPOOLing系统的组成SPOOLing的工作…

足球一代又一代得青春

世界杯由来 世界杯&#xff08;World Cup&#xff09;即国际足联世界杯&#xff0c;是世界上最高水平的足球赛事。 众所周知&#xff0c;现代足球起源于英国&#xff0c;随后风靡世界。由于足球运动的迅速发展&#xff0c;国际比赛也随之出现。1896年&#xff0c;第一届现代奥…

[附源码]计算机毕业设计的疫苗接种管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…