编写目的
最近在学习Docker 自动化打包、部署、发布,在网上看了很多千篇一律粗制滥造的文章,在走了很多弯路的同时也很气愤,写这篇文章目的有二,其一,是把完整的、正确的思路整理出来希望能够帮助同样在学习Docker的同学,其二,是记录学习过程给自己留一个备份。本篇内容仍然是以实践为主,不过多论述理论知识。
实现目标
使用IDEA把SpringBoot项目打包为镜像自动发布到Docker服务器。
思路步骤
分析实现目标其中有三个重要参与者,分别是IDEA、SpringBoot和Docker服务端,下面逐一说明配置内容。
1. Docker服务端配置
Docker安装后默认是不开放网络访问功能的,要想通过网络远程访问和传输数据就必须开放Docker服务端2375端口,使开发机能够远程连接到服务端。
1.1. 配置
编辑docker.service文件
vi /etc/systemd/system/docker.service
找到ExecStart=关键字将其修改为如下内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
重启Docker使配置生效
# 重载unit配置文件
systemctl daemon-reload
# 启动Docker
systemctl start docker
1.2. 测试
(1)使用 netstat -ntpl 查看监听端口
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 878/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 993/master
tcp6 0 0 :::8080 :::* LISTEN 1538/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 878/sshd
tcp6 0 0 ::1:25 :::* LISTEN 993/master
tcp6 0 0 :::2375 :::* LISTEN 875/dockerd
(2)访问 http://192.168.248.129:2375/version
2. IDEA配置
在IDEA中通过配置Docker插件可以远程操控Docker服务端创建、启停容器等操作,高版本IDEA自带Docker插件。
2.1. 配置
2.2. 测试
3. SpringBoot配置
springBoot是借助docker-maven-plugin插件实现集成Docker并自动打包镜像和发布镜像的。
3.1 配置
(1)配置dockefile文件
在工程src/main/下创建docker文件夹,并将dockefile文件拷贝到此目录下。
# 基础镜像:FROM命令: 基础镜像名:tag,例如:java:8
FROM macaw204/jre8:1.0
# 维护者: 格式:MAINTAINER <name>
MAINTAINER microapps
# 下面RUN执行时的目录
WORKDIR /app
# 镜像的操作指令
# 拷贝一个文件到容器,格式:<src> <dest>
ADD docker-1.0.jar /app/app.jar
# 告诉docker容器暴露端口,在容器启动的时需要通过 -p做端口映射
EXPOSE 8080
# 配置容器启动后,执行的命令
ENTRYPOINT ["java","-jar","/app/app.jar"]
(2)配置pom.xml
在pom.xml文件中配置 docker-maven-plugin插件
......
<properties>
<java.version>1.8</java.version>
<docker.image.prefix>css</docker.image.prefix>
</properties>
......
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--Maven docker 生成镜像插件-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!--指定远程 docker api地址-->
<dockerHost>http://192.168.248.129:2375</dockerHost>
<!--镜像名:前缀[可选]/名称-->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--指定标签 这里指定的是镜像的版本,我们默认版本是latest-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 指向dockerFile文件-->
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<!-- 打包路径-->
<directory>${project.build.directory}</directory>
<!-- jar包名称-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
3.2 测试
(1)创建程序
复用启动类在其中加入http请求访问方法
package css.com.cn;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
@RestController
@SpringBootApplication
public class DockerApplication {
public static void main(String[] args) {
SpringApplication.run(DockerApplication.class, args);
}
@GetMapping("/")
public String xq02Init(HttpServletResponse response){
return "hello docker";
}
}
(2)打jar包
(2)创建镜像并发布
发布前查看Docker服务端镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
macaw204/jre8 1.0 b8c82c0eadfd 2 days ago 174MB
alpine latest a24bb4013296 4 months ago 5.57MB
打包镜像
发布后查看Docker服务端镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
css/docker latest c0252ffc0c09 2 minutes ago 191MB
macaw204/jre8 1.0 b8c82c0eadfd 2 days ago 174MB
alpine latest a24bb4013296 4 months ago 5.57MB
通过IDEA创建容器
右键创建容器
通过浏览器访问