Java API 操作Docker示例

大家好,我是邵奈一,一個不務正業的程序猿、正兒八經的斜槓青年。
1、世人稱我爲:被代碼耽誤的詩人、沒天賦的書法家、五音不全的歌手、專業跑龍套演員、不合格的運動員…
2、這幾年,我整理了很多IT技術相關的教程給大家,愛生活、愛分享。
3、如果您覺得文章有用,請收藏,轉發,評論,並關注我,謝謝!
博客導航跳轉(請收藏):邵奈一的技術博客導航
| 公衆號 | 微信 | 微博 | CSDN | 簡書 |





0x00 教程內容

  1. 安裝並配置Docker
  2. Java API 操作Docker
  3. 檢驗

說明:本教程最好需要有點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: [email protected]
 * @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 總結

  1. 更多參考資料
    https://docs.docker.com/engine/api/sdk/
    https://github.com/docker-java/docker-java
    https://copyfuture.com/blogs-details/202001231456248957t5rdb0yjnpby3c


邵奈一 原創不易,如轉載請標明出處,教育是一生的事業。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章