diff --git a/README.md b/README.md index 3c909d9..baeb02a 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ - [tmux](https://github.com/tmux/tmux) - 터미널 멀티플렉서 - [bottom](https://github.com/ClementTsang/bottom) - 호스트 모니터링 - [lazygit](https://github.com/jesseduffield/lazygit) - Git 터미널 UI +- [Docker](https://www.docker.com/) - 컨테이너 플랫폼 (Linux 자동 설치, Mac/Windows는 안내) - [ctop](https://github.com/bcicen/ctop) - 컨테이너 모니터링 - [uv](https://docs.astral.sh/uv/) - Python 패키지 관리자 - [pi](https://pi.dev/) - CLI AI 코딩 어시스턴트 + 추천 패키지 일괄 설치 @@ -33,6 +34,12 @@ curl -fsSL "https://gl.isitsoft.kr/publicproj/install-sh/-/raw/main/install-bott curl -fsSL "https://gl.isitsoft.kr/publicproj/install-sh/-/raw/main/install-lazygit.sh?ref_type=heads" | bash ``` +**Docker (Linux만 실행 — Mac/Windows 사용자는 아래 안내를 참고하세요):** + +```bash +curl -fsSL "https://gl.isitsoft.kr/publicproj/install-sh/-/raw/main/install-docker.sh?ref_type=heads" | bash +``` + **ctop:** ```bash @@ -71,6 +78,8 @@ powershell -ExecutionPolicy Bypass -c "$t=\"$env:TEMP\install-bottom.ps1\"; iwr powershell -ExecutionPolicy Bypass -c "$t=\"$env:TEMP\install-lazygit.ps1\"; iwr -useb 'https://gl.isitsoft.kr/publicproj/install-sh/-/raw/main/install-lazygit.ps1' -OutFile $t; & $t" ``` +**Docker:** [Docker Desktop for Windows](https://www.docker.com/products/docker-desktop/)를 설치하세요. 또는 WSL2에서 리눅스용 `install-docker.sh`를 실행하세요. + **ctop:** ```powershell @@ -164,6 +173,27 @@ lazygit | `P` `p` | Push / Pull | | `?` | 도움말 | +### Docker + +컨테이너 플랫폼입니다. `install-docker.sh`는 Linux에 Docker Engine을 자동 설치합니다. + +- **컨테이너 실행/관리** — 애플리케이션을 격리된 환경에서 실행 +- **Docker Compose** — 멀티 컨테이너 애플리케이션 오케스트레이션 +- **BuildKit** — 빠른 이미지 빌드 + +```bash +docker run hello-world # 설치 확인 +docker ps # 실행 중인 컨테이너 목록 +docker compose up -d # Compose 서비스 시작 +docker build -t . # 이미지 빌드 +``` + +> **macOS 사용자**: [Docker Desktop for Mac](https://www.docker.com/products/docker-desktop/) 또는 [OrbStack](https://orbstack.dev/)을 설치하세요. +> +> **Windows 사용자**: [Docker Desktop for Windows](https://www.docker.com/products/docker-desktop/) 또는 WSL2에서 리눅스용 스크립트를 실행하세요. +> +> `install-docker.sh`는 Linux 전용입니다. 설치 후 현재 사용자를 `docker` 그룹에 추가하며, 재로그인 후 `docker` 명령어를 sudo 없이 사용할 수 있습니다. + ### ctop Docker/Podman 컨테이너 모니터링 터미널 UI 도구입니다. diff --git a/install-docker.sh b/install-docker.sh new file mode 100755 index 0000000..d9dd6aa --- /dev/null +++ b/install-docker.sh @@ -0,0 +1,185 @@ +#!/usr/bin/env bash +# shellcheck disable=SC2086 + +# Installs Docker Engine on Linux, or shows instructions for macOS/Windows. +# Docker: https://www.docker.com/ +# OrbStack (macOS alternative): https://orbstack.dev/ +# +# Supported platforms: +# Linux (apt) : Ubuntu, Debian, and derivatives — Docker official apt repo +# Linux (dnf) : RHEL, Fedora, CentOS Stream, Rocky, Alma — Docker official dnf repo +# macOS : Not supported — shows instructions for OrbStack or Docker Desktop +# Windows : Not supported — use install-docker.ps1 or Docker Desktop +# +# Prerequisites: +# - Linux: curl, sudo +# - macOS/Windows: follow the printed instructions + +set -euo pipefail + +# ──────────────────────────────────────────── +# Constants +# ──────────────────────────────────────────── +DOCKER_GPG_URL="https://download.docker.com/linux/ubuntu/gpg" +DOCKER_APT_REPO_URL="https://download.docker.com/linux/ubuntu" +DOCKER_DNF_REPO_URL="https://download.docker.com/linux/rhel/docker-ce.repo" + +# ──────────────────────────────────────────── +# Utility functions (all stderr output) +# ──────────────────────────────────────────── +info() { echo "[INFO] $*" >&2; } +warn() { echo "[WARN] $*" >&2; } +error() { + echo "[ERROR] $*" >&2 + exit 1 +} +success() { echo "[OK] $*" >&2; } + +# ──────────────────────────────────────────── +# Detect OS +# ──────────────────────────────────────────── +OS="$(uname -s)" + +case "$OS" in +Linux) ;; +Darwin) + info "macOS detected. Docker Engine is not installed via this script on macOS." + info "" + info "Please install one of the following:" + info "" + info " 1. OrbStack (recommended, lightweight):" + info " https://orbstack.dev/" + info "" + info " 2. Docker Desktop for Mac:" + info " https://www.docker.com/products/docker-desktop/" + info "" + exit 0 + ;; +*) + info "Unsupported OS: $OS. This script only supports Linux." + info "" + info "For Windows, install one of the following:" + info "" + info " 1. Docker Desktop for Windows:" + info " https://www.docker.com/products/docker-desktop/" + info "" + info " 2. WSL2 with Docker Engine:" + info " Install WSL2, then run this script inside a WSL2 Linux distro." + info "" + exit 0 + ;; +esac + +ARCH="$(uname -m)" +info "Platform: $OS ($ARCH)" + +# ──────────────────────────────────────────── +# Check prerequisites +# ──────────────────────────────────────────── +command -v curl &>/dev/null || error "'curl' is required. Install it first." +command -v sudo &>/dev/null || error "'sudo' is required." + +# ──────────────────────────────────────────── +# Step 1: Check if Docker is already installed +# ──────────────────────────────────────────── +if command -v docker &>/dev/null; then + CURRENT_VER="$(docker --version 2>/dev/null || echo 'unknown')" + info "Docker is already installed ($CURRENT_VER). Skipping installation." + info "To reinstall or upgrade, uninstall first: sudo apt remove docker-ce docker-ce-cli containerd.io" + success "Docker is available: $(command -v docker)" + exit 0 +fi + +# ──────────────────────────────────────────── +# Step 2: Install Docker Engine +# ──────────────────────────────────────────── +info "Installing Docker Engine..." + +if command -v apt-get &>/dev/null; then + # ── apt-based systems (Ubuntu, Debian, etc.) ── + info "Detected apt-based system. Using Docker official apt repository..." + + # Add Docker's official GPG key + sudo apt-get update -y + sudo apt-get install -y ca-certificates curl + sudo install -m 0755 -d /etc/apt/keyrings + sudo curl -fsSL "$DOCKER_GPG_URL" -o /etc/apt/keyrings/docker.asc + sudo chmod a+r /etc/apt/keyrings/docker.asc + + # Add the repository to Apt sources + CODENAME="$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")" + ARCH_DEB="$(dpkg --print-architecture)" + sudo tee /etc/apt/sources.list.d/docker.sources >/dev/null </dev/null; then + # ── dnf-based systems (RHEL, Fedora, CentOS Stream, Rocky, Alma) ── + info "Detected dnf-based system. Using Docker official dnf repository..." + + sudo dnf config-manager --add-repo "$DOCKER_DNF_REPO_URL" + sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + sudo systemctl --now enable docker + success "Docker installed via dnf" + +else + error "No supported package manager found (apt-get or dnf). Install Docker manually: https://docs.docker.com/engine/install/" +fi + +# ──────────────────────────────────────────── +# Step 3: Add current user to docker group +# ──────────────────────────────────────────── +info "Adding current user to the docker group..." +sudo usermod -aG docker "$(whoami)" +success "User '$(whoami)' added to the docker group" + +info "" +info "NOTE: Group membership takes effect on next login." +info " To apply immediately in this session, run: newgrp docker" +info " Or log out and log back in." + +# ──────────────────────────────────────────── +# Step 4: Verify installation +# ──────────────────────────────────────────── +if command -v docker &>/dev/null; then + DOCKER_VER="$(docker --version 2>/dev/null || echo 'unknown')" + success "Docker is available: $DOCKER_VER" +else + # May need a new shell for group changes + warn "Docker was installed but 'docker' command not found in current PATH." + warn "Please open a new terminal or run: newgrp docker" +fi + +# ──────────────────────────────────────────── +# Step 5: Post-install notes +# ──────────────────────────────────────────── +info "" +info "==================================================" +success "Docker installation complete!" +info "==================================================" +info "" +info "Getting started:" +info " docker run hello-world - Verify installation" +info " docker ps - List running containers" +info " docker compose up -d - Start services with Compose" +info " docker build -t . - Build an image" +info "" +info "Post-install steps (optional):" +info " https://docs.docker.com/engine/install/linux-post-install/" +info "" +info "Manage Docker as non-root:" +info " You have been added to the 'docker' group." +info " Log out and back in for this to take effect." +info "" +info "Container monitoring with ctop:" +info " Install ctop to monitor containers: install-ctop.sh"