从零开始创建最简单的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管理页面,点击刷新
如果
pom.xml
(根目录)中没有错误,则项目创建成功,如果出现红色标注的错误,则执行下面操作:
1.3.1 检查pom.xml错误
打开淘宝仓库地址查询artifactId
的version
是否错误
淘宝maven仓库查询地址
1.3.2 修改版本号
根据groupId
,artifactId
找到合适的版本号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
软件,发现镜像已打包上去
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官网如果使用比较通畅,可以不配置)
开通阿里云账号,按官网提示配置镜像加速
淘宝镜像服务
开通镜像仓库
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来集中管理