使用PHP搭建Web版Docker管理系统实践

2024-09-07 13:32

本文主要是介绍使用PHP搭建Web版Docker管理系统实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景

团队中使用容器比较频繁,但并不是所有人都可以登陆服务器去执行命令,但是又需要用到docker,所以有一个需求通过web来管理docker,而其他语言并不怎么熟悉,后期维护成本比较高,所以笔者采用PHP来管理容器。

在技术调研阶段,笔者一开始想的是用php的system来执行docker命令,后来查找了相关资料发现,原来docker本身提供了一套API来管理它,因此倒省了很多事情。

二、操作概要

  1. 开启Docker Remote Api
  2. 搭建Web-docker
  3. 功能验证与测试

三、开启Docker Remote Api

docker提供API支持,但是默认情况下并没有开启,因此需要使用的时候需要把API功能开启,笔者开启的方法选择了socat这个组件,下面介绍一下如何安装及启动socat,这里介绍brew和docker分别的安装方法,读者只需要采用其中一种即可。

参考文档:Docker on Mac上的Remote API 远程控制

3.1 使用brew安装socat

brew安装命令如下:

brew install socat

安装完成后,需要启动,命令如下:

socat -d TCP-LISTEN:2375,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock
3.2 使用Docker安装

安装docker

brew cask install docker

启动socat命令

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来验证是否开启成功,命令为:

curl localhost:2375/version

当curl输出如下数据,便说明api已经开启成功,返回结果如下:

{"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"
}

四、搭建Web-docker

4.1 下载Web-docker

Web-docker是用PHP所开发的docker管理系统,目前支持持批量删除镜像和容器、 镜像创建、镜像标签修改、镜像history与inspect查看; 以及支持容器中的常规操作,比如重启、暂停等;支持容器的重命名、进程查看、容器内文件系统的改变以及inspect的查看;

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中,笔者需要修改其中的地址部分,将其修改如下内容:

<?phpdate_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.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.04MAINTAINER 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

这篇关于使用PHP搭建Web版Docker管理系统实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1145197

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1