Docker 开启TCP 服务
vi /lib/systemd/system/docker.service
改写以下内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
- 重启服务
#重新加载配置文件
systemctl daemon-reload
#重启服务
systemctl restart docker.service
此时docker已经开放了2375端口,使用外部主机访问
http://docker:2375/info
IDEA 集成Docker
-
安装Docker 插件
-
配置docker服务地址
点击view->services,打开docker的操作面板
双击docker01可以看到此docker服务下镜像和容器
右击docker镜像,可以创建新的容器,并且可以监控容器日志输出,docker的日志收集是将容器内的标准输出以及错误输出重定向到了宿主机的某个文件中,这样就可以看到容器的运行信息了。
配置maven插件,实现打包后自动生成镜像并启动容器
- 在maven中配置docker打包插件
<plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><!-- 镜像名称 guoweixin/exam--><imageName>${project.artifactId}</imageName><!--指定标签--><imageTags><imageTag>latest</imageTag></imageTags><!-- 基础镜像jdk 1.8--><baseImage>java</baseImage><!-- 制作者提供本人信息 --><maintainer>zdk=20477@sina.com</maintainer><runs><run>mkdir -p /opt/java/</run></runs><!--切换到/ROOT目录 --><workdir>/ROOT</workdir><cmd>["java", "-version"]</cmd><entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint><!-- 指定 Dockerfile 路径<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>--><!--指定远程 docker api地址--><dockerHost>http://docker:2375</dockerHost><!-- 这里是复制 jar 包到 docker 容器指定目录配置 --><resources><resource><targetPath>/ROOT</targetPath><!--用于指定需要复制的根目录,${project.build.directory}表示target目录--><directory>${project.build.directory}</directory><!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。--><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin>
这个插件的作用就是模拟一个Dockerfile,然后告诉docker服务打包一个镜像。
在cmd终端运行 mvn clean package docker:build命令可以构建一个镜像,其中clean package这两个是常用的插件命令,maven内置好了,而docker:build 这个是作用于package后的生命周期的build的阶段,作用就是将打好的jar包构建成一个镜像。
配置package的docker-build插件
当执行package生命周期的时候,设置goal目标,进行docker镜像的构建
<!--当执行mvn package 时,执行: mvn clean package docker:build -->
<executions><execution><id>build-image</id><!--指定此插件在package阶段执行--><phase>package</phase><goals><!--指定此插件的build的目标--><goal>build</goal></goals></execution>
</executions>
配置上这个以后,只要每次进行package就可以自动生成新的镜像。
完整的pom.xml如下:
<build><finalName>app</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><!-- 镜像名称 guoweixin/exam--><imageName>${project.artifactId}</imageName><!--指定标签--><imageTags><imageTag>latest</imageTag></imageTags><!-- 基础镜像jdk 1.8--><baseImage>java</baseImage><!-- 制作者提供本人信息 --><maintainer>zdk=20477@sina.com</maintainer><runs><run>mkdir -p /opt/java/</run></runs><!--切换到/ROOT目录 --><workdir>/ROOT</workdir><cmd>["java", "-version"]</cmd><entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint><!-- 指定 Dockerfile 路径<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>--><!--指定远程 docker api地址--><dockerHost>http://docker:2375</dockerHost><!-- 这里是复制 jar 包到 docker 容器指定目录配置 --><resources><resource><targetPath>/ROOT</targetPath><!--用于指定需要复制的根目录,${project.build.directory}表示target目录--><directory>${project.build.directory}</directory><!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。--><include>${project.build.finalName}.jar</include></resource></resources></configuration><executions><execution><id>build-image</id><!--指定此插件在package阶段执行--><phase>package</phase><goals><!--指定此插件的build的目标--><goal>build</goal></goals></execution></executions></plugin></plugins></build>
添加上这个打包插件以后,每执行package操作,就会执行docker:build,从而根据配置信息再次根据最新打的jar包创建出一个镜像,然后可以在idea中运行了。