#!/bin/bash
# 실습 #3 ① — Docker 설치 + 단일 컨테이너 라이프사이클
# - get.docker.com 스크립트로 Docker Engine + CLI + containerd 한 번에 설치
# - run / ps / logs / exec / stop / rm 한 사이클 직접 손에 익히기
# - 도커 데몬 권한(/var/run/docker.sock) 이슈 회피 위해 docker 그룹 추가
set -e

# 1) 설치 — 한 줄 스크립트 (Ubuntu / Debian / RHEL 자동 감지)
if ! command -v docker >/dev/null; then
    curl -fsSL https://get.docker.com | sudo sh
fi

# 2) 현재 사용자에게 docker 그룹 부여 (sudo 없이 docker 명령)
#    → 그룹 변경 즉시 반영은 newgrp / 재로그인 필요. 본 스크립트는 sudo docker 로 검증.
sudo usermod -aG docker "$USER" || true

# 3) 데몬 상태 확인
sudo systemctl enable --now docker
sudo docker version | head -10

# 4) 가장 단순한 컨테이너 — nginx 띄우고 80 → 8080 매핑
sudo docker run -d --name web -p 8080:80 nginx:1.27

echo
echo "=== 동작 확인 ==="
sleep 1
sudo docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
echo
echo "→ 로컬 응답 (Server 헤더에 nginx 가 보이면 OK)"
curl -sI http://localhost:8080 | head -3

# 5) 라이프사이클 명령 — 한 번씩 직접 보기
echo
echo "=== 로그 (마지막 10 줄) ==="
sudo docker logs --tail 10 web

echo
echo "=== exec — 컨테이너 안에서 ls ==="
sudo docker exec web ls /usr/share/nginx/html/

echo
echo "=== inspect — 네트워크 IP ==="
sudo docker inspect web --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'

# 6) 자원 사용량 — top 비슷한 stats (1회 스냅샷)
echo
echo "=== stats (1회 스냅샷) ==="
sudo docker stats --no-stream web

# 7) 정리 — 종료 + 삭제
echo
echo "=== 정리 ==="
sudo docker stop web
sudo docker rm web

# 8) 이미지·디스크 정리는 사용자가 직접
echo
echo "다음 단계:"
echo "  - docker images        # 받아둔 이미지 목록"
echo "  - docker system df     # 디스크 사용량 (이미지/컨테이너/볼륨/캐시)"
echo "  - docker system prune  # 사용 안 하는 것들 일괄 청소"
echo "  - newgrp docker        # 또는 재로그인 후 sudo 없이 docker 명령"
