NyangPolice's homepage

Bookmark this to keep an eye on my project updates!

View on GitHub
16 December 2025

0. Docker 기초: 개념 및 설치

by NyangPolice

Docker 기초: 개념 및 설치

Docker는 애플리케이션을 컨테이너라는 격리된 환경에서 실행할 수 있게 해주는 오픈소스 플랫폼이다.

Docker란?

Docker는 2013년 dotCloud(현 Docker Inc.)에서 출시한 컨테이너 기반의 가상화 플랫폼이다. 애플리케이션과 그 실행에 필요한 모든 종속성(라이브러리, 설정 파일, 환경 변수 등)을 하나의 컨테이너로 패키징하여 어디서든 동일하게 실행할 수 있게 해준다.

가상 머신 vs Docker

전통적인 가상 머신(VM)과 Docker 컨테이너의 차이를 이해하는 것이 중요하다.

가상 머신 (Virtual Machine)

graph TD
    Hardware[Hardware]
    HostOS[Host OS]
    Hypervisor[Hypervisor]
    GuestOS1["Guest OS (Linux)"]
    GuestOS2["Guest OS (Windows)"]
    AppA[Application A]
    AppB[Application B]

    Hardware --> HostOS
    HostOS --> Hypervisor
    Hypervisor --> GuestOS1
    Hypervisor --> GuestOS2
    GuestOS1 --> AppA
    GuestOS2 --> AppB

Docker 컨테이너

graph TD
    Hardware[Hardware]
    HostOS[Host OS]
    DockerEngine[Docker Engine]
    ContainerA[Container A<br/>App + Libs]
    ContainerB[Container B<br/>App + Libs]

    Hardware --> HostOS
    HostOS --> DockerEngine
    DockerEngine --> ContainerA
    DockerEngine --> ContainerB

Docker의 주요 특징

1. 경량성 (Lightweight)

2. 이식성 (Portability)

3. 격리성 (Isolation)

4. 확장성 (Scalability)

5. 버전 관리 및 재사용

Docker 아키텍처

Docker는 클라이언트-서버 아키텍처를 사용한다.

graph LR
    Client["Docker Client (CLI)"]
    Daemon["Docker Daemon (dockerd)"]
    Registry[Image Registry]
    
    subgraph ClientCommands [Commands]
        run[docker run]
        build[docker build]
        pull[docker pull]
    end
    
    subgraph DaemonManage [Management]
        Images[Images]
        Containers[Containers]
        Networks[Networks]
        Volumes[Volumes]
    end

    Client -- REST API --> Daemon
    Client --- ClientCommands
    Daemon --- DaemonManage
    Daemon -- Pull/Push --> Registry

주요 구성 요소

1. Docker Daemon (dockerd)

2. Docker Client (docker)

3. Docker Registry

4. Docker Objects

Docker 핵심 개념

1. 이미지 (Image)

이미지는 컨테이너를 생성하기 위한 읽기 전용 템플릿이다. 이미지는 레이어(Layer) 구조로 되어 있어 효율적으로 저장되고 전송된다.

이미지 레이어 구조

graph BT
    Base["Ubuntu Base (80MB)"]
    Runtime["Python 3.9 (100MB)"]
    Deps["Dependencies (50MB)"]
    App["App Layer (10MB)"]

    Base --> Runtime
    Runtime --> Deps
    Deps --> App

각 레이어는 읽기 전용이며, 여러 이미지가 동일한 레이어를 공유할 수 있어 디스크 공간을 절약한다.

이미지 명명 규칙

[registry]/[namespace]/[repository]:[tag]

예시:
docker.io/library/nginx:latest
- registry: docker.io (Docker Hub)
- namespace: library (공식 이미지)
- repository: nginx
- tag: latest

2. 컨테이너 (Container)

컨테이너는 이미지의 실행 가능한 인스턴스다. 컨테이너는 이미지 레이어 위에 쓰기 가능한 레이어를 추가하여 실행 중에 변경된 내용을 저장한다.

컨테이너 생명주기

stateDiagram-v2
    [*] --> Created
    Created --> Running
    Running --> Paused
    Paused --> Running
    Running --> Stopped
    Stopped --> Running : Restart
    Stopped --> Removed
    Removed --> [*]

3. Dockerfile

Dockerfile은 이미지를 빌드하기 위한 스크립트 파일이다. 텍스트 형식으로 작성되며, 이미지 생성 과정을 자동화한다.

