一、docker服务器侧监听配置

centos7安装配置docker参考《centos下docker安装

1
vim /usr/lib/systemd/system/docker.service,配置完端口,下面的idea中才能连接成功。

默认使用2375端口监听,如果开有防火墙,需要把端口添加到例外。

1
ExecStart=``/usr/bin/dockerd` `-H fd:``//` `--containerd=``/run/containerd/containerd``.sock -H tcp:``//0``.0.0.0:2375

二、插件安装和配置

img

配置docker连接,一定要显示Connection succcessful:

img

三、springboot项目,增加docker插件和Dockerfile配置

  1. 依赖包和配置

复制代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version> 1.2.1</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>${project.artifactId}</imageName>
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<dockerDirectory>${project.basedir}</dockerDirectory>
<dockerHost>http://10.245.202.222:2375</dockerHost>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>

复制代码

我一开始建了一个docker的文件夹,将dockerfile放到那里,实践证明不行,不允许往上层路径寻找jar包。

\2. Dockerfile配置

复制代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#指定基础镜像,在其上进行定制
FROM java:8

#维护者信息
MAINTAINER zhouyu <[email protected]>

#这里的 /tmp 目录就会在运行时自动挂载为匿名卷,任何向 /tmp 中写入的信息都不会记录进容器存储层。
VOLUME /tmp

#复制上下文目录下的target/demo-1.0.0.jar 到容器里
COPY target/freemarker-page-demo-1.0-SNAPSHOT.jar demo-1.0.0.jar

#bash方式执行,使demo-1.0.0.jar可访问
#RUN新建立一层,在其上执行这些命令,执行结束后, commit 这一层的修改,构成新的镜像。
RUN bash -c "touch /demo-1.0.0.jar"

#声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 8080

#指定容器启动程序及参数 <ENTRYPOINT> "<CMD>"
ENTRYPOINT ["java","-jar","demo-1.0.0.jar"]

复制代码

执行mvn package成功

\3. 创建容器

img

img

注意bind ports,我这里是8080:8088,前面是服务器向外暴露的端口号,8088则是application.yml里配置的应用端口号,我这里对应的tomcat端口号。

四、主要问题解决

1.xxxx-1.0-SNAPSHOT.jar中没有主清单属性 ,造成发布失败。

主要是因为springboot没有配置maven package插件,pom中新增plugin

复制代码

1
2
3
4
5
6
7
8
9
10
11
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>

复制代码

  1. 容器时间和宿主时间不一致

在Dockerfile最后一行增加:

1
2
3
#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone \