IDEA-SpringBoot项目利用docker实现一键打包部署运行

服务器上配置

1. 开启docker远程访问
cd /lib/systemd/system
sudo vim docker.service

#替换或修改:127.0.0.1(本地网络访问)换成0.0.0.0表示不限制访问地址
[Service]
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375

2. 重载配置
systemctl daemon-reload
3. 重启docker 服务
systemctl restart docker.service

4. 开放端口(,阿里云配置访问规则,本地telnet试试能否连通)
ubuntu命令:

  • sudo ufw allow 2375

centos命令:

  • firewall-cmd --zone=public --add-port=2375/tcp --permanent
    systemctl restart firewalld

windows配置

1. 配置用户环境变量
在这里插入图片描述

2. IDEA设置
需要先下载IDEA的docker插件,在插件市场直接安装即可
在这里插入图片描述

项目设置

1. pom文件
加入docker打包插件

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <executable>true</executable>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.13</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <repository>${project.name}</repository>
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                    <dockerfile>Dockerfile</dockerfile>
                </configuration>
            </plugin>
        </plugins>
    </build>

2. pom同级目录下写Dockerfile

# 添加 Java 8 镜像来源
FROM java:8

# 添加参数
ARG JAR_FILE

# 添加 Spring Boot 包
ADD target/${JAR_FILE} app.jar

EXPOSE 8080

# 执行启动命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

完成到这一步,然后直接在maven中执行打包,就会自动将Springboot项目打包成镜像上传到远程
但是并不会执行,还需要手动执行一次,因此下面的步骤用于取消这个手动过程,嫌麻烦的可以直接使用docker run命令执行镜像即可

**3. 配置本地免密ssh登录 **
windows本地:
执行生成ssh密钥,一路回车即可
ssh-keygen
生成的密钥文件会在C:\Users\你的账号.ssh下

将该目录下的id_rsa.pub文件内容追加到远程服务器的/home/你的用户名/.ssh下的authorized_keys文件中
如果没有authorized_keys文件,先用touch创建,然后把id_rsa.pub的内容追加进去。
必须要有authorized_keys文件,直接将id_rsa.pub放进去是没用的

4. 编写sh执行脚本
其内的端口号等docker执行命令按需更改

# 项目名称
projectName="maven-docker"
# 项目版本号
projectVersion="0.0.1-SNAPSHOT"
ssh 你的账号@你的IP "echo "你的sudo密码"|sudo -S docker stop ${projectName};sudo docker rm ${projectName};sudo docker run --net=host  --name=${projectName} -d -p 8080:8080 ${projectName}:${projectVersion};echo '执行完毕,回车继续...';read -p ''"

由于我的docker没有加入到可执行sudo命令的用户组,因此这里需要用sudo命令。
sudo -S 的意思是,从前面的echo中获取sudo命令

使用方法

  1. maven package 打包 (这一步会制作镜像并上传到远程docker仓库中)
  2. 运行sh文件 (这一步运行镜像)
  3. 访问