1、首先要修改docker服务器的 /usr/lib/systemd/system/docker.service,加入如下的配置
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
目的就是开放docker的2375端口,这样才可以使用dockerapi
2、下载docker-java 的github源码
https://github.com/docker-java/docker-java.git
3、下载解压后如下,然后打包成Jar包
4、开始打包
mvn install -Dmaven.test.skip=true
5、创建Java项目,导入Jar包
pom.xml中添加如下maven的Jar包:
com.alibaba fastjson1.2.38com.github.docker-java docker-java 3.2.0-SNAPSHOTorg.slf4j slf4j-nop 1.7.2
6、操作容器的工具类:DockerClientService
import com.alibaba.fastjson.JSONObject;import com.github.dockerjava.api.DockerClient;import com.github.dockerjava.api.command.CreateContainerResponse;import com.github.dockerjava.api.model.ExposedPort;import com.github.dockerjava.api.model.Info;import com.github.dockerjava.api.model.Ports;import com.github.dockerjava.core.DockerClientBuilder;import static com.github.dockerjava.api.model.HostConfig.newHostConfig;public class DockerClientService { /** * 连接docker服务器 * @return */ public DockerClient connectDocker(){ DockerClient dockerClient = DockerClientBuilder.getInstance("tcp://192.168.182.129:2375").build(); Info info = dockerClient.infoCmd().exec(); String infoStr = JSONObject.toJSONString(info); System.out.println("docker的环境信息如下:================="); System.out.println(info); return dockerClient; } /** * 创建容器 * @param client * @return */ public CreateContainerResponse createContainers(DockerClient client,String containerName,String imageName){ //映射端口8080—>80 ExposedPort tcp80 = ExposedPort.tcp(80); Ports portBindings = new Ports(); portBindings.bind(tcp80, Ports.Binding.bindPort(8080)); CreateContainerResponse container = client.createContainerCmd(imageName) .withName(containerName) .withHostConfig(newHostConfig().withPortBindings(portBindings)) .withExposedPorts(tcp80).exec(); return container; } /** * 启动容器 * @param client * @param containerId */ public void startContainer(DockerClient client,String containerId){ client.startContainerCmd(containerId).exec(); } /** * 停止容器 * @param client * @param containerId */ public void stopContainer(DockerClient client,String containerId){ client.stopContainerCmd(containerId).exec(); } /** * 删除容器 * @param client * @param containerId */ public void removeContainer(DockerClient client,String containerId){ client.removeContainerCmd(containerId).exec(); } public static void main(String[] args){ DockerClientService dockerClientService =new DockerClientService(); //连接docker服务器 DockerClient client = dockerClientService.connectDocker(); //删除容器 //dockerClientService.removeContainer(client,"08f6568decd0"); //停止容器 //dockerClientService.stopContainer(client,"9b72aad8e1db"); //启动容器 //dockerClientService.startContainer(client,"9b72aad8e1db"); //创建容器并启动 CreateContainerResponse response=dockerClientService.createContainers(client,"mytomcat","tomcat:8.5"); dockerClientService.startContainer(client,response.getId()); }}