web项目生成docker镜像
1.利用maven插件
1.1.关闭防火墙
#查看linux版本
cat /etc/redhat-release
#查看状态
systemctl status firewalld
#关闭
systemctl stop firewalld
1.2修改docker配置,使其能够被远程访问
1.修改配置
vi /lib/systemd/system/docker.service
# 在ExecStart=后添加配置
‐H tcp://0.0.0.0:2375 ‐H unix:///var/run/docker.sock
unix://var/run/docker.sock
:unix socket,本地客户端将通过这个来连接 Docker Daemon
tcp://0.0.0.0:2375
:tcp socket,表示允许任何远程客户端通过 2375 端口连接 Docker Daemon
2.修改后重启docker
systemctl daemon-reload
systemctl restart docker
3.重启后,输入curl -X GET http://192.168.232.128:2375/info
访问,看看是否能访问docker api了
也可以在浏览器里输入看看是否能访问到信息,如图:
1.3 检查是否有jdk8镜像
1.查看镜像docker images
2.如上,没有jdk8,因为后续我们web项目是java项目,所以需要拉去jdk8镜像下来
docker pull kdvolder/jdk8
1.4 pom增加maven插件
java代码:
package com.zy.control;
@RestController
@RequestMapping("/person")
@Slf4j
public class PersonController {
@GetMapping("/{id}")
public Person person(@PathVariable Integer id) {
return Person.builder().pid(id).pName("测试").build();
}
}
application.properties:
server.port=9999
pom如下:
<build>
<plugins>
<!--防止打包后文件依赖文件没有一起打包,然后镜像内没有可以运行的程序文件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<!--绑定package生命阶段-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<!--在原始Maven打包形成的jar包基础上,进行重新打包,新形成的jar包不但包含应用类文件和配置文件,-->
<!--而且还会包含应用所依赖的jar包以及Springboot启动相关类(loader等)-->
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
<!--docker插件打包-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.1.0</version>
<configuration>
<!--不能存在大小写名字,一律只能小写,否则打包不通过-->
<imageName>${project.artifactId}:${project.version}</imageName>
<!-- 基础镜像 相当于Dockerfile里的from 使用了jdk8,那么docker里必须要有镜像jdk8,下面这个是网上下载的 -->
<baseImage>kdvolder/jdk8</baseImage>
<!--相当于启动容器后,会自动执行java -jar webapi.jar-->
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<!--是否推送到docker私有仓库-->
<!-- <pushImage>true</pushImage>-->
<!-- <registryUrl>192.168.232.128:5000</registryUrl>-->
<resources>
<resource>
<targetPath>/</targetPath>
<!--当前项目编译生成目录,比如target目录-->
<directory>${project.build.directory}</directory>
<!--需要上传的jar名称-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<dockerHost>http://192.168.232.128:2375</dockerHost>
<imageTags>
<imageTag>1.0.5</imageTag>
</imageTags>
</configuration>
</plugin>
</plugins>
</build>
设置环境变量,插件执行的时候,会去访问DOCKER_HOST,不添加的话,就默认localhost去了
DOCKER_HOST = tcp://192.168.232.128:2375
1.5 执行插件
mvn clean package docker:build
clean:清空之前的打包
package:打包程序
docker:build:调用maven docker插件
或者通过IDEA启动
1.6 查看镜像
1.7 启动镜像应用
1.启动
[root@localhost docker]# docker run -d -p 8085:9999 webapi:1.0-SNAPSHOT
-d参数是让容器后台运行
-p 是做端口映射,此时将服务器中的8085端口映射到容器中的9999(项目中端口配置的是8085)端口
2.可以输入docker run -it webapi:1.0-SNAPSHOT /bin/bash
,查看日志
或者输入docker logs --tail="10" webapi:1.0-SNAPSHOT
3.访问指定端口,查看应用是否正常
2.IDEA 连接docker
1.在设置里,添加远程IP和端口即可(前提:docker开启远程访问)
2.连接
3.dockerfile插件
后续再更...
问题解决
1.IDEA里 mvn不是内部命令
1.系统环境里添加maven环境变量:
变量名:MAVEN_HOME
变量值:E:\apache-maven-3.2.3
变量名:Path
变量值:;%MAVEN_HOME%\bin
2.重启IDEA,执行mvn -version 查看
注意:若还提示不存在内部命令,那么用管理员重启再试试,若还是不行,就需要再重启电脑试试看
2.MVN执行报错
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
这是因为本机没有配置jdk8,而maven执行需要jdk,配置jdk8即可。参考
新建系统变量,变量名:JAVA_HOME,变量值:C:\Program Files\Java\jdk1.8.0_202(jdk 安装位置)
双击原本有的系统变量 Path,在里面添加 %JAVA_HOME%\bin,以及 %JAVA_HOME%\jre\bin,然后确定即可
新建系统变量,变量名:CLASSPATH,变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
3.docker插件执行报Could not acquire image ID or digest following build
之前用最新版插件1.2.2这个,会报这个错,后面降低版本用1.1.0就不会了
4.no main manifest attribute问题
spring-boot-maven插件repackage(goal)的那些事
参考
3.Maven插件之spotify的docker-maven-plugin和dockerfile-maven-plugin,docker部署