美文网首页vanishaloneJava技术资料
从零开始创建最简单的springboot工程,到docker部署

从零开始创建最简单的springboot工程,到docker部署

作者: 微光2020 | 来源:发表于2021-09-01 17:08 被阅读0次

    docker越来越流行,但之前pc和imac操作docker略显繁琐,而docker桌面端的发布让docker操作越来越简单,本文记录从0开始搭建一个最简单的springboot工程,直到通过打包上传到云服务器全过程。

    概要

    基本流程是:

    创建springboot或spring cloud工程→打包成Jar→打包成dockerfile→上传镜像服务器(三方或自建)→云服务器拉取镜像服务器→运行镜像


    基本流程.png

    一,创建SpringBoot Web项目

    1.1. 新建SpringBoot工程

    使用默认名称Demo,一路next


    创建新工程.png Spring官方快捷创建.png 选择Spring Web.png

    1.2. 配置Maven

    1.2.1 查看maven是否正确

    第一个菜单→Preferences→搜索Maven→选择正确的配置文件地址和本地仓库地址


    界面配置Maven.png

    2.2 修改配置文件

    打开setting.xml,找到mirrors添加镜像地址,修改配置文件为淘宝地址

    <mirrors>
        <mirror>
            <id>nexus-aliyun</id>
            <mirrorOf>central</mirrorOf>
            <name>Nexus aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
        </mirror>
      </mirrors>
    

    1.3. 刷新工程

    右侧打开maven管理页面,点击刷新

    maven更新pom中jar包.png
    如果pom.xml(根目录)中没有错误,则项目创建成功,如果出现红色标注的错误,则执行下面操作:

    1.3.1 检查pom.xml错误

    打开淘宝仓库地址查询artifactIdversion是否错误
    淘宝maven仓库查询地址

    查询举例,按实际需求查询.png

    1.3.2 修改版本号

    根据groupIdartifactId找到合适的版本号version,重填版本号,重新更新pom.xml文件直到无错

    1.4. 项目结构

    项目结构.png
    说明
    application.properties是项目默认创建的,application.yml文件需要手动创建
    可以混合使用但不推荐,application.yml更方便易读,建议创建application.yml删除application.properties
    # 启动端口,yaml文件书写时会有提示
    server:
      port: 8080
    

    配置文件中什么都不填写会默认启动8080端口

    1.5. 添加控制器

    添加控制器DemoController,让网站可以被访问

    /** 创建一个rest风格都控制器 */
    @RestController
    public class DemoController {
        /** 通过get方式访问路径http://127.0.0.1:8080/index */
        @GetMapping("/index")
        public String index(){
            return "springboot index page";
        }
    }
    

    1.6. 测试网站

    1.6.1 运行

    DemoApplication中右键Run...

    1.6.2 测试

    打开浏览器访问127.0.0.1:8080/index,出现springboot index page表示成功


    二,在本地docker中运行

    2.1. 下载

    下载docker Desktop for mac或者docker Desktop for windows
    官网下载
    docker由于历史原因有很多版本,各个版本适应不同环境,最新的是安装版,简单易用,不过对系统有要求,详细内容可以看看这遍博客:
    Docker学习笔记(1)——理清概念

    2.2. 安装

    安装版的docker按照说明直接按照即可,mac需要升级到最新系统,Windows需要支持虚拟化


    docker desktop界面.png

    Containers / Apps - 当前容器,可以控制容器运行与停止

    要有Container首先要有Image,也就是说Container是通过image创建的

    images - 本地镜像

    Docker镜像包括一个或者多个只读层(read-only layers),最多127层,相当于每个镜像都自带一个迷你操作系统,原来只是打包Jar,Docker是连同运行环境一起打包了,保证任何地方运行环境是一致的

    Volumes - 数据持久化

    Docker的数据持久化即使数据不随着container的结束而结束,数据存在于host机器上——要么存在于host的某个指定目录中(使用bind mount),要么使用docker自己管理的volume(/var/lib/docker/volumes下)

    Dev Environments - 开发环境

    还不成熟,意思是团队开始时互享镜像,原来需要上传到Git然后队友拉取代码,现在直接共享给队友

    2.3. 编写dockerfile

    FROM anapsix/alpine-java:8_server-jre_unlimited
    MAINTAINER abc
    ADD demoapp.jar app.jar
    RUN bash -c 'touch /app.jar'
    ENTRYPOINT ["java","-Dspring.profiles.active=online","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    
    • dockerfile没有后缀名
    • 手动打包:只需要Jar包和dockerfile文件在同一目录即可,本文使用方法
    • idea打包:安装docker插件后,在idea打包
    • FROM anapsix/alpine-java:8_server-jre_unlimited:指定基础镜像,alpine是精简版linux镜像,打包后体积会小很多,推荐
    • MAINTAINER abc: 维护者信息
    • ADD demoapp.jar app.jar:将本地文件添加到容器中,本地demoapp.jar放到app.jar中
    • RUN bash -c 'touch /app.jar':构建镜像时执行的命令,修改这个文件的访问时间和修改时间为当前时间
    • ENTRYPOINT ["java","-Dspring.profiles.active=online","-- Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]:配置容器,使其可执行化,ENTRYPOINT可以执行一些额外配置
    • 参考dockerfile详解

    2.4.打包成docker镜像

    docker build -t demo-alpine:latest .
    
    • -t − 给镜像加一个Tag
    • demo-alpine − 给镜像起的名称
    • latest − 给镜像的Tag名,不写自动添加latest
    • . -Dockerfile所在目录必填

    打开docker desktop软件,发现镜像已打包上去

    docker desktop.png

    2.5.运行镜像

    docker run -d -p 8080:8080 --name demo-alpine demo-alpine:latest
    
    • -d - 后台运行容器,并返回容器ID
    • -p - 指定端口映射,格式为:主机(宿主)端口:容器端口
    • --name demo-alpine demo-alpine:latest - demo-alpine为运行容器名称,demo-alpine:latest为images镜像名:版本号tag
    • 更多参考 Docker run 命令

    打开浏览器访问127.0.0.1:8080/index,出现springboot index page,说明docker本地运行正确


    三,上传至镜像库

    3.1. 阿里云容器镜像服务

    配置淘宝镜像(docker hub官网如果使用比较通畅,可以不配置

    开通阿里云账号,按官网提示配置镜像加速
    淘宝镜像服务

    配置容器镜像加速.png

    开通镜像仓库

    1). 开通


    开通镜像仓库.png
    • 创建镜像仓库,注意选择地区
    • 创建命名空间,成功创建后点击管理,里面会有教程指导如何上传镜像
    • 设置访问凭证,设置固定密码,上传时需要先登陆

    2). 登陆阿里云

    docker login --username=您的登录名@qq.com registry.cn-chengdu.aliyuncs.com
    

    3). 将镜像推送到阿里云Registry

    docker tag [ImageId] registry.cn-chengdu.aliyuncs.com/cdsk/[命名空间]:[镜像版本号]
    docker push registry.cn-chengdu.aliyuncs.com/cdsk/[命名空间]:[镜像版本号]
    
    • tag - 本地镜像必须打tag才能上传
    • [ImageId] - 本地镜像名字
    • registry.cn-chengdu.aliyuncs.com/cdsk/[命名空间]:[镜像版本号] - tag后的名字和版本,在本地也会显示,推送是推tag后的镜像

    imac第一次上传时第一次输入开机密码,第二次输入访问凭证固定密码,pc未测试

    登陆阿里云容器镜像服务,选择正确的地区后可以看见上传的镜像

    3.2. docker hub容器镜像服务

    • docker官方的镜像仓库,原理和阿里云类似,但是稳定性差,有时不能访问
    • 官网创建仓库,然后本地登陆后push上去即可

    3.3. harbor 自建容器镜像服务

    • Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
    • harbor部署较为复杂,以后会有专题补充

    三种方式都可以上传镜像,目的是被云服务器拉取镜像,从开发➡️镜像库➡️云服务器,最终目的是构建一个持续集成开发环境


    四,云服务器中运行工程

    • 阿里云同理
    • 系统是centos 7
    • 安装docker
    • 拉取镜像
    docker pull registry.cn-chengdu.aliyuncs.com/cdsk/[命名空间]:[镜像版本号]
    
    • 运行镜像
    docker run -d -p 8080:8080 --name demo registry.cn-chengdu.aliyuncs.com/cdsk/[命名空间]:[镜像版本号]
    
    • centos 7开放端口8080,外网登陆 外网ip地址:8080,成功访问,完毕撒花🎉

    五,总结

    • 这是一个最简单的docker服务部署教程
    • 正式的服务器一般是多台服务器,需要安装openVPN来限制任意登陆
    • 正式的服务器中docker使用k8s来集中管理

    相关文章

      网友评论

        本文标题:从零开始创建最简单的springboot工程,到docker部署

        本文链接:https://www.haomeiwen.com/subject/hetfwltx.html