springboot 整合 docker, 进行自动化部署,其实没你想象的那么难
前言
要在spring boot 项目中整合docker,实现自动化部署,其实是非常简单的事情,下面我们一一进行详细说明,
服务端开启docker远程端口
要开启docker远程端口,需要修改配置文件,命令
vim /lib/systemd/system/docker.service
- 修改ExecStart 这一行,中间增加-H tcp://0.0.0.0:2375,如下图
退出并保存 - 重新加载配置文件
systemctl daemon-reload
- 重启docker服务
systemctl restart docker 或 systemctl restart docker.service
idea 安装docker 插件
- 在idea 中安装docker plugs ,如下图
- 配置docker 服务地址和端口
配置好了,就会显示Connection successful
编写demo服务工程,部署docker
现在我们创建一个demo工程,如图
- Controller代码如下
package springbootdocker.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * @Author: dengcs * @Date: 2020/7/2 10:56 * Comment: */ @RestController public class HellowController { @GetMapping("/hello") public String testHelloDocker(){ return "hello word Docker"; } }
- pom文件配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>spring-boot-docker</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <packaging>jar</packaging> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <!--properties节点中设置docker镜像的前缀“springboot”--> <docker.image.prefix>springio</docker.image.prefix> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- tag::plugin[] --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</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> <!-- end::plugin[] --> </plugins> </build> </project>
- 工程下创建Dockerfile文件,如下
- Dockerfile源文件代码如下
#FROM frolvlad/alpine-oraclejdk8:slim ,这个仓库已经找不到 FROM ascdc/jdk8 VOLUME /tmp ADD demo-0.0.1-SNAPSHOT.jar app.jar #COPY target/demo-0.0.1-SNAPSHOT.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
创建docker镜像
- 从Run->Edit Configrations进入配置界面,如下图
- 在配置Bind ports 时,如下图
完成后,如下图
- 在docker服务器上输入命令也能看到
docker images
4. 测试结果
运行起来后,看测试结果为
手工部署
也可以通过手工部署的方式,如下
- 在docker服务器创建一个文件夹为docker,上传上面的Dockfile文件及jar包
- 通过docker build命令创建镜像
docker build -t dengcs/dockerdemo:1.0 .
注意:最后一个点" . " 。 它很重要,表示上下文路径。那么什么是上下文路径?看下面解析
上下文路径,是指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
解析:由于 docker 的运行模式是 C/S。我们本机是 C,docker 引擎是 S。实际的构建过程是在 docker 引擎下完成的,所以这个时候无法用到我们本机的文件。这就需要把我们本机的指定目录下的文件一起打包提供给 docker 引擎使用。
如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。
注意:上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。
- 启动容器
启动容器命令
docker run -d --name dockerdemo-test -p 8080:8080 dengcs/dockerdemo:1.0
写在最后
总之,不管是手工部署,还是自动部署,都要创建Dockerfile文件,这个才是最重要的环节。
如果想了解更多docker知识,请关注我吧 _
- springboot docker jenkins 自动化部署并上传镜像的步骤详解
- springboot整合docker部署(两种构建Docker镜像方式)--2019-3-5转
- springboot docker jenkins 自动化部署并上传镜像
- jenkins自动化部署搭建。jenkins+docker+maven+git+springboot
- springboot整合docker部署实现两种构建Docker镜像方式
- docker-compose, docker registry2,Python 脚本 自动化 部署 spring boot 进销存系统
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
- SpringBoot+Docker实现项目的Maven打包&镜像构建&容器中运行==简单自动化部署
- FastDFS简介+Docker部署fastdfs+springboot整合实现
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
- 初次部署springboot、docker、redis、mysql、nginx、jenkins自动化部署
- 二. Spring Boot使用DockerFile maven插件自动化部署
- SpringBoot + maven + Jenkins + docker 实现docker集群一键自动化部署
- jenkins+maven+docker+github全自动化部署SpringBoot
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数示例代码
- Solr7.7环境搭建+Springboot整合Solr+对文件进行索引+Solr避坑
- idea使用docker远程部署springboot
- SpringBoot 整合 Mybatis 进行CRUD测试开发