Ubuntu 에서 Docker 설치 및 구성

DockerBeginner
지금 연습하기

소개

이 튜토리얼은 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 는 클라이언트 - 서버 아키텍처를 사용하며 다음과 같은 주요 구성 요소를 포함합니다.

  1. Docker 데몬
  2. Docker 클라이언트
  3. Docker 레지스트리
  4. Docker 이미지
  5. 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 의 이점을 소프트웨어 개발 및 배포 프로세스에 활용할 수 있도록 해줄 것입니다.