Docker 이미지 및 컨테이너 생성 방법

DockerBeginner
지금 연습하기

소개

이 포괄적인 Docker 튜토리얼은 개발자 및 시스템 관리자에게 컨테이너 기술을 이해하고 구현하는 실용적인 가이드를 제공합니다. Docker 의 핵심 원리, 아키텍처 및 필수 명령어를 탐색함으로써 학습자는 다양한 컴퓨팅 환경에서 애플리케이션을 효율적으로 패키징, 배포 및 실행하는 데 필요한 기술을 습득하게 됩니다.

Docker 기본

Docker 란 무엇인가?

Docker 는 소프트웨어 패키징 및 배포를 혁신하는 강력한 컨테이너화 기술입니다. 개발자는 다양한 컴퓨팅 환경에서 애플리케이션을 일관되게 생성, 배포 및 실행할 수 있도록 지원합니다.

Docker 의 핵심 개념

컨테이너화 원리

컨테이너화는 애플리케이션과 모든 종속성을 함께 패키징하여 다양한 플랫폼에서 일관된 실행을 보장합니다. 기존 가상 머신과 달리 컨테이너는 호스트 시스템의 커널을 공유하여 가볍고 효율적입니다.

graph TD A[애플리케이션 코드] --> B[Docker 컨테이너] B --> C[일관된 배포] B --> D[격리] B --> E[이식성]

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

## Docker 리포지토리 설정
echo "deb [arch=$(dpkg --print-architecture) 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 엔진 설치
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

기본 Docker 명령어

## Docker 버전 확인
docker --version

## Docker Hub에서 이미지 가져오기
docker pull ubuntu:latest

## 사용 가능한 이미지 목록
docker images

## 컨테이너 실행
docker run -it ubuntu:latest /bin/bash

Docker 의 주요 이점

  • 일관된 개발 및 프로덕션 환경
  • 빠른 애플리케이션 배포
  • 효율적인 리소스 활용
  • 간소화된 종속성 관리
  • 향상된 확장성 및 이식성

Docker 이미지 생성

Docker 이미지 이해

Docker 이미지는 Docker 컨테이너를 생성하기 위한 명령어 집합을 담고 있는 읽기 전용 템플릿입니다. 컨테이너화된 애플리케이션의 기반이 되며, 필요한 모든 종속성과 구성을 패키징합니다.

Dockerfile 기본

Dockerfile 은 Docker 이미지를 조립하는 데 사용되는 명령어가 포함된 텍스트 문서입니다. 이미지 생성 및 구성에 체계적인 접근 방식을 제공합니다.

graph TD A[Dockerfile] --> B[빌드 명령어] B --> C[Docker 이미지] C --> D[컨테이너 배포]

Dockerfile 지시어 유형

지시어 목적
FROM 기본 이미지 지정
RUN 이미지 빌드 중 명령어 실행
COPY 파일을 이미지에 복사
WORKDIR 작업 디렉토리 설정
EXPOSE 네트워크 포트 선언
CMD 기본 컨테이너 실행 명령어 정의

샘플 Dockerfile 생성

## 공식 Ubuntu 기본 이미지 사용
FROM ubuntu:22.04

## 시스템 패키지 업데이트
RUN apt-get update && apt-get upgrade -y

## Python 설치
RUN apt-get install -y python3 python3-pip

## 작업 디렉토리 설정
WORKDIR /app

## 애플리케이션 파일 복사
COPY . /app

## 종속성 설치
RUN pip3 install -r requirements.txt

## 기본 명령 지정
CMD ["python3", "app.py"]

Docker 이미지 빌드

## Dockerfile이 있는 디렉토리로 이동
cd /path/to/project

## Docker 이미지 빌드
docker build -t myapp:v1 .

## 생성된 이미지 확인
docker images

이미지 관리 명령어

## 로컬 이미지 목록
docker images

## 특정 이미지 삭제
docker rmi myapp:v1

## 이미지 태그
docker tag myapp:v1 myregistry/myapp:latest

## 레지스트리에 이미지 푸시
docker push myregistry/myapp:latest

이미지 생성 최적화 팁

  • 이미지 크기 최소화
  • 다단계 빌드 사용
  • 캐싱 메커니즘 활용
  • 불필요한 패키지 설치 방지
  • 보안 스캔 구현

컨테이너 배포

컨테이너 수명주기 관리

컨테이너 배포는 Docker 컨테이너의 생성부터 종료까지 전체 수명주기를 관리하여 효율적이고 안정적인 애플리케이션 실행을 보장하는 작업입니다.

graph LR A[이미지 가져오기] --> B[컨테이너 생성] B --> C[컨테이너 시작] C --> D[실행 상태] D --> E[컨테이너 중지] E --> F[컨테이너 제거]

컨테이너 배포 전략

전략 설명
단일 컨테이너 개별 컨테이너의 기본 배포
다중 컨테이너 상호 연결된 컨테이너 배포
확장 컨테이너 인스턴스의 수평 확장
롤링 업데이트 점진적인 컨테이너 교체

기본 컨테이너 배포 명령어

## 간단한 컨테이너 실행
docker run -d --name web-app nginx:latest

## 포트 매핑으로 컨테이너 실행
docker run -p 8080:80 -d nginx:latest

## 환경 변수로 컨테이너 실행
docker run -e DATABASE_URL=postgres://user:pass@host/db -d myapp:v1

고급 배포 옵션

## 컨테이너 리소스 제한
docker run --cpus=2 --memory=1g nginx:latest

## 볼륨 마운팅
docker run -v /host/path:/container/path nginx:latest

## 네트워크 구성
docker run --network=custom_network nginx:latest

컨테이너 관리 명령어

## 실행 중인 컨테이너 목록
docker ps

## 모든 컨테이너 목록
docker ps -a

## 컨테이너 중지
docker stop web-app

## 컨테이너 제거
docker rm web-app

## 컨테이너 재시작
docker restart web-app

컨테이너 오케스트레이션 기본

## Docker Compose 배포
docker-compose up -d

## 컨테이너 확장
docker-compose scale web=3

## 서비스 상태 확인
docker-compose ps

컨테이너 성능 모니터링

## 실시간 컨테이너 리소스 사용량
docker stats

## 컨테이너 로그
docker logs web-app

## 컨테이너 세부 정보 확인
docker inspect web-app

요약

Docker 는 소프트웨어 개발을 혁신하여 가볍고 휴대 가능한 컨테이너화 솔루션을 제공하여 일관된 애플리케이션 배포를 보장합니다. Docker 의 기본 개념, 설치 프로세스 및 주요 명령어를 숙달함으로써 전문가들은 개발 워크플로우를 간소화하고 시스템 안정성을 향상시키며 다양한 플랫폼 및 클라우드 환경에서 더 나은 인프라 유연성을 달성할 수 있습니다.