Docker는 컨테이너 기반 가상화 기술로, 개발 환경을 효율적으로 관리할 수 있는 도구입니다. 이 가이드에서는 Ubuntu 24.04 LTS에서 Docker 설치부터 고급 설정까지 모든 과정을 상세히 설명합니다.


📦 Docker 설치

1. 시스템 패키지 업데이트

sudo apt update && sudo apt upgrade -y

2. 필수 패키지 설치

sudo apt install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

3. Docker 공식 GPG 키 추가 (강화된 보안 설정)

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --batch --yes --dearmor -o /etc/apt/keyrings/docker.gpg

4. APT 저장소 등록

echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. Docker 엔진 설치

sudo apt update
sudo apt install -y \
    docker-ce \
    docker-ce-cli \
    containerd.io \
    docker-buildx-plugin \
    docker-compose-plugin

6. 설치 확인 및 버전 체크

docker --version && docker compose version

결과예시)
Docker version 27.5.1, build 9f9e405
Docker Compose version v2.32.4

7. 사용자 권한 설정 (보안 주의)

sudo usermod -aG docker $USER
echo "⚠️ 반드시 로그아웃 후 재접속하거나 'newgrp docker' 명령어 실행 필요"

🔧 Docker 고급 설정

데이터 저장 경로 변경 (기존 데이터 마이그레이션)

  1. 서비스 정지 및 데이터 백업
    sudo systemctl stop docker
    sudo rsync -avx /var/lib/docker/ /mnt/docker-data
    
  2. 디렉토리 권한 설정
    sudo chmod -R 700 /mnt/docker-data
    sudo chown -R root:root /mnt/docker-data  # Docker 데몬 권한에 맞춤
    
  3. 데몬 설정 파일 수정

방법1. /etc/docker/daemon.json 파일 수정 (권장)

{
  "data-root": "/mnt/docker-data",
  "storage-driver": "overlay2"
}

방법2. /lib/systemd/system/docker.service 파일 수정 ( 구 버전에서 사용하던 방법)

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root=/path/to/new/data-root
  1. 서비스 재시작 및 확인
    sudo systemctl daemon-reload
    sudo systemctl start docker
    docker info | grep "Docker Root Dir"
    

🚀 Docker Compose 심화 사용법

버전 호환성 확인

docker compose version
# Plugin 방식 (현재 가이드) vs Standalone docker-compose 차이점 설명

샘플 Compose 파일 (Nginx + MySQL)

version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

Compose 명령어 요약

| 명령어 | 설명 | |——–|——| | docker compose up -d | 백그라운드 실행 | | docker compose logs -f | 실시간 로그 확인 | | docker compose config | 설정 파일 검증 | | docker compose pull | 최신 이미지 다운로드 |


🔒 보안 강화 설정

  1. Rootless 모드 설치 (선택사항)
    sudo apt install -y uidmap
    dockerd-rootless-setuptool.sh install
    
  2. 컨테이너 보안 프로필 적용 예시
    {
      "userns-remap": "default",
      "no-new-privileges": true
    }
    

🚨 문제 해결 가이드

일반적인 이슈 대처법

  1. 권한 오류 발생 시
    sudo chmod 666 /var/run/docker.sock  # 임시 해결 (보안 주의)
    
  2. 데몬 로그 확인
    journalctl -u docker.service --since "10 minutes ago"
    
  3. 저장소 초기화
    sudo rm -rf /var/lib/docker
    sudo systemctl restart docker
    


Storage Driver 선택 및 daemon.json 상세 설정

Storage Driver 선택 기준

Ubuntu 24.04에서는 overlay2가 기본이며 권장 드라이버입니다.

Driver 커널 요건 특징 권장 환경
overlay2 4.0+ (ext4/xfs 필요) 빠름, 효율적인 레이어 공유 기본값, 대부분의 환경
devicemapper - 블록 장치 기반 구형 RHEL/CentOS (지금은 미권장)
btrfs btrfs 파일시스템 스냅샷 지원 btrfs 환경
zfs ZFS 파일시스템 고급 기능 ZFS 환경
# 현재 스토리지 드라이버 확인
docker info | grep "Storage Driver"

daemon.json 주요 옵션

{
  "data-root": "/data/docker",
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "5",
    "compress": "true"
  },
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 65536,
      "Soft": 65536
    }
  },
  "live-restore": true,
  "dns": ["8.8.8.8", "8.8.4.4"],
  "max-concurrent-downloads": 10,
  "max-concurrent-uploads": 5
}
옵션 설명
data-root Docker 데이터 저장 경로
log-driver 컨테이너 로그 드라이버 (json-file, syslog, fluentd 등)
log-opts.max-size 로그 파일 최대 크기 (초과 시 순환)
log-opts.max-file 보관할 최대 로그 파일 수
live-restore Docker 데몬 재시작 시 컨테이너 계속 실행
default-ulimits 모든 컨테이너의 기본 ulimit 설정

로그 드라이버 설정 및 로테이션

# 특정 컨테이너에 로그 설정 적용
docker run \
  --log-driver json-file \
  --log-opt max-size=50m \
  --log-opt max-file=3 \
  my-app

# 기존 컨테이너 로그 초기화 (root 권한)
truncate -s 0 $(docker inspect --format='' <container_id>)

GPU 지원 — NVIDIA Container Toolkit

딥러닝, AI 추론 등 GPU가 필요한 컨테이너 실행 시 NVIDIA Container Toolkit을 설치합니다.

# 1. NVIDIA Container Toolkit 저장소 추가
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
  sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

# 2. Docker 런타임에 NVIDIA 등록
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

# 3. GPU 접근 테스트
docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi

Docker 완전 삭제 (Uninstall)

# 1. Docker 서비스 중지
sudo systemctl stop docker docker.socket containerd

# 2. Docker 패키지 삭제
sudo apt-get purge -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

# 3. Docker 데이터 삭제 (이미지, 컨테이너, 볼륨 모두 삭제 — 복구 불가)
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm -rf /etc/docker

# 4. 저장소 설정 삭제
sudo rm -f /etc/apt/sources.list.d/docker.list
sudo rm -f /etc/apt/keyrings/docker.asc
sudo apt-get update

추천 학습 자료


댓글남기기