1.环境要求
php 7.0+
很简单的一个php驱动的docker管理工具(其实只有删除镜像和查看使用状态),为了方便我将静态页面和脚本放在一起了。有兴趣自己可以扩展一些功能比如:启动容器,docker push部署、优化界面等等。
2.源码 docker-manager.php
<!-- 引入bootstrap -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<style>
body { background: #f3f3f3 }
</style>
<?php
$params = $_GET;
if (isset($params['delete']) && isset($params['id'])) {
echo "<div class=\"alert alert-success\" role=\"alert\">操作成功</div>";
shell_exec('docker rmi ' . $params['id']);
echo "<script> setTimeout(() => { window.location.href = 'docker.php'; }, 1000); </script>";
return;
} else if (isset($params['clean'])) { // 清理
echo "<div class=\"alert alert-success\" role=\"alert\">操作成功</div>";
shell_exec('docker system prune y');
echo "<script> setTimeout(() => { window.location.href = 'docker.php'; }, 2000); </script>";
return;
}
$images = shell_exec("docker images");
$str = str_getcsv($images, ' ');
$tempArr = [];
$header = [];
$content = [];
$result = [];
$i = 0;
foreach($str as $item) {
if (!empty($item) && strstr($item, 'SIZE')) { // 查询位置
array_push($tempArr, 'SIZE');
array_push($tempArr, str_replace('SIZE', '', $item));
} else if (!empty($item))
array_push($tempArr, $item);
}
foreach($tempArr as $k => $item) {
if ($k < 6) {
$header[] = $item;
continue;
}
$pattern = "/([0-9|a-z|A-z|\.]+MB?)\w+/";
preg_match($pattern, $item, $data);
if ($data && !empty($data) && count($data) > 0) {
$content[] = $data[0];
$content[] = str_replace($data[0], "", $item);
} else if (!empty($item)) {
$content[] = $item;
}
}
foreach($content as $k => $item) {
$result[$i][] = $item;
if (($k + 1) % 7 === 0) {
$i ++;
}
}
$header[2] = $header[2] . ' ' . $header[3];
unset($header[3]);
unset($result[count($result) - 1]);
?>
<div style="width: 1400px;margin: 0 auto;">
<h2>Docker 命令管理工具</h2>
<div>
<pre><?php $a = system('docker system df'); ?></pre>
</div>
<div style="padding: 10px 0">
<a href="/docker.php?clean=true"><button type="button" class="btn btn-info">清理磁盘</button></a>
</div>
<table class="table table-condensed" style="background: #fff;">
<?php foreach($header as $item) { ?>
<th <?php if($item === 'CREATED') echo "colspan='3'"; ?>><?=$item ?></th>
<?php } ?>
<th>操作</th>
<?php foreach($result as $item) { ?>
<tr>
<?php foreach($item as $s) {
echo '<td>' . $s .'</td>';
}?>
<td>
<a href="/docker.php?delete=true&id=<?=$item[2]?>"><button type="button" class="btn btn-primary">清空</button></a>
<a href="/docker.php?start=true"><button type="button" class="btn btn-success">启动容器</button></a>
</td>
</tr>
<?php } ?>
</table>
</div>
3.运行
php -S localhost:8009 / #docker-manager.php 所在目录