目录
一、先说明下主要的步骤
- 确保docker环境正常运行,不论是远程的还是本地的
- 确保springboot项目能正常运行
- 将springboot项目打包成jar包
- 编写Dockerfile文件
- 使用docker build命令生成镜像
- 使用docker run命令生成容器
二、具体步骤详解
1.确保docker环境能够正常运行
linux安装docker环境:以CenterOS为例,参考CentOS Docker 安装 | 菜鸟教程
使用官方安装脚本自动安装
安装命令如下:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun也可以使用国内 daocloud 一键安装命令:
curl -sSL https://get.daocloud.io/docker | sh使用命令:docker,弹出如图所示即说明安装成功
windows安装docker环境:以windows10为例,参考Windows Docker 安装 | 菜鸟教程
本次介绍windows10的安装方式,windows7/8请利用 docker toolbox 来安装,国内可以使用阿里云的镜像来下载,下载地址:docker-toolbox-windows-docker-toolbox安装包下载_开源镜像站-阿里云
windows10安装docker环境
1.需要开启Hyper-V,方式如图所示,在程序和功能打开
或者通过命令来启用 Hyper-V ,请右键开始菜单并以管理员身份运行 CMD/PowerShell,执行以下命令:Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
2.下载和安装Docker桌面环境:Redirecting…
下载完后按安装引导安装即可,傻瓜式安装,不多做介绍
安装完,启动docker,然后在CMD/PowerShell输入docker,弹出如图所示即说明安装成功
打开桌面管理工具就是长这样
上面步骤做完,就可以在本地使用docker了,如果想要使用远程docker环境,则要配置远程docker(当然本地要有安装docker ctl,不然怎么使用docker命令),我连接远程CenterOS环境下的docker。windows配置请参考我的另一篇文章
vi /lib/systemd/system/docker.service
CenterOS7及以上的,修改ExecStart这行为下面的值
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
CenterOS7以下的,修改ExecStart这行为下面的值
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375
然后就是保存文件,重载,重启
systemctl daemon-reload
service docker restart
查看以下能不能连接上docker服务,有信息打印出来就可以了
curl http://localhost:2375/version
设置idea连接远程docker环境
在linux 本地可以访问,但远程又连接不上(非Connection successful),很有可能是linux没有开放2375端口,检查一下linux的防火墙设置,具体可参考我的文章。
windows同理,如果访问不到,就需要在windows防火墙开放端口
2.确保springboot项目能正常运行
写了个自定义controller,返回hello world!
运行启动类 ,如图打印spring logo且没有异常或报错信息即表示启动成功
浏览器访问http://localhost:8081/test(端口我陪了8081)
3.将springboot项目打包成jar包
将springboot项目打包有很多种方式,下面介绍两种
gradle管理项目,使用gradle build打包
Maven管理项目,使用maven package打包
我是使用maven打包的,拿到jar文件得路径
在pom.xml配置好版本号,打包
mvn clean package -Dmaven.test.skip=true
这里我拿到tag为0.0.2的版本,进入下一步
4.编写Dockerfile文件
直接在项目根目录新建Dockerfile文件
编写Dockerfile文件,Dockerfile文件,具体怎么写,参考Docker Dockerfile | 菜鸟教程,下面是例子
# Docker image for springboot application
# VERSION 0.0.1
# Author: Kannokaze
### 基础镜像,使用alpine操作系统,openjkd使用8u201
### 也可以使用 java:8
FROM openjdk:8u201-jdk-alpine3.9
#作者
MAINTAINER Kannokaze <1131429439@qq.com>
#系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
#声明一个挂载点,容器内此路径会对应宿主机的某个文件夹
VOLUME /tmp
#暴露8080端口
EXPOSE 8080
#定义参数
#ARG JAR_FILE
#应用构建成功后的jar文件被复制到镜像内
#ADD ${JAR_FILE} demo.jar
ADD target/demo-0.0.2-SNAPSHOT.jar demo.jar
#touch命令的作用是修改这个文件的访问时间和修改时间为当前时间,而不会修改文件的内容。
#RUN bash -c 'touch /demo.jar'
#启动容器时的进程
ENTRYPOINT ["java","-Dfile.encoding=UTF8","-Duser.timezone=GMT+08","-jar","demo.jar"]
5.使用docker build命令生成镜像
使用命令,最后的【.】是必须的,代表Dockefile文件的路径,当然可以项目任意位置内,只要填写的Dockerfile路径正确即可
-t :指定要创建的目标镜像名
. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
docker build -t demo:v0.0.2 .
沒有出現警告或异常就算成功了,
然后去远程docker环境看下有没有镜像
docker images
6.使用docker run命令生成容器
使用命令,生成名为demoContains的容器
docker run -ti -d --name demoContains -p 8089:8081 demo:v0.0.2
--name 容器命名
-p 8089:8081 指定容器内部端口8080指向宿主机容器端口8088
查看,容器是否正确生成
docker ps
curl一下,访问成功
最后就是使用容器的http://ip:port
大功告成