用Docker部署Springboot 项目
本文使用Docker部署Spring Boot项目。部署之前需要环境中已经安装Docker和Maven(用于打包),所以本文先进行安装Docker和Maven;接着搭建一个Spring Boot项目,使其支持Docker部署;最后进行部署和测试。
一、环境搭建
1.ubuntu环境下docker安装
参考教程:https://www.cnblogs.com/blog-rui/p/11244023.html
使用下列命令:
systemctl start docker.service
systemctl enable docker.service
输入docker version
,返回版本信息表明Docker安装成功。
2.安装Maven和配置阿里云镜像
在某个文件夹打开终端,执行以下命令行
wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
tar vxf apache-maven-3.5.4-bin.tar.gz
//下面的“/usr/local/maven3”为想要移动的目录,这里的移动是将“apache-maven-3.5.4”文件夹里的东西放到“/usr/local/maven3”目录下
mv apache-maven-3.5.4 /usr/local/maven3
打开环境变量vim /etc/profile
,在最下面添加如下内容:
MAVEN_HOME=/usr/local/maven3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
保存并退出::wq
刷新环境变量的配置使其生效:source /etc/profile
使用命令mvn -v
进行查看
[root@localhost ~]# mvn -v Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00) Maven home: /usr/local/maven3 Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_211/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
切换到maven安装目录的配置文件(/usr/lcoal/maven3/conf)下面,打开settings.xml文件,在<mirrors>
标签里面添加:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
<!-- 上面的镜像可能有点问题,两个一起用 -->
<mirror>
<id>nexus-aliyun </id>
<mirrorOf>central </mirrorOf>
<name>Nexus aliyun </name>
<url>http://maven.aliyun.com/nexus/content/repositories/central </url>
</mirror>
二、Spring Boot项目添加Docker支持
1.新建Spring Boot工程——hellotest
启动类如下:
@RestController
@SpringBootApplication
public class HellotestApplication {
public static void main(String[] args) {
SpringApplication.run(HellotestApplication.class, args);
}
@RequestMapping("/")
public String hello(){
return "Hello,Springboot with Docker!";
}
}
2.添加Docker支持
在 pom.xml中添加Docker镜像名称及添加 Docker插件。
- 在
<properties>
标签里添加。
<properties>
<docker.image.prefix>springboot</docker.image.prefix>
</properties>
- 在
<build> --> <plugins>
标签里添加
<!-- docker插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
3.编写Dockerfile文件
在Springboot工程目录src/main下创建Directory命名为dockerDockerfile 文件,Dockerfile 文件用来说明如何来构建镜像。
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD docker-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
-
FROM指令指定一个已经存在的镜像,告诉Docker后续的指令都是在这个基础上进行的。例如:
FROM java:8
表示使用 Jdk1.8 环境为基础镜像进行构建镜像。 -
VOLUME ,VOLUME 指向了一个/tmp的目录,由于Spring Boot使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
-
ADD ,拷贝文件并且重命名
-
ENTRYPOINT,为了缩短Tomcat 的启动时间,添加java.security.egd的系统属性指向/dev/urandom作为ENTRYPOINT。
三、部署Spring Boot工程
将主机的项目代码拷贝服务器或虚拟机中,在虚拟机中进入项目路径。如编者是“/usr/local/projects/hellotest”.
mvn package
若报错中包含以下这一句
Unknown host maven.aliyun.com: 域名解析暂时失败 -> [Help 1]
则可以尝试如下修改
在终端输入指令vim /etc/resolv.conf
然后加入nameserver 114.114.114.114
java -jar target/hellotest-0.0.1-SNAPSHOT.jar
如出现以下界面,代表项目启动成功,说明环境配置没有问题,接下来可以使用Dockerfile构建镜像。
mvn package docker:build
可以看到docker镜像构建成功,仔细看日志,会发现四个步骤和Dockerfile中的指令是一一对应的。
- 运行docker镜像
docker run -d -p 8080:8080 -t springboot/hellotest
- 在虚拟机浏览器进行访问,可以看到返回结果,说明部署成功。
部分内容参考博客:https://www.cnblogs.com/sgh1023/p/11079003.html