昨天有介紹如何使用 Docker Restful API 來操作 Docker,像是 Pull Image、Create Container、Start Container、Delete Container……等等,使用比較不方便的地方是 URL 或是要傳遞的參數太長記不太起來,所以每次透過 Restful API 操作 Docker 時都需要查看官方的文件才知道要使用哪些 URL 或是要傳遞哪些的參數。
在 GitHub 上有找到,有人把呼叫 Docker 的 Restful API,把它包在 Java 程式的 Class Method 裡,這樣我們就不用去找 Docker Restful API 的 URL 或需要傳遞的參數,只要把 third party 的 jar 檔 import 到 Project,然後就可以像是在撰寫一般 Java 程式的方式去操作 Docker 的 Restful API。
今天要介紹的專案名稱叫 docker-client,它的 GitHub 網址如下,有興趣的話可以去研究它的 Source Code:
https://github.com/spotify/docker-client
一. 使用 docker-client 的 third party 前準備
apply plugin: 'java'
apply plugin: 'eclipse'
eclipse {
jdt {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
}
repositories {
mavenCentral()
maven {
url "http://central.maven.org/maven2"
}
}
dependencies {
compile 'com.spotify:docker-client:8.9.2'
}
最主要的部份是要把 docker-client:8.9.2 的 Jar檔下載和import 到 project,另外此專案需要使用 JDK8
簡單的列出使用步驟:
(1) $ git clone https://github.com/jackyoh/docker-client-example.git
(2) 在 command line 輸入 $ gradle eclipse
(第一次使用 gradle 會花費一些時間下載相依的 Jar 檔)
(3) 到 eclipse 上按 File -> Import -> General -> Existing Project into workspace -> 選擇 docker-client-example 的資料夾路徑 -> OK
二. 程式說明
String dockerImageName = "nginx:latest";
//Part1
final DockerClient docker = DefaultDockerClient.fromEnv().build();
docker.pull(dockerImageName);
//Part2
final Map<String, List<PortBinding>> portBindings = new HashMap<>();
final HostConfig hostConfig = HostConfig.builder().portBindings(portBindings).build();
List<PortBinding> hostPorts = new ArrayList<>();
hostPorts.add(PortBinding.of("0.0.0.0", "8080"));
portBindings.put("80", hostPorts);
final ContainerConfig containerConfig = ContainerConfig.builder()
.hostConfig(hostConfig)
.image(dockerImageName)
.build();
final ContainerCreation creation = docker.createContainer(containerConfig);
//Part3
final String id = creation.id();
docker.startContainer(id);
這一個程式的目的是要把 nginx:latest 的 Docker Image Pull 下來,然後建立 Container 之後,就把 Container 執行起來,主要分為三個部份說明如下:
Part1:把 nginx:latest 的 Docker Image 從 Docker Hub pull 到 client
Part2:建立Container 並把Container 內部的 80 port Mapping到 host的8080 port
Part3:啟動執行 Docker Container
三. 執行結果
可直接打開 Browser 輸入Host 的 IP,URL 為http://192.168.182.130:8080/,就可以看到以下的畫面:
使用了 docker-client 的 third party 之後對於我們在撰寫 Java 的 Unit Test測試程式有很大的幫助,可以在 BeforeClass 時建立 Docker Container 的環境(例如:mysql Data Base 的環境),然後在 AfterClass 執行完成之後把 Docker Container 刪除。
這樣在操作 Docker 時更加的直覺,不用去記憶很多的 URL 或者是傳遞的參數。