一.准备工作
    1、docker开放6274端口

    1. 开放6274端口
    2. vim /lib/systemd/system/docker.service
    3. 13行左右内容
    4. ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    5. 修改为下面
    6. ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:6274 -H unix://var/run/docker.sock
    7. 重启docker服务
    8. systemctl daemon-reload
    9. systemctl restart docker
    10. 防火墙放开6274端口,如果是云服务器记录配置安全规则
    11. 放开后可以在浏览器输入http://host:6274/version测试或者
    12. curl http://host:6274/version

    2.下载基础jdk8镜像

    1. docker pull java:8

    3.去dockerdesktop官网安装,并在idea配置
    注意:报错

    1. Can not construct instance of com.spotify.docker.client.messages.RegistryAuth: no String-argument constructor/factory method to deserialize from String value ('desktop')
    2. at [Source: N/A; line: -1, column: -1] (through reference chain: java.util.LinkedHashMap["credsStore"])

    解决方法:
    修改config.json为如下

    1. C:\Users\Frank\.docker\config.json
    1. {}

    image.png
    4、IDEA测试连接
    tcp://xxxx:6274
    image.png

    5.使用
    image.png
    二.idea集成
    1.
    第一种方式:不推荐
    使用pom.xml生成Dockerfile

    1. <properties>
    2. <java.version>1.8</java.version>
    3. <shiro.version>1.4.0</shiro.version>
    4. <elasticsearch.version>7.6.2</elasticsearch.version>
    5. <!-- 镜像 前缀姓名szls-->
    6. <docker.image.prefix>szls</docker.image.prefix>
    7. </properties>
    8. <build>
    9. <plugins>
    10. <plugin>
    11. <groupId>org.springframework.boot</groupId>
    12. <artifactId>spring-boot-maven-plugin</artifactId>
    13. <version>2.2.1.RELEASE</version>
    14. </plugin>
    15. <plugin>
    16. <groupId>com.spotify</groupId>
    17. <artifactId>docker-maven-plugin</artifactId>
    18. <version>1.0.0</version>
    19. <configuration>
    20. <!-- 镜像名称 dts 注意:image名称不能含大写字母-->
    21. <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
    22. <!--指定标签-->
    23. <imageTags>
    24. <imageTag>latest</imageTag>
    25. </imageTags>
    26. <!-- 基础镜像jdk 1.8-->
    27. <baseImage>java:8</baseImage>
    28. <!-- 制作者提供本人信息 -->
    29. <maintainer>tomato4536@163.com</maintainer>
    30. <!--切换到/ROOT目录 -->
    31. <workdir>/ROOT</workdir>
    32. <cmd>["java", "-version"]</cmd>
    33. <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
    34. <!-- 指定 Dockerfile 路径
    35. <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
    36. -->
    37. <!--指定远程 docker api地址-->
    38. <dockerHost>http://82.156.27.52:6274</dockerHost>
    39. <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
    40. <resources>
    41. <resource>
    42. <targetPath>/ROOT</targetPath>
    43. <!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
    44. <directory>${project.build.directory}</directory>
    45. <!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar
    46. 包文件。-->
    47. <include>${project.build.finalName}.jar</include>
    48. </resource>
    49. </resources>
    50. </configuration>
    51. </plugin>
    52. </plugins>
    53. </build>

    第二种方式:推荐
    自定义Dockerfile利用pom.xml生成镜像并推送

    1. FROM moxm/java:1.8-full
    2. RUN mkdir -p /raint-app
    3. WORKDIR /raint-app
    4. ARG JAR_FILE=target/raint-app.jar
    5. COPY ${JAR_FILE} raint-app.jar
    6. EXPOSE 18008
    7. ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/prod/./urandom"
    8. CMD sleep 30; java -jar raint-app.jar $JAVA_OPTS

    2.dockercompose.yml

    1. version: '3'
    2. # 声明外部网络,避免报错‘使用一个无效的network
    3. networks:
    4. mynet:
    5. external: true
    6. services:
    7. raint-app:
    8. build:
    9. context: .
    10. restart: always
    11. ports:
    12. - 18008:18008
    13. container_name: raint-app
    14. networks:
    15. - "mynet"
    16. hostname: raint-app
    17. image: raint-app

    手动

    1. docker run -d -p 8006:8006 --name raint-app --restart=always raint-app:latest

    注意:
    基于WSL2 的 Docker Desktop 启动时 Failed to set version to docker-desktop: exit code: -1的解决方法

    1. System.InvalidOperationException:
    2. Failed to set version to docker-desktop: exit code: -1
    3. stderr:
    4. Docker.ApiServices.WSL2.WslShortLivedCommandResult.LogAndThrowIfUnexpectedExitCode(String prefix, ILogger log, Int32 expectedExitCode) 位置 C:\workspaces\PR-15077\src\github.com\docker\pinata\win\src\Docker.ApiServices\WSL2\WslCommand.cs:行号 146
    5. Docker.Engines.WSL2.WSL2Provisioning.<ProvisionAsync>d__8.MoveNext() 位置 C:\workspaces\PR-15077\src\github.com\docker\pinata\win\src\Docker.Desktop\Engines\WSL2\WSL2Provisioning.cs:行号 82
    6. --- 引发异常的上一位置中堆栈跟踪的末尾 ---
    7. System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    8. System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    9. Docker.Engines.WSL2.LinuxWSL2Engine.<DoStartAsync>d__25.MoveNext() 位置 C:\workspaces\PR-15077\src\github.com\docker\pinata\win\src\Docker.Desktop\Engines\WSL2\LinuxWSL2Engine.cs:行号 99
    10. --- 引发异常的上一位置中堆栈跟踪的末尾 ---
    11. System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    12. System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    13. Docker.ApiServices.StateMachines.TaskExtensions.<WrapAsyncInCancellationException>d__0.MoveNext() 位置 C:\workspaces\PR-15077\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\TaskExtensions.cs:行号 29
    14. --- 引发异常的上一位置中堆栈跟踪的末尾 ---
    15. System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    16. System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
    17. Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() 位置 C:\workspaces\PR-15077\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:行号 67
    18. --- 引发异常的上一位置中堆栈跟踪的末尾 ---
    19. System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
    20. Docker.ApiServices.StateMachines.StartTransition.<DoRunAsync>d__5.MoveNext() 位置 C:\workspaces\PR-15077\src\github.com\docker\pinata\win\src\Docker.ApiServices\StateMachines\StartTransition.cs:行号 92

    启动 WSL 2时警告“参考的对象类型不支持尝试的操作”
    管理员方式执行cmd命令

    1. netsh winsock reset

    image.png
    Docker Desktop启动失败(Docker failed to initialize Docker Desktop is shutting down)
    image.png
    将 C:\Users\YourUser\AppData\Roaming 目录下Docker目录重命名。比如改为Docker_backup(这样做其实相当于删除了原信息但还把它里面的信息拷贝到备份里)。之后直接点击docker desktop发现可以运行了。但是因为删除了原来信息需要重新启动一下,启动之后发现原来的容器和镜像都在。(可能是自动调用了Docker_backup里面的信息吧)。