0.环境

  • 阿里云 CentOS 7.7
  • IDEA 2019 1.3

1.安装Docker

yum install docker

通过systemctl启动服务

sudo systemctl start docker

查询docker版本,看是否启动成功

[root@iZ8vb4fflsonz1bbx8vmwgZ ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-103.git7f2769b.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      7f2769b/1.13.1
 Built:           Sun Sep 15 14:06:47 2019
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-103.git7f2769b.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      7f2769b/1.13.1
 Built:           Sun Sep 15 14:06:47 2019
 OS/Arch:         linux/amd64
 Experimental:    false

2.修改Docker配置

该操作会引发安全漏洞,请不要在生产环境使用。仅供测试环境练习~
补充:在我发布这篇文章的当天夜里,因为我的测试服务器忘了关闭2375,所以被攻击了!!!!!除非做一些安全策略,否则千万记得不要开启!不要开启!不要开启!

安装好后,docker还不能够被远程访问,我们需要修改docker的配置文件使其能够被远程访问。
进入/usr/lib/systemd/system/docker.service

vim /usr/lib/systemd/system/docker.service

增加:

-H tcp://0.0.0.0:2375  -H unix:///var/run/docker.sock

微信截图_20191101154953.png

最后重启Docker

systemctl daemon-reload

service docker restart

3.新增阿里云安全组的安全规则

[scode type="blue"]非阿里云主机请咨询其服务商配置安全组[/scode]
通过配置安全组规则,允许安全组内的ECS实例对公网TCP 端口为2375的访问。
微信截图_20191101155824.png

4.下载IDEA的Docker插件

打开idea,双击shift,输入plugins进入,搜索docker,点击install下载插件,下载完成后记得重启IDEA。
微信图片_20191101160405.png
然后进入File | Settings | Build, Execution, Deployment | Docker,填写Docker地址:
微信截图_20191101161533.png!
如无法连接,请检查服务器的安全组策略。

5.在项目中配置Dockerfile文件

微信截图_20191101162141.png

#基于网易提供的java镜像构建
FROM hub.c.163.com/library/java:latest
# Spring Boot运行时需要tmp目录,这里数据卷配置一个/tmp目录
VOLUME /tmp
# 把target下打包好的.jar文件,复制一份新的到/app,jar
ADD target/demo-0.0.1-SNAPSHOT.jar app.jar
# 启动app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

6.配置Maven插件并打包上传

配置Maven插件:

在pom文件中增加:

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.0</version>
                <executions>
                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <dockerHost>http://你的服务器IP:2375</dockerHost>
                    <imageName>isdxh/${project.artifactId}</imageName>
                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                    </imageTags>
                    <forceTags>true</forceTags>
                    <dockerDirectory>${project.basedir}</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

[collapse status="false" title="全部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.2.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <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>

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.2.0</version>
                <executions>
                    <execution>
                        <id>build-image</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <dockerHost>http://你的服务器ip:2375</dockerHost>
                    <imageName>test/${project.artifactId}</imageName>
                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                    </imageTags>
                    <forceTags>true</forceTags>
                    <dockerDirectory>${project.basedir}</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

        </plugins>
    </build>
</project>

[/collapse]
意思是:
首先在 execution 节点中配置当执行 mvn package 的时候,顺便也执行一下 docker:build

然后在 configuration 中分别配置 Docker 的主机地址,镜像的名称,镜像的 tags,其中 dockerDirectory 表示指定 Dockerfile 的位置。

最后 resource 节点中再配置一下 jar 的位置和名称即可。

记得修改我的pom文件中的dockerHost地址

打包上传:

微信截图_20191101163120.png
微信截图_20191101164334.png

7.创建容器,并运行

我们会看到下方菜单多了一个docker(第4节我们所下载的插件,并配置的docker地址),点击进去。会发现多了镜像。
右键创建容器,填写容器名称和绑定端口。
GIF.gif
微信截图_20191101165759.png
[scode type="yellow"]这里注意一下端口,host port 和 Container port ,因为我的springboot项目的配置文件修了端口为80端口,所以我的Container port为80[/scode]

然后点击run就ok了~~~
微信截图_20191101170137.png
然后访问:http://xxxxxxxxx:8888 访问正常。
[scode type="blue"]不能访问请先检查docker容器的启动日志是否正常启动、检查主机防火墙、主机端口的映射和容器端口的映射是否正确
[/scode]

感谢: https://mp.weixin.qq.com/s/vSCQLvQBYMYoPhdlO2v3XA

标签: SpringBoot, docker

添加新评论