Docker开启外网访问
修改docker.service文件,添加监听端口 -H tcp://0.0.0.0:2375
vi /usr/lib/systemd/system/docker.service
找到 ExecStart,在最后面添加 -H tcp://0.0.0.0:2375,如下图所示

重启docker
systemctl daemon-reload
systemctl start docker
访问:http://localhost:2375/version 返回版本信息表示成功
开启防火墙
安装配置idea的docker插件
在File --> Settings --> Plugins 在输入框中搜索Docker,选择并安装
在File–> Settings–>Build,Execution,Deployment中找到Docker
新建一个docker实例,然后在Engine API URL中将docker所在ip端口号填上,填完如果下面显示Connection successful证明连接docker成功。如果失败,可能是我们上一步docker开启远程连接未成功。

我们设置完成后,回到idea主界面,可以看到页面下面有一个docker窗口(有些版本是services窗口)。点击绿色箭头,连接docker。连接上后显示Containers和Images就是我们现在docker中已经有的容器和镜像。

maven打包,生成镜像
修改pom.xml文件,引入docker-maven-plugin插件相关配置. 改配置在plugins标签内
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>project/${project.artifactId}</imageName>
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<baseImage>java</baseImage>
<maintainer>v-kun</maintainer>
<workdir>/ROOT</workdir>
<cmd>["java", "-version"]</cmd>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"] </entryPoint>
<dockerHost>http://192.168.4.32:2375</dockerHost>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
在项目目录/src/main/resources下新建文件夹docker,在docker文件夹下新建DockerFile,编辑DockerFile
FROM java
MAINTAINER v-kun v-kun.com
WORKDIR /ROOT
ADD /ROOT/risen-hnshzt-txl-0.0.1-SNAPSHOT.jar /ROOT/
ENTRYPOINT ["java", "-jar", "risen-hnshzt-txl-0.0.1-SNAPSHOT.jar"]
CMD ["java", "-version"]
使用maven打包。我们在pom.xml中配置过,如果我们是用maven的package,那么就会自动使用Dockerfile文件进行构建。

创建容器,项目部署到docker
我们在docker窗口中,找到我们刚才创建的镜像文件,鼠标右键,选择Create container,我们修改创建容器所需要的配置。

在Create Docker Configuration弹窗中修改
- Container name(容器名称)
- Bind ports(Ip和端口映射)我在这里添加13047:13047. 使用本地13047端口,去访问容器的13047.
- Environment variables (环境变量) 设置一下时区防止容器使用UTC时区
- 在这里的Command line 中添加一个命令 package


配置完成后保存。以后我们启动项目时都会执行maven的package命令,自动将我们打包并把项目生成docker镜像文件启动。
以后,如果我们修改项目后,都可以使用下图所示去启动。 它会自动打包创建docker镜像并启动项目。
如果在idea的docker里面看项目日志中文乱码
打开Help-Edit Custom VM Options
在最后加一行,重启idea
-Dfile.encoding=UTF-8

