使用PHP搭建Web版Docker管理系統實踐

1、背景

團隊中使用容器比較頻繁,但並非全部人均可以登錄服務器去執行命令,可是又須要用到docker,因此有一個需求經過web來管理docker,而其餘語言並不怎麼熟悉,後期維護成本比較高,因此筆者採用PHP來管理容器。php

在技術調研階段,筆者一開始想的是用php的system來執行docker命令,後來查找了相關資料發現,原來docker自己提供了一套API來管理它,所以倒省了不少事情。html

2、操做概要

  1. 開啓Docker Remote Api
  2. 搭建Web-docker
  3. 功能驗證與測試

3、開啓Docker Remote Api

docker提供API支持,可是默認狀況下並無開啓,所以須要使用的時候須要把API功能開啓,筆者開啓的方法選擇了socat這個組件,下面介紹一下如何安裝及啓動socat,這裏介紹brew和docker分別的安裝方法,讀者只須要採用其中一種便可。mysql

參考文檔: Docker on Mac上的Remote API 遠程控制

3.1 使用brew安裝socat

brew安裝命令以下:linux

brew install socat

安裝完成後,須要啓動,命令以下:nginx

socat -d TCP-LISTEN:2375,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock

3.2 使用Docker安裝

安裝dockergit

brew cask install docker

啓動socat命令web

docker run -d -v /var/run/docker.sock:/var/run/docker.sock -p 2375:2375 bobrik/socat TCP4-LISTEN:2375,fork,reuseaddr UNIX-CONNECT:/var/run/docker.sock

3.3 測試API開啓狀態

經過CURL來驗證是否開啓成功,命令爲:sql

curl localhost:2375/version

當curl輸出以下數據,便說明api已經開啓成功,返回結果以下:docker

{
    "Platform": {
        "Name": ""
    },
    "Components": [{
        "Name": "Engine",
        "Version": "18.03.1-ce",
        "Details": {
            "ApiVersion": "1.37",
            "Arch": "amd64",
            "BuildTime": "2018-04-26T07:22:38.000000000+00:00",
            "Experimental": "true",
            "GitCommit": "9ee9f40",
            "GoVersion": "go1.9.5",
            "KernelVersion": "4.9.87-linuxkit-aufs",
            "MinAPIVersion": "1.12",
            "Os": "linux"
        }
    }],
    "Version": "18.03.1-ce",
    "ApiVersion": "1.37",
    "MinAPIVersion": "1.12",
    "GitCommit": "9ee9f40",
    "GoVersion": "go1.9.5",
    "Os": "linux",
    "Arch": "amd64",
    "KernelVersion": "4.9.87-linuxkit-aufs",
    "Experimental": true,
    "BuildTime": "2018-04-26T07:22:38.000000000+00:00"
}

4、搭建Web-docker

4.1 下載Web-docker

Web-docker是用PHP所開發的docker管理系統,目前支持持批量刪除鏡像和容器、 鏡像建立、鏡像標籤修改、鏡像history與inspect查看; 以及支持容器中的常規操做,好比重啓、暫停等;支持容器的重命名、進程查看、容器內文件系統的改變以及inspect的查看;ubuntu

Web-docker碼雲地址:https://gitee.com/songboy/Docker-Web

筆者採用了git克隆方式下載,其命令以下:

git clone https://gitee.com/songboy/Docker-Web.git

4.2 新增虛擬主機

當代碼下載下來以後,筆者想要在瀏覽器中訪問,還須要在nginx配置文件中爲其建立一個虛擬主機,其配置文件以下,讀者需注意修改項目路徑

