使用 Docker 部署项目

1. 编写 Dockerfile

创建一个 Dockerfile 文件来定义如何构建镜像。例如,部署一个简单的 Java 项目:

# 使用官方的 Java 镜像作为基础镜像
FROM openjdk:11-jre-slim

# 设置工作目录
WORKDIR /app

# 将项目 JAR 文件复制到容器中
COPY target/myapp.jar /app/myapp.jar

# 暴露应用端口
EXPOSE 8080

# 运行应用
CMD ["java", "-jar", "myapp.jar"]

2. 构建镜像

Dockerfile 所在的目录下运行以下命令来构建镜像:

docker build -t myapp:latest .

3. 运行容器

使用以下命令运行容器:

docker run -d --name myapp-container -p 8080:8080 myapp:latest

使用 Docker Java 库操作 Docker

Docker Java 是一个用于与 Docker 守护进程交互的 Java 库。以下是一个简单的示例,展示如何使用 Docker Java 库来列出所有容器。

1. 添加 Maven 依赖

pom.xml 中添加 Docker Java 依赖:

<dependency>
    <groupId>com.github.docker-java</groupId>
    <artifactId>docker-java</artifactId>
    <version>3.2.13</version>
</dependency>

2. 编写 Java 代码

以下是一个简单的 Java 程序,用于列出所有容器:

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.ListContainersCmd;
import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.core.DefaultDockerClientConfig;
import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.DockerClientImpl;
import com.github.dockerjava.httpclient5.ApacheDockerHttpClient;
import com.github.dockerjava.transport.DockerHttpClient;

import java.util.List;

public class DockerExample {
    public static void main(String[] args) {
        // 配置 Docker 客户端
        DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder().build();
        DockerHttpClient httpClient = new ApacheDockerHttpClient.Builder()
                .dockerHost(config.getDockerHost())
                .sslConfig(config.getSSLConfig())
                .build();
        DockerClient dockerClient = DockerClientImpl.getInstance(config, httpClient);

        // 列出所有容器
        ListContainersCmd listContainersCmd = dockerClient.listContainersCmd();
        List<Container> containers = listContainersCmd.exec();

        // 打印容器信息
        for (Container container : containers) {
            System.out.println("Container ID: " + container.getId());
            System.out.println("Image: " + container.getImage());
            System.out.println("Command: " + container.getCommand());
            System.out.println("Created: " + container.getCreated());
            System.out.println("Status: " + container.getStatus());
            System.out.println("Ports: " + container.getPorts());
            System.out.println("Names: " + container.getNames());
            System.out.println("---------------------------------");
        }
    }
}

3. 运行 Java 程序