Ubuntu 에서 Docker 컨테이너 구축 방법

DockerBeginner
지금 연습하기

소개

이 포괄적인 Docker 튜토리얼은 개발자 및 IT 전문가에게 컨테이너 기술에 대한 필수 지식을 제공합니다. Ubuntu 에서 Docker 를 설정하는 방법, 핵심 개념을 이해하는 방법, 다양한 컴퓨팅 환경에서 일관된 애플리케이션 배포를 위해 컨테이너화를 활용하는 방법을 배웁니다.

Docker 기본

Docker 기술 소개

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

Docker 의 핵심 개념

Docker 란 무엇인가요?

Docker 는 개발자가 컨테이너를 사용하여 애플리케이션을 생성, 배포 및 실행할 수 있도록 하는 경량 가상화 기술입니다. 기존 가상 머신과 달리 컨테이너는 호스트 시스템의 커널을 공유하여 더 효율적이고 빠르게 시작할 수 있습니다.

컨테이너 아키텍처

graph TD A[Docker Engine] --> B[Container Runtime] A --> C[Docker Images] B --> D[Application Container] C --> 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 설치 확인
docker run hello-world

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

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

Docker 의 장점

Docker 는 현대 소프트웨어 개발에 상당한 이점을 제공합니다.

  • 개발 및 프로덕션 환경의 일관성
  • 애플리케이션 배포 속도 향상
  • 자원 활용 개선
  • 종속성 관리 간소화
  • 확장성 및 이식성 향상

Docker 이미지 생성

Docker 이미지 이해

Docker 이미지는 컨테이너를 생성하는 데 사용되는 읽기 전용 템플릿입니다. 애플리케이션 실행에 필요한 애플리케이션 코드, 런타임, 라이브러리, 환경 변수 및 구성 파일을 포함합니다.

Dockerfile 기본

Dockerfile 은 Docker 이미지를 빌드하는 지침이 포함된 텍스트 문서입니다. 각 지침은 이미지에 새로운 레이어를 생성합니다.

Dockerfile 구조

graph TD A[베이스 이미지] --> B[종속성 설치] B --> C[애플리케이션 코드 복사] C --> D[환경 변수 설정] D --> E[시작 명령 정의]

일반적인 Dockerfile 지침

지침 목적 예시
FROM 베이스 이미지 지정 FROM ubuntu:22.04
RUN 명령 실행 RUN apt-get update
COPY 파일 이미지 복사 COPY ./app /application
WORKDIR 작업 디렉토리 설정 WORKDIR /application
CMD 기본 명령 정의 CMD ["python", "app.py"]

간단한 Python 웹 앱 이미지 생성

샘플 Dockerfile

## 공식 Python 런타임을 베이스 이미지로 사용
FROM python:3.9-slim

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

## requirements 파일 복사
COPY requirements.txt .

## 종속성 설치
RUN pip install --no-cache-dir -r requirements.txt

## 애플리케이션 코드 복사
COPY . .

## 포트 노출
EXPOSE 5000

## 시작 명령 정의
CMD ["python", "app.py"]

Docker 이미지 빌드

## 태그가 지정된 이미지 빌드
docker build -t hello-world-app .

## 로컬 이미지 목록
docker images

## 생성된 이미지 실행
docker run -p 5000:5000 hello-world-app

이미지 관리 명령어

## 특정 이미지 삭제
docker rmi hello-world-app

## 사용되지 않는 모든 이미지 삭제
docker image prune

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

권장 사항

  • 최소한의 베이스 이미지 사용
  • 레이어 수 최소화
  • 불필요한 패키지 설치 방지
  • 다단계 빌드를 사용하여 이미지 크기 줄이기
  • 빌드 캐시 효율적으로 활용

컨테이너 관리

컨테이너 수명주기 개요

Docker 컨테이너는 생성부터 종료까지 여러 상태를 갖는 정의된 수명주기를 가지고 있습니다. 이러한 상태를 이해하는 것은 효과적인 컨테이너 관리에 필수적입니다.

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

기본 컨테이너 작업

컨테이너 관리 명령어

명령어 기능 예시
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 run nginx

## 백그라운드에서 컨테이너 실행
docker run -d nginx

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

## 사용자 지정 이름으로 컨테이너 실행
docker run --name web-server nginx

컨테이너 검사 및 모니터링

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

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

## 컨테이너 로그 보기
docker logs container_id

## 컨테이너 세부 정보 검사
docker inspect container_id

## 컨테이너 리소스 사용량 모니터링
docker stats

컨테이너 네트워킹

## Docker 네트워크 목록
docker network ls

## 사용자 지정 네트워크 생성
docker network create mynetwork

## 컨테이너를 네트워크에 연결
docker network connect mynetwork container_id

고급 컨테이너 관리

컨테이너 리소스 제한

## CPU 및 메모리 제한
docker run -d \
  --cpus="1.5" \
  --memory="512m" \
  nginx

컨테이너 확장

## 여러 컨테이너 인스턴스 생성
docker run -d -p 8001:80 nginx
docker run -d -p 8002:80 nginx
docker run -d -p 8003:80 nginx

컨테이너 배포 전략

지속적인 데이터 관리

## 볼륨 생성
docker volume create myvolume

## 컨테이너에 볼륨 마운트
docker run -v myvolume:/app/data nginx

환경 구성

## 환경 변수 설정
docker run -e DATABASE_URL=localhost nginx

요약

Docker 는 애플리케이션 배포를 간소화하는 경량 및 휴대 가능한 컨테이너를 통해 소프트웨어 개발을 혁신합니다. Docker 의 핵심 구성 요소, 설치 프로세스 및 기본 명령어를 숙달함으로써 개발자는 최소한의 오버헤드와 최대의 유연성을 통해 더 효율적이고 확장 가능하며 재현 가능한 소프트웨어 환경을 만들 수 있습니다.