주요 명령어

4. 볼륨 (Volume)

볼륨은 컨테이너의 데이터를 영구적으로 저장하기 위한 메커니즘이다. 컨테이너가 삭제되어도 볼륨의 데이터는 유지된다.

5. 네트워크 (Network)

Docker는 여러 네트워크 드라이버를 제공하여 컨테이너 간 통신을 지원한다.

Docker 설치

Docker는 다양한 플랫폼에서 사용할 수 있음. 각 플랫폼별 빠른 설치 방법을 소개함.

[!IMPORTANT] 상세 설치 가이드: 플랫폼별 상세한 설치 방법, 시스템 요구사항, 문제 해결은 Docker 설치 가이드 문서를 참고할 것.

빠른 설치 요약

Windows

  1. Docker Desktop for Windows 다운로드
  2. WSL 2 활성화 필요
  3. 설치 후 docker --version으로 확인

상세 가이드: Windows 설치 가이드

macOS

  1. Docker Desktop for Mac 다운로드
  2. CPU 아키텍처(Apple Silicon/Intel) 확인 후 설치
  3. 설치 후 docker --version으로 확인

상세 가이드: macOS 설치 가이드

Linux (Ubuntu/Debian)

# 편리한 설치 스크립트 (개발/테스트 환경용)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 사용자 권한 설정
sudo usermod -aG docker $USER
newgrp docker

# 설치 확인
docker --version

상세 가이드: Linux 설치 가이드

[!WARNING] 프로덕션 환경: 편리한 설치 스크립트는 테스트/개발 환경에서만 사용할 것. 프로덕션 환경에서는 공식 저장소를 통한 설치를 권장함.

설치 확인

# Docker 버전 확인
docker --version

# Docker 정보 확인
docker info

# 테스트 컨테이너 실행
docker run hello-world

설치 후 첫 단계

1. Hello World 실행

docker run hello-world

이 명령은:

  1. 로컬에서 hello-world 이미지를 찾음
  2. 없으면 Docker Hub에서 다운로드
  3. 컨테이너를 생성하고 실행
  4. 메시지를 출력하고 종료

2. 첫 번째 실용적인 컨테이너 실행

# Nginx 웹 서버 실행
docker run -d -p 8080:80 --name my-nginx nginx

# 웹 브라우저에서 http://localhost:8080 접속

3. 컨테이너 관리 기본

# 실행 중인 컨테이너 확인
docker ps

# 모든 컨테이너 확인
docker ps -a

# 컨테이너 중지
docker stop my-nginx

# 컨테이너 시작
docker start my-nginx

# 컨테이너 삭제
docker rm my-nginx

# 컨테이너 강제 삭제 (실행 중이어도)
docker rm -f my-nginx

4. 이미지 관리 기본

# 로컬 이미지 목록
docker images

# 이미지 검색
docker search nginx

# 이미지 다운로드
docker pull nginx:alpine

# 이미지 삭제
docker rmi nginx:alpine

# 사용하지 않는 이미지 정리
docker image prune

Docker Desktop 주요 기능

GUI 대시보드

Docker Desktop은 GUI를 제공하여 다음을 쉽게 관리할 수 있다:

Kubernetes 통합

Docker Desktop에는 단일 노드 Kubernetes 클러스터가 포함되어 있다.

설정 방법:

Settings → Kubernetes → Enable Kubernetes

Extensions

Docker Desktop Extensions를 통해 추가 기능을 설치할 수 있다:

다음 단계

Docker가 성공적으로 설치되었다면 다음 주제들을 학습하자:

  1. Docker 기본 명령어: 컨테이너와 이미지 관리
  2. Dockerfile 작성: 커스텀 이미지 만들기
  3. Docker Compose: 멀티 컨테이너 애플리케이션 관리
  4. 볼륨과 네트워크: 데이터 영속성과 컨테이너 간 통신
  5. Best Practices: 효율적이고 안전한 Docker 사용법

Docker는 현대적인 애플리케이션 개발과 배포에 필수적인 도구가 되었다. 설치를 완료했다면 이제 컨테이너 기반 개발의 세계로 들어갈 준비가 된 것이다!

tags: docker - 기초 - 설치 - 개념 - 가상화 - 컨테이너

Docker 카테고리의 글 목록

Docker 카테고리 페이지로 이동 →