<h2><a id="Docker_0"></a>Docker开启外网访问</h2>
<p>修改docker.service文件,添加监听端口 -H tcp://0.0.0.0:2375</p>
<pre><code class="lang-">vi /usr/lib/systemd/system/docker.service
</code></pre>
<p>找到 ExecStart,在最后面添加 -H tcp://0.0.0.0:2375,如下图所示<br />
<img src="https://v-kun-file.oss-cn-beijing.aliyuncs.com/blog/2022-11-22/3d66a19e316a43f39fa21f86baa037fd/image.png" alt="image" /><br />
重启docker</p>
<pre><code class="lang-">systemctl daemon-reload
systemctl start docker
</code></pre>
<p>访问:http://localhost:2375/version 返回版本信息表示成功</p>
<p>开启防火墙</p>
<h2><a id="ideadocker_16"></a>安装配置idea的docker插件</h2>
<p>在File --> Settings --> Plugins 在输入框中搜索Docker,选择并安装</p>
<p>在File–> Settings–>Build,Execution,Deployment中找到Docker</p>
<p>新建一个docker实例,然后在Engine API URL中将docker所在ip端口号填上,填完如果下面显示Connection successful证明连接docker成功。如果失败,可能是我们上一步docker开启远程连接未成功。</p>
<p><img src="https://v-kun-file.oss-cn-beijing.aliyuncs.com/blog/2022-11-22/98955fdc03bc4cc899461f4a4a1b4d52/image.png" alt="image" /></p>
<p>我们设置完成后,回到idea主界面,可以看到页面下面有一个docker窗口(有些版本是services窗口)。点击绿色箭头,连接docker。连接上后显示Containers和Images就是我们现在docker中已经有的容器和镜像。</p>
<p><img src="https://v-kun-file.oss-cn-beijing.aliyuncs.com/blog/2022-11-22/dae62ea1b91a4fd5b958ced2c6f60a62/image.png" alt="image" /></p>
<h2><a id="maven_29"></a>maven打包,生成镜像</h2>
<p>修改pom.xml文件,引入docker-maven-plugin插件相关配置. 改配置在plugins标签内</p>
<pre><div class="hljs"><code class="lang-xml">
<span class="hljs-comment"><!--使用docker-maven-plugin插件--></span>
<span class="hljs-tag"><<span class="hljs-name">plugin</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.springframework.boot<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>spring-boot-maven-plugin<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">configuration</span>></span>
<span class="hljs-tag"><<span class="hljs-name">fork</span>></span>true<span class="hljs-tag"></<span class="hljs-name">fork</span>></span>
<span class="hljs-tag"></<span class="hljs-name">configuration</span>></span>
<span class="hljs-tag"></<span class="hljs-name">plugin</span>></span>
<span class="hljs-comment"><!-- 跳过单元测试 --></span>
<span class="hljs-tag"><<span class="hljs-name">plugin</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.apache.maven.plugins<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>maven-surefire-plugin<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">configuration</span>></span>
<span class="hljs-tag"><<span class="hljs-name">skipTests</span>></span>true<span class="hljs-tag"></<span class="hljs-name">skipTests</span>></span>
<span class="hljs-tag"></<span class="hljs-name">configuration</span>></span>
<span class="hljs-tag"></<span class="hljs-name">plugin</span>></span>
<span class="hljs-comment"><!--使用docker-maven-plugin插件--></span>
<span class="hljs-tag"><<span class="hljs-name">plugin</span>></span>
<span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>com.spotify<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>docker-maven-plugin<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
<span class="hljs-tag"><<span class="hljs-name">version</span>></span>1.0.0<span class="hljs-tag"></<span class="hljs-name">version</span>></span>
<span class="hljs-comment"><!--将插件绑定在某个phase执行--></span>
<span class="hljs-tag"><<span class="hljs-name">executions</span>></span>
<span class="hljs-tag"><<span class="hljs-name">execution</span>></span>
<span class="hljs-tag"><<span class="hljs-name">id</span>></span>build-image<span class="hljs-tag"></<span class="hljs-name">id</span>></span>
<span class="hljs-comment"><!--用户只需执行mvn package ,就会自动执行mvn docker:build--></span>
<span class="hljs-tag"><<span class="hljs-name">phase</span>></span>package<span class="hljs-tag"></<span class="hljs-name">phase</span>></span>
<span class="hljs-tag"><<span class="hljs-name">goals</span>></span>
<span class="hljs-tag"><<span class="hljs-name">goal</span>></span>build<span class="hljs-tag"></<span class="hljs-name">goal</span>></span>
<span class="hljs-tag"></<span class="hljs-name">goals</span>></span>
<span class="hljs-tag"></<span class="hljs-name">execution</span>></span>
<span class="hljs-tag"></<span class="hljs-name">executions</span>></span>
<span class="hljs-tag"><<span class="hljs-name">configuration</span>></span>
<span class="hljs-comment"><!--指定生成的镜像名--></span>
<span class="hljs-tag"><<span class="hljs-name">imageName</span>></span>project/${project.artifactId}<span class="hljs-tag"></<span class="hljs-name">imageName</span>></span>
<span class="hljs-comment"><!--指定标签--></span>
<span class="hljs-tag"><<span class="hljs-name">imageTags</span>></span>
<span class="hljs-tag"><<span class="hljs-name">imageTag</span>></span>latest<span class="hljs-tag"></<span class="hljs-name">imageTag</span>></span>
<span class="hljs-tag"></<span class="hljs-name">imageTags</span>></span>
<span class="hljs-comment"><!--指定基础镜像jdk1.8--></span>
<span class="hljs-tag"><<span class="hljs-name">baseImage</span>></span>java<span class="hljs-tag"></<span class="hljs-name">baseImage</span>></span>
<span class="hljs-comment"><!--镜像制作人本人信息--></span>
<span class="hljs-tag"><<span class="hljs-name">maintainer</span>></span>v-kun<span class="hljs-tag"></<span class="hljs-name">maintainer</span>></span>
<span class="hljs-comment"><!--切换到ROOT目录--></span>
<span class="hljs-tag"><<span class="hljs-name">workdir</span>></span>/ROOT<span class="hljs-tag"></<span class="hljs-name">workdir</span>></span>
<span class="hljs-tag"><<span class="hljs-name">cmd</span>></span>["java", "-version"]<span class="hljs-tag"></<span class="hljs-name">cmd</span>></span>
<span class="hljs-tag"><<span class="hljs-name">entryPoint</span>></span>["java", "-jar", "/${project.build.finalName}.jar"] <span class="hljs-tag"></<span class="hljs-name">entryPoint</span>></span>
<span class="hljs-comment"><!--指定远程 docker api地址--></span>
<span class="hljs-tag"><<span class="hljs-name">dockerHost</span>></span>http://192.168.4.32:2375<span class="hljs-tag"></<span class="hljs-name">dockerHost</span>></span>
<span class="hljs-comment"><!-- 这里是复制 jar 包到 docker 容器指定目录配置 --></span>
<span class="hljs-tag"><<span class="hljs-name">resources</span>></span>
<span class="hljs-tag"><<span class="hljs-name">resource</span>></span>
<span class="hljs-tag"><<span class="hljs-name">targetPath</span>></span>/<span class="hljs-tag"></<span class="hljs-name">targetPath</span>></span>
<span class="hljs-comment"><!--jar 包所在的路径 此处配置的 即对应 target 目录--></span>
<span class="hljs-tag"><<span class="hljs-name">directory</span>></span>${project.build.directory}<span class="hljs-tag"></<span class="hljs-name">directory</span>></span>
<span class="hljs-comment"><!--用于指定需要复制的文件 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 --></span>
<span class="hljs-tag"><<span class="hljs-name">include</span>></span>${project.build.finalName}.jar<span class="hljs-tag"></<span class="hljs-name">include</span>></span>
<span class="hljs-tag"></<span class="hljs-name">resource</span>></span>
<span class="hljs-tag"></<span class="hljs-name">resources</span>></span>
<span class="hljs-tag"></<span class="hljs-name">configuration</span>></span>
<span class="hljs-tag"></<span class="hljs-name">plugin</span>></span>
</code></div></pre>
<p>在项目目录/src/main/resources下新建文件夹docker,在docker文件夹下新建DockerFile,编辑DockerFile</p>
<pre><code class="lang-">FROM java
MAINTAINER v-kun v-kun.com
WORKDIR /ROOT
ADD /ROOT/risen-hnshzt-txl-0.0.1-SNAPSHOT.jar /ROOT/
ENTRYPOINT ["java", "-jar", "risen-hnshzt-txl-0.0.1-SNAPSHOT.jar"]
CMD ["java", "-version"]
</code></pre>
<p>使用maven打包。我们在pom.xml中配置过,如果我们是用maven的package,那么就会自动使用Dockerfile文件进行构建。</p>
<p><img src="https://v-kun-file.oss-cn-beijing.aliyuncs.com/blog/2022-11-22/99b7ff4a03074d9d97e9dc46b556f50b/image.png" alt="image" /></p>
<h2><a id="docker_113"></a>创建容器,项目部署到docker</h2>
<p>我们在docker窗口中,找到我们刚才创建的镜像文件,鼠标右键,选择Create container,我们修改创建容器所需要的配置。</p>
<p><img src="https://v-kun-file.oss-cn-beijing.aliyuncs.com/blog/2022-11-22/d0f9c2b05a5644ac861eea1d244e9ef8/image.png" alt="image" /></p>
<p>在Create Docker Configuration弹窗中修改</p>
<ul>
<li>Container name(容器名称)</li>
<li>Bind ports(Ip和端口映射)我在这里添加13047:13047. 使用本地13047端口,去访问容器的13047.</li>
<li>Environment variables (环境变量) 设置一下时区防止容器使用UTC时区</li>
<li>在这里的Command line 中添加一个命令 package</li>
</ul>
<p><img src="https://v-kun-file.oss-cn-beijing.aliyuncs.com/blog/2022-11-22/cd47f86f9cd84a83b83ebf6448431229/image.png" alt="image" /></p>
<p><img src="https://v-kun-file.oss-cn-beijing.aliyuncs.com/blog/2022-11-22/9bbd0680464b4be6b4722ab14877e9db/image.png" alt="image" /></p>
<p>配置完成后保存。以后我们启动项目时都会执行maven的package命令,自动将我们打包并把项目生成docker镜像文件启动。</p>
<p>以后,如果我们修改项目后,都可以使用下图所示去启动。 它会自动打包创建docker镜像并启动项目。</p>
<p>如果在idea的docker里面看项目日志中文乱码<br />
打开Help-Edit Custom VM Options<br />
在最后加一行,重启idea</p>
<pre><code class="lang-">-Dfile.encoding=UTF-8
</code></pre>
<p><img src="https://v-kun-file.oss-cn-beijing.aliyuncs.com/blog/2022-11-22/f11d883967c04bd387d3a038a660943f/image.png" alt="image" /></p>