1. 前言
微服务项目原本采用的jar包的方式部署,考虑到后面会随着业务量增大,某些服务会复制多份,采用docker实现部署会更加方便和快捷;
2.安装环境
- 安装了docker的服务器,且支持远程连接
- idea开发环境
- springboot或者springcloud项目
file——> setting——>plugins——>marketplace——>docker
安装好重启idea后
file——> setting——>docker——>新增一个连接——>添加docker服务器配置
显示Connection successful 则连接成功,如果连接不成功,检查docker server是否是running状态,或者docker是否开启了远程连接;
配置成功后打开连接,会显示出当前docker server上的containers和images;
如何将springboot项目打包成docker能用的容器
pom.xml文件中加入docker的打包方式
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--加入下面两项配置-->
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
<!--使用docker-maven-plugin插件-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--指定生成的镜像名-->
<imageName>svc/${project.artifactId}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 指定 Dockerfile 路径-->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!--指定远程 docker api地址-->
<dockerHost>http://192.168.226.128:2375</dockerHost>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<!--jar 包所在的路径 此处配置的 即对应 target 目录-->
<directory>${project.build.directory}</directory>
<!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
在src/main下面新建一个文件夹docker,并且新建一个docker配置的文件DockerFile
# 基于哪个镜像
FROM java:8
# 将本地文件夹挂载到当前容器
VOLUME /tmp
# 拷贝文件到容器,svc_user-1.0-SNAPSHOT.jar这里是maven打包后的名字
ADD svc_user-1.0-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
# 配置容器启动后执行的命令
#ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
ENTRYPOINT ["java","-jar","/app.jar"]
至此,使用maven的mvn clean 和mvn的clean就可以打包并自动执行mvn docker:build,将镜像上传到docker server
右键新生成的images,new container弹窗填写container name,端口的映射,可能还需要填写Run options
Docker网络模式 | 配置 | 说明 |
---|---|---|
host模式 | –net=host | 容器和宿主机共享Network namespace。 |
container模式 | –net=container:NAME_or_ID | 容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace。 |
none模式 | –net=none | 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。 |
bridge模式 | –net=bridge | (默认为该模式) |
具体大家根据说明进行调整
然后,start container就行了
后一会儿就发现服务部署好了,并且启动了
3.总结
需要注意的是端口的映射和启动参数 –net=host相关的配置,然后就可以更加快捷地利用idea自带的docker插件快乐玩耍了!!!