docker 설치 추가
This commit is contained in:
1 parent
0fe2ad11d5
commit
cf4863c575
2 files changed
+215
No files matched your search
Executable
+185
@@ -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 <<EOF
|
||||
Types: deb
|
||||
URIs: ${DOCKER_APT_REPO_URL}
|
||||
Suites: ${CODENAME}
|
||||
Components: stable
|
||||
Architectures: ${ARCH_DEB}
|
||||
Signed-By: /etc/apt/keyrings/docker.asc
|
||||
EOF
|
||||
sudo apt-get update -y
|
||||
|
||||
# Install Docker packages
|
||||
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
||||
success "Docker installed via apt"
|
||||
|
||||
elif command -v dnf &>/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 <name> . - 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"
|
||||
Reference in new issue
Block a user