使用 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("---------------------------------");
}
}
}