Ubuntu 에서 Docker 컨테이너 배포 방법

DockerBeginner
지금 연습하기

소개

이 포괄적인 Docker 튜토리얼은 개발자 및 시스템 관리자에게 컨테이너 기술을 이해하고 구현하는 기본적인 가이드를 제공합니다. Docker 의 핵심 개념, 아키텍처 및 실제 구현을 탐색함으로써 학습자는 현대 소프트웨어 배포 및 인프라 관리에 필수적인 기술을 습득하게 됩니다.

Docker 기본 개념

Docker 란 무엇인가?

Docker 는 개발자가 다양한 컴퓨팅 환경에서 애플리케이션을 일관되게 패키징, 배포 및 실행할 수 있도록 지원하는 강력한 컨테이너화 기술입니다. 현대 소프트웨어 개발의 필수적인 도구로서, Docker 는 애플리케이션 배포를 간소화하고 시스템 효율성을 높입니다.

컨테이너화의 핵심 개념

컨테이너화는 애플리케이션을 격리하여 자체 종속성과 함께 독립적으로 실행할 수 있도록 합니다. 기존 가상 머신과 달리 컨테이너는 호스트 시스템의 커널을 공유하여 가볍고 빠릅니다.

graph TD A[애플리케이션 코드] --> B[Docker 컨테이너] B --> C[공유 호스트 커널] B --> 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) 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 컨테이너 예제

## 공식 Ubuntu 이미지 가져오기
docker pull ubuntu:latest

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

## 컨테이너 내부에서 환경 확인
cat /etc/os-release

이 예제는 Ubuntu 이미지를 다운로드하고 대화형 컨테이너를 실행하는 방법을 보여주며, Docker 가 격리된 환경을 만드는 간편성을 보여줍니다.

컨테이너 관리

컨테이너 수명주기 작업

Docker 는 컨테이너 수명주기를 효율적으로 관리하기 위한 포괄적인 명령어를 제공하여 개발자가 컨테이너를 생성, 시작, 중지 및 제거할 수 있도록 지원합니다.

graph LR A[컨테이너 생성] --> B[컨테이너 시작] B --> C[실행 중인 컨테이너] C --> D[컨테이너 중지] D --> E[컨테이너 제거]

필수 Docker 컨테이너 명령어

명령어 기능 예시
docker create 새 컨테이너 생성 docker create ubuntu:latest
docker start 중지된 컨테이너 시작 docker start container_id
docker stop 실행 중인 컨테이너 중지 docker stop container_id
docker rm 컨테이너 제거 docker rm container_id
docker ps 실행 중인 컨테이너 목록 docker ps
docker ps -a 모든 컨테이너 목록 docker ps -a

컨테이너 관리 예제

## 새 컨테이너 생성
docker create --name web_server nginx:latest

## 컨테이너 시작
docker start web_server

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

## 컨테이너 중지
docker stop web_server

## 컨테이너 제거
docker rm web_server

컨테이너 리소스 관리

## 리소스 제한으로 컨테이너 실행
docker run -d \
  --name limited_container \
  --memory=512m \
  --cpus=1.5 \
  nginx:latest

이 예제는 컨테이너의 메모리 및 CPU 제약 조건을 설정하여 제어된 리소스 활용을 보여줍니다.

고급 컨테이너 검사

## 자세한 컨테이너 정보
docker inspect web_server

## 컨테이너 로그
docker logs web_server

## 실시간 컨테이너 통계
docker stats web_server

고급 컨테이너 기술

컨테이너 네트워크 구성

Docker 는 복잡한 애플리케이션 아키텍처를 위한 유연한 네트워킹 옵션을 제공합니다.

graph LR A[호스트 네트워크] --> B[브리지 네트워크] B --> C[사용자 지정 네트워크] C --> D[오버레이 네트워크]

네트워크 유형

네트워크 유형 설명 사용 사례
브리지 기본 네트워크 격리된 컨테이너 간 통신
호스트 직접 호스트 네트워크 고성능 시나리오
오버레이 멀티 호스트 네트워킹 분산 시스템

사용자 지정 네트워크 생성

## 사용자 지정 네트워크 생성
docker network create --driver bridge my_custom_network

## 사용자 지정 네트워크에서 컨테이너 실행
docker run -d \
  --name web_app \
  --network my_custom_network \
  nginx:latest

볼륨 관리

## 영구 볼륨 생성
docker volume create app_data

## 컨테이너에 볼륨 마운트
docker run -d \
  --name database \
  -v app_data:/var/lib/database \
  postgres:latest

Docker Compose 를 이용한 컨테이너 오케스트레이션

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  database:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: secret

성능 모니터링

## 실시간 컨테이너 메트릭
docker stats

## 컨테이너 리소스 사용량
docker top container_name

## 성능 프로파일링
docker run \
  --rm \
  -it \
  --privileged \
  ubuntu:latest \
  perf top

요약

Docker 는 애플리케이션 패키징 및 배포에 혁명적인 접근 방식을 제시하며, 가볍고 휴대 가능하며 효율적인 컨테이너화 솔루션을 제공합니다. Docker 의 기본 기술을 숙달함으로써 개발자는 작업 흐름을 간소화하고, 일관된 환경을 보장하며, 다양한 컴퓨팅 플랫폼에서 시스템 확장성을 향상시킬 수 있습니다.