IDEA docker部署springboot项目
一、docker服务器侧监听配置
centos7安装配置docker参考《centos下docker安装》
vim /usr/lib/systemd/system/docker.service,配置完端口,下面的idea中才能连接成功。
默认使用2375端口监听,如果开有防火墙,需要把端口添加到例外。
ExecStart=``/usr/bin/dockerd` `-H fd:``//` `--containerd=``/run/containerd/containerd``.sock -H tcp:``//0``.0.0.0:2375
二、插件安装和配置
配置docker连接,一定要显示Connection succcessful:
三、springboot项目,增加docker插件和Dockerfile配置
- 依赖包和配置
<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配置
#指定基础镜像,在其上进行定制
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. 创建容器
注意bind ports,我这里是8080:8088,前面是服务器向外暴露的端口号,8088则是application.yml里配置的应用端口号,我这里对应的tomcat端口号。
四、主要问题解决
1.xxxx-1.0-SNAPSHOT.jar中没有主清单属性 ,造成发布失败。
主要是因为springboot没有配置maven package插件,pom中新增plugin
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
- 容器时间和宿主时间不一致
在Dockerfile最后一行增加:
#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' >/etc/timezone \
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 陈子琦的博客!
评论