server {
    listen       80;
    server_name  webdocker.songboy.net;
    root  /Users/song/mycode/work/Docker-Web;
    location / {
        index index.html index.htm index.php; 
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

筆者增長了一個主機後,還須要將域名解析到本地,因此增長一個本地host記錄,mac系統中存放於 /etc/hosts ,筆者須要在其尾部增長一行

127.0.0.1       webdocker.songboy.net

4.3 修改配置文件

web-docker的配置文件位於項目根目錄的config.php中,筆者須要修改其中的地址部分,將其修改以下內容:

<?php
 date_default_timezone_set('UTC');
 define('ROOT_PATH',dirname(__FILE__));
 define('DOCKER_URL','http://127.0.0.1:2375');

spl_autoload_register(function($className){
    include_once 'libs/'.$className.'.class.php';
});

確保DOCKER_URL地址正確,好比筆者搭建在本機,因此使用了127.0.0.1做爲地址。

5、功能驗證與測試

在前面的兩個步驟操做完成以後,筆者已經完成了搭建的過程,如今須要來驗證功能是否真的搭建成功,筆者這裏驗證鏡像列表、容器列表、鏡像建立幾個功能。

5.1 Web-docker首頁

如今筆者打開Web-docker,URL地址以下:

http://webdocker.songboy.net/

打開首頁以後,配置正確應該能夠看到一些統計信息,以下圖所示
image

5.2 驗證鏡像列表

筆者如今經過命令行查看鏡像列表當中有哪些鏡像,而後再經過瀏覽器訪問Web-docker,查看鏡像列表是否能對應

查看鏡像列表命令:
docker images

以下信息能夠看到docker當前有10個鏡像

REPOSITORY                                                       TAG                 IMAGE ID            CREATED             SIZE
registry.cn-hangzhou.aliyuncs.com/daxia/websafe                  v3                  bfae72172ad6        5 days ago          2.13GB
registry.cn-hangzhou.aliyuncs.com/daxia/websafe                  v2                  d18bb3c1ec4f        5 days ago          2.13GB
registry.cn-hangzhou.aliyuncs.com/daxia/websafe                  <none>              f72835d39e9f        7 days ago          2.13GB
registry.cn-hangzhou.aliyuncs.com/daxia/websafe                  lnmp                f6da484f22c0        7 days ago          1.95GB
ubuntu                                                           latest              735f80812f90        2 weeks ago         83.5MB
registry.cn-hangzhou.aliyuncs.com/daxia/ubuntu18_lnmp            1                   8801b0f09382        5 weeks ago         334MB
registry.cn-hangzhou.aliyuncs.com/daxia/ubuntu18_lnmp1.5         2                   9a867670312d        5 weeks ago         1.23GB
registry.cn-hangzhou.aliyuncs.com/max/lnmp1.4-php7.1-centos6.7   latest              250c17daece3        11 months ago       1.1GB
zzhpeng/lnmp1.4                                                  latest              b2ab0ed558bb        17 months ago       602MB
bobrik/socat                                                     latest              e617a56c238e        3 years ago         6.95MB
在瀏覽器中驗證

點擊側邊的鏡像,能夠在瀏覽器中看到的鏡像列表

image

在瀏覽器的鏡像列表中筆者看到這裏所展現的鏡像與命令行返回的一致,說明這個鏡像列表正常。

5.3 驗證容器列表

如今筆者再經過命令行查看容器列表當中有哪些容器,而後再經過瀏覽器訪問Web-docker,查看容器列表是否能對應

命令行查看容器

查看容器鏡像列表命令以下:

docker ps -a

docker返回的容器列表:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
1002d82da57d        bobrik/socat        "socat TCP4-LISTEN:2…"   14 minutes ago      Up 14 minutes       0.0.0.0:2375->2375/tcp   vibrant_pasteur
瀏覽器中的容器列表

在Web-docker中,點擊容器列表,變能夠看到容器列表,以下圖所示

image

對比以後能夠看到容器返回的容器列表與瀏覽器中的列表一致,同時也看到了筆者啓動socat容器正在運行

5.4 建立鏡像

如今筆者須要測試一下建立鏡像的功能,Web-docker支持使用dockerfile語法構建鏡像,在鏡像列表中,有一個大文本框,能夠把dockerfile代碼粘貼進去,以下代碼:

FROM ubuntu:18.04

MAINTAINER tangqingsong 

# 使用國內源
ADD sources.list /etc/apt/

# 安裝服務
RUN apt-get -y update
RUN apt-get -y install php php-mysqlnd mysql-server wget unzip

查看鏡像列表命令:

docker images

當命令執行完成以後docker返回的前4個結果以下:

REPOSITORY                  TAG         IMAGE ID            CREATED             SIZE
<none>                      <none>      25253e759d63        5 seconds ago       83.5MB
ubuntu                      18.04       735f80812f90        2 weeks ago         83.5MB
ubuntu                      latest      735f80812f90        2 weeks ago         83.5MB
bobrik/socat                latest      e617a56c238e        3 years ago         6.95MB
瀏覽器中查看鏡像列表

在命令行當中能看出增長,那麼如今一樣經過Web-docker來查看是否有變化,以下圖

image

在圖中能夠看到鏡像數量增長了兩個,一個是base鏡像,另一個即是筆者新建立的鏡像了。

5.5 後續

Docker-Web目前的功能並非很是完善,某些功能還處於待添加狀態,有興趣的同窗能夠貢獻一些新功能,遇到也能夠和筆者一塊兒交流


做者:湯青松

微信:songboy8888

相關文章
相關標籤/搜索