소개
이 튜토리얼은 Docker 이미지 실행 및 Docker 컨테이너 관리에 대한 포괄적인 가이드를 제공합니다. Docker 의 기본 사항을 배우고, Docker 이미지와 그 용례를 탐색하며, Docker 컨테이너를 가져오고 관리하고 상호 작용하는 기술을 발견할 것입니다. 또한, 이 튜토리얼은 Docker 볼륨, 네트워크, Compose 및 Swarm 과 같은 고급 컨테이너 관리 주제를 다루어 Docker 를 사용하여 애플리케이션을 효과적으로 배포하고 관리하는 데 도움을 드립니다.
Docker 기본 개념
Docker 란 무엇인가?
Docker 는 애플리케이션 배포 및 개발을 혁신하는 강력한 컨테이너화 기술입니다. 개발자는 애플리케이션과 모든 종속성을 컨테이너라는 표준화된 단위에 패키징하여 다양한 컴퓨팅 환경에서 일관된 성능을 보장할 수 있습니다.
Docker 의 핵심 개념
컨테이너화 기술
컨테이너화는 애플리케이션이 격리된 환경에서 실행되도록 하여 여러 가지 주요 이점을 제공합니다.
| 특징 | 설명 |
|---|---|
| 격리 | 각 컨테이너는 독립적으로 실행됩니다 |
| 이식성 | 컨테이너는 Docker 를 지원하는 모든 시스템에서 실행될 수 있습니다 |
| 효율성 | 기존 가상 머신에 비해 경량입니다 |
graph TD
A[애플리케이션 코드] --> B[Docker 컨테이너]
B --> C[호스트 운영 체제]
C --> D[인프라]
Docker 아키텍처
Docker 는 클라이언트 - 서버 아키텍처를 사용하며 다음과 같은 주요 구성 요소를 포함합니다.
- Docker 데몬
- Docker 클라이언트
- Docker 레지스트리
- Docker 이미지
- Docker 컨테이너
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=$(dpkg --print-architecture)] $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Docker 엔진 설치
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 이미지 사용
Docker 이미지 이해
Docker 이미지는 컨테이너를 생성하는 데 사용되는 읽기 전용 템플릿입니다. 애플리케이션을 실행하는 데 필요한 애플리케이션 코드, 런타임, 라이브러리 및 시스템 도구를 포함합니다.
graph LR
A[Dockerfile] --> B[Docker Image]
B --> C[Docker Container]
이미지 관리 명령어
| 명령어 | 설명 |
|---|---|
| docker images | 로컬 이미지 목록 |
| docker pull | 레지스트리에서 이미지 다운로드 |
| docker rmi | 이미지 삭제 |
| docker tag | 버전 관리를 위한 이미지 태그 |
Dockerfile 생성
## 기본 이미지
FROM ubuntu:22.04
## 메타데이터
LABEL maintainer="your-email@example.com"
## 시스템 업데이트
RUN apt-get update && apt-get install -y \
python3 \
pip
## 작업 디렉토리 설정
WORKDIR /app
## 애플리케이션 파일 복사
COPY . /app
## 종속성 설치
RUN pip install -r requirements.txt
## 포트 노출
EXPOSE 5000
## 애플리케이션 실행
CMD ["python3", "app.py"]
Docker 이미지 빌드
## 이미지 빌드
docker build -t myapp:v1 .
## 특정 태그로 빌드
docker build -t myapp:latest .
## 빌드 인수로 빌드
docker build --build-arg VERSION=1.0 -t myapp:v1 .
Docker 이미지 레이어
graph TD
A[기본 이미지] --> B[시스템 업데이트]
B --> C[종속성 설치]
C --> D[애플리케이션 코드 복사]
D --> E[시작 명령어 정의]
이미지 저장 및 공유
## Docker Hub에 로그인
docker login
## 레지스트리에 이미지 푸시
docker push username/myapp:v1
## 레지스트리에서 이미지 풀
docker pull username/myapp:v1
권장 사항
- 이미지 크기 최소화
- 다단계 빌드 사용
- 캐싱 활용
- 불필요한 패키지 설치 방지
Docker 실무
컨테이너 네트워킹
Docker 는 컨테이너 간 통신을 위한 다양한 네트워킹 모드를 제공합니다.
| 네트워크 모드 | 설명 |
|---|---|
| Bridge | 기본 네트워크 모드 |
| Host | 직접 호스트 네트워크 접근 |
| None | 네트워크 연결 없음 |
## 사용자 정의 네트워크 생성
docker network create mynetwork
## 특정 네트워크에서 컨테이너 실행
docker run --network=mynetwork ubuntu
Docker Compose
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"
database:
image: postgres
environment:
POSTGRES_PASSWORD: secret
컨테이너 오케스트레이션 워크플로우
graph TD
A[개발] --> B[컨테이너화]
B --> C[테스트]
C --> D[스테이징]
D --> E[생산 배포]
애플리케이션 확장
## 서비스 확장
docker-compose up -d --scale web=3
## 컨테이너 리소스 모니터링
docker stats
생산 배포 전략
## 롤링 업데이트
docker service update \
--image myapp:v2 \
--update-parallelism 2 \
--update-delay 10s \
myservice
컨테이너 모니터링
## 컨테이너 로그 보기
docker logs mycontainer
## 실시간 리소스 사용량
docker top mycontainer
고급 네트워킹
## 오버레이 네트워크 생성
docker network create \
-d overlay \
--subnet 10.0.0.0/24 \
my_overlay_network
보안 관행
| 관행 | 설명 |
|---|---|
| 리소스 제한 | CPU/메모리 제한 |
| 읽기 전용 파일 시스템 | 수정 방지 |
| 비 루트 사용자 | 컨테이너 권한 감소 |
요약
이 튜토리얼을 마치면 Docker 이미지 실행, Docker 컨테이너 관리, 그리고 고급 컨테이너 관리 기법을 활용하여 애플리케이션을 더 효율적으로 배포 및 관리하는 방법에 대한 확실한 이해를 얻게 될 것입니다. 이 튜토리얼에서 얻은 지식은 일관성, 확장성, 이식성과 같은 Docker 의 이점을 소프트웨어 개발 및 배포 프로세스에 활용할 수 있도록 해줄 것입니다.



