소개
이 포괄적인 Docker 튜토리얼은 개발자 및 시스템 관리자에게 컨테이너화 기술을 이해하고 구현하는 실용적인 가이드를 제공합니다. Docker 의 핵심 개념, 설치 절차 및 기본 명령어를 탐색함으로써 학습자는 경량이며 휴대 가능한 애플리케이션 환경을 만드는 데 필수적인 기술을 습득하게 될 것입니다.
Docker 기본 개념
컨테이너화 기술 소개
Docker 는 소프트웨어 개발 및 배포를 혁신하는 강력한 컨테이너화 플랫폼입니다. 개발자는 모든 종속성을 포함한 애플리케이션을 표준화된 단위인 컨테이너에 패키징하여 다양한 컴퓨팅 환경에서 일관적인 성능을 보장할 수 있습니다.
Docker 의 핵심 개념
Docker 란 무엇인가요?
Docker 는 애플리케이션 배포, 확장 및 관리를 자동화할 수 있도록 하는 오픈소스 컨테이너화 기술 플랫폼입니다. 기존 가상 머신과 달리 Docker 컨테이너는 호스트 시스템의 커널을 공유하여 경량적이고 효율적입니다.
graph TD
A[애플리케이션 코드] --> B[Docker 컨테이너]
B --> C[일관된 배포]
B --> D[격리된 환경]
주요 Docker 구성 요소
| 구성 요소 | 설명 | 용도 |
|---|---|---|
| Docker Engine | 핵심 런타임 | 컨테이너 생성 및 실행 |
| Docker Image | 읽기 전용 템플릿 | 컨테이너 구성 정의 |
| Docker Container | 실행 가능 인스턴스 | 애플리케이션 실행 |
Ubuntu 22.04 에서의 설치
## 패키지 인덱스 업데이트
sudo apt update
## 종속성 설치
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## Docker 공식 GPG 키 추가
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## 안정적인 리포지토리 설정
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Docker Engine 설치
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
기본 Docker 명령어
## Docker 버전 확인
docker --version
## 이미지 가져오기
docker pull ubuntu:latest
## 이미지 목록
docker images
## 컨테이너 실행
docker run -it ubuntu:latest /bin/bash
Docker 컨테이너화의 활용 사례
Docker 는 다음과 같은 분야에서 널리 사용됩니다.
- 마이크로서비스 아키텍처
- 지속적 통합/지속적 배포 (CI/CD)
- 클라우드 네이티브 애플리케이션 개발
- 일관된 개발 및 프로덕션 환경
Docker 이미지 생성
Docker 이미지 이해
Docker 이미지는 애플리케이션을 실행하는 데 필요한 모든 것 (코드, 런타임, 라이브러리, 환경 변수 및 구성 파일) 을 포함하는 읽기 전용 템플릿입니다. 컨테이너 생성을 위한 청사진 역할을 합니다.
graph LR
A[Dockerfile] --> B[Docker Image]
B --> C[Docker Container]
Dockerfile 기본 사항
Dockerfile 은 Docker 이미지를 생성하기 위한 지침이 포함된 텍스트 문서입니다. 각 지침은 이미지에 새로운 레이어를 생성합니다.
Dockerfile 지침 유형
| 지침 | 목적 | 예시 |
|---|---|---|
| FROM | 기본 이미지 설정 | FROM ubuntu:22.04 |
| RUN | 명령 실행 | RUN apt-get update |
| COPY | 파일 복사 | COPY app.py /app/ |
| WORKDIR | 작업 디렉터리 설정 | WORKDIR /app |
| CMD | 기본 명령 | CMD ["python", "app.py"] |
샘플 Python 애플리케이션 이미지 생성
샘플 프로젝트 구조
/project
├── Dockerfile
└── app.py
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Docker World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Dockerfile
## 공식 Python 런타임을 기본 이미지로 사용
FROM python:3.9-slim
## 작업 디렉터리 설정
WORKDIR /app
## 프로젝트 파일 복사
COPY app.py requirements.txt ./
## 종속성 설치
RUN pip install --no-cache-dir -r requirements.txt
## 포트 노출
EXPOSE 5000
## 기본 명령 정의
CMD ["python", "app.py"]
Docker 이미지 생성 및 관리
## requirements.txt 생성
echo "flask" > requirements.txt
## Docker 이미지 생성
docker build -t my-flask-app .
## 이미지 목록
docker images
## 이미지에서 컨테이너 실행
docker run -p 5000:5000 my-flask-app
이미지 최적화 전략
- 다단계 빌드 사용
- 레이어 수 최소화
- 빌드 캐시 활용
- 특정 이미지 태그 사용
- 불필요한 파일 제거
컨테이너 관리
컨테이너 수명주기 개요
Docker 컨테이너는 생성부터 종료까지 다양한 상태를 가진 복잡한 수명주기를 갖습니다. 이러한 상태를 이해하는 것은 효과적인 컨테이너 관리 및 오케스트레이션에 필수적입니다.
stateDiagram-v2
[*] --> Created
Created --> Running
Running --> Paused
Paused --> Running
Running --> Stopped
Stopped --> Removed
Removed --> [*]
필수 Docker 컨테이너 명령어
| 명령어 | 기능 | 예시 |
|---|---|---|
| docker create | 컨테이너 생성 | docker create nginx |
| docker start | 컨테이너 시작 | docker start container_id |
| docker stop | 실행 중인 컨테이너 중지 | docker stop container_id |
| docker restart | 컨테이너 재시작 | docker restart container_id |
| docker rm | 컨테이너 제거 | docker rm container_id |
컨테이너 검사 및 모니터링
## 실행 중인 컨테이너 목록
docker ps
## 모든 컨테이너 목록
docker ps -a
## 컨테이너 세부 정보 검사
docker inspect container_id
## 컨테이너 로그 보기
docker logs container_id
## 컨테이너 리소스 사용량 모니터링
docker stats
컨테이너 리소스 관리
## CPU 및 메모리 제한으로 컨테이너 실행
docker run -d \
--cpus="1.5" \
--memory="512m" \
--name limited-container \
nginx
고급 컨테이너 네트워킹
## 사용자 정의 네트워크 생성
docker network create mynetwork
## 특정 네트워크에서 컨테이너 실행
docker run -d \
--network=mynetwork \
--name web-container \
nginx
컨테이너 확장 전략
## 여러 컨테이너 인스턴스 확장
docker-compose up -d --scale web=3
지속적인 데이터 관리
## 볼륨 생성
docker volume create myvolume
## 컨테이너에 볼륨 마운트
docker run -v myvolume:/app/data \
--name data-container \
ubuntu
권장 사항
- 경량 기본 이미지 사용
- 상태 확인 (health check) 구현
- 컨테이너 크기 최소화
- 다단계 빌드 사용
- 적절한 로깅 구현
- 컨테이너 구성 보안
요약
Docker 는 소프트웨어 배포 방식에 혁명을 일으키며, 개발자들에게 일관성 있고, 격리된, 그리고 확장 가능한 애플리케이션 컨테이너를 만드는 강력한 플랫폼을 제공합니다. Docker 의 기본 기술을 숙달함으로써 전문가들은 개발 워크플로우를 간소화하고, 시스템 효율성을 높이며, 다양한 컴퓨팅 인프라에서 복잡한 애플리케이션 관리를 단순화할 수 있습니다.



