update docker

This commit is contained in:
2026-06-13 10:17:26 +07:00
parent 4f8d8148f7
commit 8c111f2406
11 changed files with 431 additions and 19 deletions

21
scripts/docker-htop.sh Executable file
View File

@@ -0,0 +1,21 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT"
# shellcheck source=docker-lib.sh
source "$ROOT/scripts/docker-lib.sh"
docker_cmd
if ! "${DOCKER[@]}" ps --format '{{.Names}}' | grep -qx 'lidar-manager-limited'; then
echo "Container chưa chạy. Khởi động: sudo docker compose up -d"
exit 1
fi
echo "Giới hạn container:"
print_container_limits lidar-manager-limited
echo
echo "Mở htop trong container (q để thoát)..."
exec "${DOCKER[@]}" exec -it lidar-manager-limited htop

21
scripts/docker-lib.sh Normal file
View File

@@ -0,0 +1,21 @@
#!/usr/bin/env bash
docker_cmd() {
if docker info >/dev/null 2>&1; then
DOCKER=(docker)
elif sudo -n docker info >/dev/null 2>&1; then
DOCKER=(sudo docker)
else
DOCKER=(sudo docker)
fi
}
print_container_limits() {
local name="${1:-lidar-manager-limited}"
local nano mem cpus ram_mb
nano="$("${DOCKER[@]}" inspect -f '{{.HostConfig.NanoCpus}}' "$name")"
mem="$("${DOCKER[@]}" inspect -f '{{.HostConfig.Memory}}' "$name")"
cpus="$(awk "BEGIN { if ($nano > 0) printf \"%.2f\", $nano / 1000000000; else print \"unlimited\" }")"
ram_mb=$((mem / 1048576))
echo " CPUs quota = ${cpus} core(s), RAM max = ${ram_mb} MB"
}

44
scripts/docker-stats.sh Executable file
View File

@@ -0,0 +1,44 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# shellcheck source=docker-lib.sh
source "$ROOT/scripts/docker-lib.sh"
docker_cmd
NAME="${1:-lidar-manager-limited}"
if ! "${DOCKER[@]}" ps --format '{{.Names}}' | grep -qx "$NAME"; then
echo "Container '$NAME' không chạy."
exit 1
fi
echo "=== docker stats (live) ==="
"${DOCKER[@]}" stats --no-stream "$NAME"
echo
echo "=== limits ==="
print_container_limits "$NAME"
CID="$("${DOCKER[@]}" inspect -f '{{.Id}}' "$NAME")"
CG="/sys/fs/cgroup"
echo
echo "=== cgroup (host) ==="
printf 'memory.usage = '
cat "$CG/memory/docker/$CID/memory.usage_in_bytes" 2>/dev/null \
|| cat "$CG/memory/system.slice/docker-$CID.scope/memory.usage_in_bytes" 2>/dev/null \
|| echo "n/a"
printf ' bytes\n'
printf 'cpu.cfs_quota / period = '
cat "$CG/cpu,cpuacct/docker/$CID/cpu.cfs_quota_us" 2>/dev/null \
|| echo -n "n/a"
printf ' / '
cat "$CG/cpu,cpuacct/docker/$CID/cpu.cfs_period_us" 2>/dev/null \
|| echo "n/a"
echo
echo "=== processes in container ==="
"${DOCKER[@]}" top "$NAME"

20
scripts/docker-up.sh Executable file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT"
# shellcheck source=docker-lib.sh
source "$ROOT/scripts/docker-lib.sh"
docker_cmd
if ! docker info >/dev/null 2>&1 && ! sudo -n docker info >/dev/null 2>&1; then
echo "Cần quyền Docker. Chạy một trong hai cách:"
echo " sudo usermod -aG docker \$USER # rồi đăng nhập lại"
echo " sudo $0"
fi
"${DOCKER[@]}" compose up --build -d
echo "Đã chạy: http://localhost:8080/"
echo -n "Giới hạn: "
print_container_limits lidar-manager-limited