Docker部署SpringBoot
环境安装
- CentOs安装Docker(见前面博客)
- 安装Java环境
- 上传jdk
- 解压jdk
#tar -zxvf jdk-8u101-linux-x64.tar.gz
- 配置环境变量
export JAVA_HOME=/version/java/jdk1.8.0_231
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
- 安装MAVEN
- 下载MAVEN,如果wget没安装,先
yum install wget
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz
- 配置环境变量
vi /etc/profile
export MAVEN_HOME=/version/maven/apache-maven-3.6.2
export PATH=${MAVEN_HOME}/bin:$PATH
- 使/etc/profile生效
source/etc/profile
- 检验安装正确
mvn -version
java -version
java -jar方式启动SpringBoot项目
- 暂停项目,运行maven clean ——> 运行maven package,将最后生成的jar包上传到Centos中
- 运行项目
Java -jar demo
显示如下
访问http://192.168.111.100:8000/
不通查看防火墙,开启8000端口
firewall-cmd --state 查看防火墙状态 running为正常运行
开启8000端口,重启服务,继续访问成功如下
# firewall-cmd --zone=public --add-port=8000/tcp --permanent
# systemctl restart firewalld.service
Docker方式启动(一)
- 启动docker
systemctl start docker
- 编写docker文件
# 基础镜像
FROM openjdk:8
# 作者信息
MAINTAINER "lidong"
# 添加一个存储空间
VOLUME /tmp
# 暴露8000端口
EXPOSE 8000
# 添加变量,如果使用dockerfile-maven-plugin,则会自动替换这里的变量内容
ARG JAR_FILE=jar包名字
# 往容器中添加jar包
ADD ${JAR_FILE} app.jar
# 启动镜像自动运行程序
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/urandom","-jar","/app.jar"]
2. 制作镜像
- java:8是指Docker Hub上官方提供的java镜像,版本号是8也就是jdk1.8,有了这个基础镜像后,Dockerfile可以通过FROM指令直接获取它的状态——也就是在容器中java是已经安装的,接下来通过自定义的命令来运行Spring Boot应用:
VOLUME指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat默认使用/tmp作为工作目录。效果就是在主机的/var/lib/docker目录下创建了一个临时文件,并连接到容器的/tmp。 - 将项目的jar文件作为app.jar添加到容器
- RUN表示在新创建的镜像中执行一些命令,然后把执行的结果提交到当前镜像。这里使用touch命令来改变文件的修改时间,Docker创建的所有容器文件默认状态都是“未修改”。这对于简单应用来说不需要,不过对于一些静态内容(比如:index.html)的文件就需要一个“修改时间”。
- EXPOSE 容器暴露端口
- ENTRYPOINT 应用启动命令 参数设定
t/funtaster/article/details/83274727
- 出现如下的问题(连接不上docker镜像库)
- 解决办法:
//运行命令,修改文件:
vim /etc/docker/daemon.json文件中加入:
{
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
//然后重启守护进程
systemctl daemon-reload
//一定要重启docker 我说怎么设置后好像没有设置一样,真的坑爹啊
systemctl restart docker
- success后启动容器
-d 参数是让容器后台运行
-p 宿主机port:容器port,此时将宿主机中的8080端口映射到容器中的8000(项目中端口配置的是8000)端口
docker run -d -p 8080:8000
//访问的时候用暴露的端口8080访问如下
- 查看docker镜像