Java 操作 DockerApi 常见启动,停止,加载端口,加载文件夹等操作实例
初始化 docker client (简易)
DockerClient dockerClient = DefaultDockerClientConfig.getInstance("tcp://localhost:2375").build();
初始化 docker client (高级)
DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
.withDockerHost("tcp://docker.somewhere.tld:2376")
.withDockerTlsVerify(true)
.withDockerCertPath("/home/user/.docker")
.withRegistryUsername(registryUser)
.withRegistryPassword(registryPass)
.withRegistryEmail(registryMail)
.withRegistryUrl(registryUrl)
.build();
使用 jaxrs/jersey (netty 同样可以)
docker 命令工厂
DockerCmdExecFactory dockerCmdExecFactory = new JerseyDockerCmdExecFactory()
.withReadTimeout(1000)
.withConnectTimeout(1000)
.withMaxTotalConnections(100)
.withMaxPerRouteConnections(10);
初始化 Client
DockerClient dockerClient = DockerClientBuilder.getInstance(config)
.withDockerCmdExecFactory(dockerCmdExecFactory)
.build();
获取 docker 信息
Info info = dockerClient.infoCmd().exec();
System.out.print(info);
搜索 Docker 仓库:
List<SearchItem> dockerSearch = dockerClient.searchImagesCmd("busybox").exec();
System.out.println("Search returned" + dockerSearch.toString());
运行或停止新的 Docker 容器:
CreateContainerResponse container = dockerClient.createContainerCmd("busybox")
.withCmd("touch", "/test")
.exec();
dockerClient.startContainerCmd(container.getId()).exec();
dockerClient.stopContainerCmd(container.getId()).exec();
dockerClient.waitContainerCmd(container.getId()).exec();
启动行的容器并给容器加载文件夹等设备:
Volume volume1 = new Volume("/opt/webapp1");
Volume volume2 = new Volume("/opt/webapp2");
CreateContainerResponse container = dockerClient.createContainerCmd("busybox")
.withVolumes(volume1, volume2)
.withBinds(new Bind("/src/webapp1", volume1, true), new Bind("/src/webapp2", volume2))
.withCmd("true")
.exec();
dockerClient.startContainerCmd(container.getId())
.exec();
创建新容器并绑定端口号:
ExposedPort tcp22 = ExposedPort.tcp(22);
ExposedPort tcp23 = ExposedPort.tcp(23);
Ports portBindings = new Ports();
portBindings.bind(tcp22, Ports.Binding(11022));
portBindings.bind(tcp23, Ports.Binding(11023));
CreateContainerResponse container = dockerClient.createContainerCmd("busybox")
.withCmd("true")
.withExposedPorts(tcp22, tcp23)
.withPortBindings(portBindings)
.exec();
dockerClient.startContainerCmd(container.getId()).exec();
创建新的 Docker 容器并用自动公开的端口启动它
ExposedPort tcp22 = ExposedPort.tcp(22);
ExposedPort tcp23 = ExposedPort.tcp(23);
CreateContainerResponse container = dockerClient.createContainerCmd("busybox")
.withCmd("sleep", "9999")
.withExposedPorts(tcp22, tcp23)
.exec();
Ports portBindings = new Ports();
portBindings.bind(tcp22, Ports.Binding(null));
portBindings.bind(tcp23, Ports.Binding(null));
CreateContainerResponse container = dockerClient
.createContainerCmd("busybox")
.withCmd("sleep", "9999")
.withExposedPorts(tcp22, tcp23)
.withPortBindings(portBindings)
.withPublishAllPorts(true).exec();
dockerClient.startContainerCmd(container.getId()).exec();
创建两个 Docker 容器并链接
CreateContainerResponse container1 = dockerClient.createContainerCmd("busybox")
.withCmd("sleep", "9999")
.withName("container1")
.exec();
dockerClient.startContainerCmd(container1.getId()).exec();
CreateContainerResponse container2 = dockerClient.createContainerCmd("busybox")
.withCmd("true")
.withName("container2")
.withLinks(new Link("container1", "container1Link"))
.exec();
dockerClient.startContainerCmd(container2.getId())
.exec();
使用装入绑定卷创建两个容器,并在第三个容器中继承其卷
CreateContainerResponse container1 = dockerClient
.createContainerCmd("busybox")
.withCmd("sleep", "9999")
.withName("container1")
.withBinds(new Bind("/src/webapp1", new Volume("/opt/webapp1")))
.exec();
dockerClient.startContainerCmd(container1.getId()).exec();
CreateContainerResponse container2 = dockerClient
.createContainerCmd("busybox")
.withCmd("sleep", "9999")
.withName("container2")
.withBinds(new Bind("/src/webapp2", new Volume("/opt/webapp2")))
.exec();
dockerClient.startContainerCmd(container2.getId()).exec();
// create a third container with all volumes from container1 and container2
CreateContainerResponse container3 = dockerClient
.createContainerCmd("busybox")
.withCmd("sleep", "9999")
.withName("container3")
.withVolumesFrom(new VolumesFrom("container1"), new VolumesFrom("container2"))
.exec();
dockerClient.startContainerCmd(container3.getId()).exec();
处理事件
EventsResultCallback callback = new EventsResultCallback() {
@Override
public void onNext(Event event) {
System.out.println("Event: " + event);
super.onNext(event);
}
};
dockerClient.eventsCmd().exec(callback).awaitCompletion().close();
Build image from Dockerfile
File baseDir = new File("~/kpelykh/docker/netcat");
BuildImageResultCallback callback = new BuildImageResultCallback() {
@Override
public void onNext(BuildResponseItem item) {
System.out.println("" + item);
super.onNext(item);
}
};
dockerClient.buildImageCmd(baseDir).exec(callback).awaitImageId();
展开阅读全文
版权声明:
本文内容由互联网用户自发贡献,版权归作者所有,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:jaagool@sina.cn 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
本文内容由互联网用户自发贡献,版权归作者所有,本社区不拥有所有权,也不承担相关法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:jaagool@sina.cn 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。