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

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来集中管理
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值