大家好,我是邵奈一,一個不務正業的程式猿、正兒八經的斜杠青年,
1、世人稱我為:被代碼耽誤的詩人、沒天賦的書法家、五音不全的歌手、專業跑龍套演員、不合格的運動員…
2、這幾年,我整理了很多IT技術相關的教程給大家,愛生活、愛分享,
3、如果您覺得文章有用,請收藏,轉發,評論,并關注我,謝謝!
博客導航跳轉(請收藏):邵奈一的技術博客導航
| 公眾號 | 微信 | 微博 | CSDN | 簡書 |
教程目錄
- 0x00 教程內容
- 0x01 安裝并配置Docker
- 1. 安裝Docker
- 2. 配置Docker開放2375埠
- 0x02 Java API 操作Docker
- 1. 引入 docker-java 專案的兩種方式
- 2. 新建專案并引入依賴
- 3. 撰寫代碼
- 0x03 檢驗
- 1. 拉取鏡像
- 2. 運行創建容器代碼
- 0xFF 總結
0x00 教程內容
- 安裝并配置Docker
- Java API 操作Docker
- 檢驗
說明:本教程最好需要有點Docker基礎與編程基礎,可以參考本博客的其他內容進行學習,
0x01 安裝并配置Docker
1. 安裝Docker
(1)不清楚的可以看我另一篇教程=> D001.5 Docker入門(超級詳細基礎篇)
安裝位置直達=> 傳送門
2. 配置Docker開放2375埠
默認情況下,Docker通過守護行程Unix socket(/var/run/docker.sock)來進行本地行程通信,但此行程只能在本地使用Docker客戶端或者Docker API方式進行操作,如果想在其他主機上操作Docker主機,就需要讓Docker守護行程打開一個HTTP Socket,以實作遠程的通信,
vim /usr/lib/systemd/system/docker.service
加上相應的內容:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
注意:如果有防火墻,也要放開2375埠,

修改好后,務必要重啟Docker:
systemctl daemon-reload
systemctl restart docker
以下命令可以查看是否配置好,并且可以看到2375埠已經被監聽了:

0x02 Java API 操作Docker
1. 引入 docker-java 專案的兩種方式
(1)方式一
直接在新建的Maven專案中,添加Maven依賴即可:
<!-- https://mvnrepository.com/artifact/com.github.docker-java/docker-java -->
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java</artifactId>
<version>3.1.5</version>
</dependency>
(2)方式二
將 docker-java 安裝到本地Maven中,操作如下:
1、下載 docker-java 的 github 原始碼(需要安裝好 Git)
git clone https://github.com/docker-java/docker-java.git
2、安裝到本地Maven中
cd docker-java/
mvn install -Dmaven.test.skip=true
2. 新建專案并引入依賴
(1)此處我們使用第一種方式,直接在pom.xml中引入依賴的方式
<dependency>
<groupId>com.github.docker-java</groupId>
<artifactId>docker-java</artifactId>
<version>3.1.5</version>
</dependency>
3. 撰寫代碼
(1)新建一個工具類 DockerClientUtils :
package com.shaonaiyi.utils;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.core.DockerClientBuilder;
/**
* @Auther: shaonaiyi@163.com
* @Date: 2021/1/10 15:37
* @Description: Java API實作創建Docker容器
*/
public class DockerClientUtils {
/**
* 連接Docker服務器
* @return
*/
public DockerClient connectDocker(String dockerInstance){
DockerClient dockerClient = DockerClientBuilder.getInstance(dockerInstance).build();
dockerClient.infoCmd().exec();
return dockerClient;
}
/**
* 創建容器
* @param client
* @return
*/
public CreateContainerResponse createContainers(DockerClient client, String containerName, String imageName){
CreateContainerResponse container = client.createContainerCmd(imageName)
.withName(containerName)
.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();
}
}
(2)編程代碼來測驗(可以直接在DockerClientUtils里直接寫main方法):
public static void main(String[] args){
DockerClientUtils dockerClientUtils =new DockerClientUtils();
//連接Docker服務器
DockerClient client = dockerClientUtils.connectDocker("tcp://192.168.128.100:2375");
//創建容器
CreateContainerResponse container = dockerClientUtils.createContainers(client,"sny_hello","hello-world");
//啟動容器
dockerClientUtils.startContainer(client,container.getId());
}
注意:192.168.128.100需要修改成自己的 Docker 服務器的ip地址!
0x03 檢驗
1. 拉取鏡像
(1)因為本例子是測驗新建容器的API,所以,先得有鏡像,我們使用hello-world的鏡像(如果已經存在則不需要操作了):
docker run hello-world

2. 運行創建容器代碼
(1)運行代碼,則可以看到IDEA顯示沒有報錯:

(2)查看服務器,發現已經新建了容器,如圖:

至此,我們的教程就結束了,
PS:如果重復測驗的話,需要先洗掉容器,命令如下:
docker rm sny_hello
0xFF 總結
- 更多參考資料
https://docs.docker.com/engine/api/sdk/
https://github.com/docker-java/docker-java
https://copyfuture.com/blogs-details/202001231456248957t5rdb0yjnpby3c
邵奈一 原創不易,如轉載請標明出處,教育是一生的事業,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/247176.html
標籤:其他
上一篇:Hive-JDBC流程
