Docker-fabric8

felix.shao2025-01-16

Docker-fabric8

1 说明

IDEA 通过 fabric8io/docker-maven-plugin 部署 MAVEN 项目到远程 Docker 环境。

2 环境

软件名称版本
Docker20.10.9
JDK8
MAVEN3.5.X
fabric8io/docker-maven-plugin0.33.0

2.1 Docker 环境

2.1.1 Docker 宿主机配置

1. Docker 安装略。
2. 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

  # 保存文件,更新修改
  systemctl daemon-reload

  # 重启docker服务
  service docker restart

2.1.2 Win11: VMware Player 与 Device/Credential Guard 不兼容解决

Docker 下载open in new window,这里我使用的是 Window。  执行下面 2 个命令即可,注意重启后 VM 可以正常启动,但是 Docker 不能正常启动,不过我们 Window 也不使用 docker 容器,因此也没有影响。

  • win + r -> services.msc -> 禁用 HV 主机服务。
  • cmd(管理员) -> bcdedit /set hypervisorlaunchtype off -> 重启电脑

2.2 IDEA 配置 Docker

 配置远程连接 Docker。 idea_conn_docker.png

 配置本地 Docker。 docker-compose_config.png

3 HelloWorld

3.1 使用 Spring Boot 新建一个 demo 应用

 新建 dockerdemo 的应用,pom.xml 配置如下。主要配置了 docker-maven-plugin 打包插件,Docker 详细配置见 Dockerfile 文件。

<build>
    <finalName>dockerdemo</finalName>
    <plugins>
        ...
        <!--maven  docker 打包插件 -->
        <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.33.0</version>
            <configuration>
                <dockerHost>http://192.168.37.200:2375</dockerHost>
                <registry>192.168.37.200</registry>
                <images>
                    <image>
                        <name>192.168.37.200/library/${project.name}:${project.version}</name>
                        <build>
                            <dockerFile>${project.basedir}/Dockerfile</dockerFile>
                            <!-- 网络的配置,与宿主主机共端口号-->
<!--                                <buildOptions>-->
<!--                                    <network>host</network>-->
<!--                                </buildOptions>-->
                        </build>
                    </image>
                </images>
            </configuration>
        </plugin>
    </plugins>
</build>

application.yml 配置如下。

server:
  port: 8088

spring:
  application:
    name: dockerdemo

3.2 新建 HelloWorld 测试接口

DemoApplication 如下。

@SpringBootApplication
@RestController
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    // http://127.0.0.1:8088/helloWorld
    // http://192.168.37.200:8088/helloWorld
    @GetMapping("/helloWorld")
    @ResponseBody
    public Map<String, String> helloWorld() {
        Map<String, String> map = new HashMap<>();
        map.put("h", "hello");
        return map;
    }

}

3.3 Dockerfile 文件编写

 dockerdemo/Dockerfile 文件内容如下。

FROM java:8

ENV TZ=Asia/Shanghai
ENV JAVA_OPTS="-Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom"

RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN mkdir -p /dockerdemo

WORKDIR /dockerdemo

EXPOSE 8088

ADD ./target/dockerdemo.jar ./

CMD sleep 60;java $JAVA_OPTS -jar dockerdemo.jar

3.4 docker-compose 编写

 dockerdemo/docker-compose.yml 文件内容如下。

version: '3'
services:
  dockerdemo:
    build:
      context: ./
    restart: always
    container_name: dockerdemo
    image: dockerdemo
    ports:
      - 8088:8088

3.5 IDEA 配置 Maven 应用

 IDEA 提供了可视化的配置,可以看到底层执行命令类似 "C:\Program Files\Docker\Docker\resources\bin\docker-compose.exe" -f E:\workTyGit\dockerdemo\docker-compose.yml up -d --buildidea_dockerdemo_config.png

4 验证

  • 查看某一个容器的命令: docker port 容器号
  • 查看所有 docker 容器使用的端口:netstat -nlp |grep docker-proxy|awk '{print $4}'|sort

 输入 http://192.168.37.200:8088/helloWorld 能正常访问即可,注意 docker 启动后要稍等一会,容器启动成功后才能访问。

参考文献

Last Updated 1/16/2025, 10:24:18 PM