Linux 에서 Docker 컨테이너 생성 방법

DockerBeginner
지금 연습하기

소개

이 포괄적인 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 의 기본 기술을 숙달함으로써 전문가들은 개발 워크플로우를 간소화하고, 시스템 효율성을 높이며, 다양한 컴퓨팅 인프라에서 복잡한 애플리케이션 관리를 단순화할 수 있습니다.