Docker开启远程访问、IDEA Docker 连接 linux 上的 Docker

前提条件:Docker开启远程访问

修改Docker服务文件:

vi /lib/systemd/system/docker.service

将文件内的ExecStart注释,添加如下代码:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

重新加载配置文件、重启Docker服务

systemctl daemon-reload
systemctl restart docker

查看端口号(若指令无法使用,执行yum install net-tools)

netstat -nplt |grep 2375

安装插件(最新版IDEA已经内置Docker插件)

  1. Docker插件,首先需要在你的IDEA中安装Docker插件,定位到File-Setting-Plugins后搜索Docker Integration安装

  2. 配置Docker服务器,在IDEA中定位到File-Setting-build,Execution,Deployment-Docker

运行 idea 项目到 远程 linux docker 上

1、编写 Dockerfile 文件

FROM jdk1.8:v1.0_271
EXPOSE 9000
WORKDIR /usr/local/data/myProject
VOLUME /usr/local/data
ADD shop.jar /usr/local/data/myProject
ENTRYPOINT ["java","-jar","/usr/local/data/myProject/shop.jar"]
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:UTF-8
ENV LC_ALL en_US.UTF-8

其中,jdk1.8:v1.0_271为自定义镜像。

2、添加 maven 依赖

 1 <build>
 2     <finalName>${project.artifactId}</finalName>
 3     <plugins>
 4         <plugin>
 5             <groupId>org.springframework.boot</groupId>
 6             <artifactId>spring-boot-maven-plugin</artifactId>
 7         </plugin>
 8 
 9         <!--使用docker-maven-plugin插件-->
10         <plugin>
11             <groupId>com.spotify</groupId>
12             <artifactId>docker-maven-plugin</artifactId>
13             <version>1.0.0</version>
14 
15             <!--将插件绑定在某个phase执行-->
16             <executions>
17                 <execution>
18                     <id>build-image</id>
19                     <!--将插件绑定在package这个phase上。也就是说,用户只需执行mvn package ,就会自动执行mvn docker:build-->
20                     <phase>package</phase>
21                     <goals>
22                         <goal>build</goal>
23                     </goals>
24                 </execution>
25             </executions>
26 
27             <configuration>
28                 <!--指定生成的镜像名-->
29                 <imageName>zhangjianbin1991/${project.artifactId}</imageName>
30                 <!--指定标签-->
31                 <imageTags>
32                     <imageTag>latest</imageTag>
33                 </imageTags>
34                 <!-- 指定 Dockerfile 路径-->
35                 <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
36                 
37                  <!--指定远程 docker api地址-->
38                 <dockerHost>http://192.168.75.132:2375</dockerHost>
39 
40                 <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
41                 <resources>
42                     <resource>
43                         <targetPath>/</targetPath>
44                         <!--jar 包所在的路径  此处配置的 即对应 target 目录-->
45                         <directory>${project.build.directory}</directory>
46                         <!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
47                         <include>${project.build.finalName}.jar</include>
48                     </resource>
49                 </resources>
50             </configuration>
51         </plugin>
52     </plugins>
53 </build>

此处,小编使用版本号+时间戳作为镜像tag

    <build>
        <!--${build.time} 错误提示不影响-->
        <!--<finalName>shop-v1.0.0_${build.time}</finalName>-->
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                    <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>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.10</version>
                <executions>
                    <execution>
                        <id>timestamp-property</id>
                        <goals>
                            <goal>timestamp-property</goal>
                        </goals>
                        <configuration>
                            <name>build.time</name>
                            <pattern>yyyyMMddHHmmss</pattern>
                            <locale>zh_CN</locale>
                            <timeZone>Asia/Shanghai</timeZone>
                        </configuration>
                    </execution>
                </executions>
            </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>shop/${project.artifactId}</imageName>
                    <!--指定标签-->
                    <imageTags>
                        <imageTag>v1.0.0_${build.time}</imageTag>
                    </imageTags>
                    <!-- 指定 Dockerfile 路径-->
                    <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>

                    <!--指定远程 docker api地址-->
                    <dockerHost>http://192.168.56.11: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>
        </plugins>

        <!--打包时开启,排除yml-->
        <!--<resources>
            <resource>
                <directory>src/main/resources</directory>
                <excludes>
                    <exclude>**/application.properties</exclude>
                    <exclude>**/application.yml</exclude>
                </excludes>
            </resource>
        </resources>-->

    </build>

3、mvn 打包

 打包容器,启动容器前,完成端口映射

参考:https://www.cnblogs.com/zhangjianbin/p/9277229.html

原文地址:https://www.cnblogs.com/116970u/p/14156909.html