Ubuntu 에서 Docker 컨테이너 관리 마스터 가이드

DockerBeginner
지금 연습하기

소개

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

Docker 기본

Docker 기초 소개

Docker 는 소프트웨어 컨테이너화를 혁신하는 강력한 컨테이너 기술 플랫폼입니다. 개발자는 모든 종속성과 함께 애플리케이션을 패키징하여 다양한 컴퓨팅 환경에서 일관적인 성능을 보장할 수 있습니다.

Docker 의 핵심 개념

Docker 란 무엇인가요?

Docker 는 컨테이너화를 사용하여 애플리케이션 배포 및 관리를 간소화하는 오픈소스 플랫폼입니다. 기존 가상 머신과 달리 Docker 컨테이너는 호스트 시스템의 커널을 공유하여 가볍고 효율적입니다.

graph TD
    A[애플리케이션 코드] --> B[Docker 컨테이너]
    B --> C[호스트 운영 체제]
    C --> D[하드웨어]

주요 Docker 구성 요소

구성 요소 설명 용도
Docker Engine 핵심 런타임 컨테이너 수명주기 관리
Docker Image 가벼운 템플릿 컨테이너 구성 정의
Docker Container 실행 가능 인스턴스 애플리케이션 실행

Docker 아키텍처

Docker 는 여러 주요 구성 요소를 갖춘 클라이언트 - 서버 아키텍처를 사용합니다.

  • Docker Daemon: Docker 객체를 관리
  • Docker Client: Docker Daemon 에 명령 전송
  • Docker Registry: Docker 이미지 저장

기본 Docker 명령어

Ubuntu 22.04 예시 Docker 명령어:

## Docker 설치
sudo apt-get update
sudo apt-get install docker.io

## Docker 버전 확인
docker --version

## Ubuntu 이미지 가져오기
docker pull ubuntu:22.04

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

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

## 컨테이너 중지
docker stop [컨테이너_ID]

Docker 컨테이너화의 장점

  • 일관된 개발 환경
  • 빠른 배포
  • 자원 효율성
  • 향상된 확장성
  • 간소화된 종속성 관리

Docker 환경 설정

Docker 설치를 위한 Ubuntu 22.04 준비

Docker 는 호환 가능한 Linux 환경을 필요로 합니다. Ubuntu 22.04 는 간편한 설치 절차로 컨테이너 배포를 위한 훌륭한 플랫폼을 제공합니다.

시스템 요구 사항

설치 전에 Ubuntu 시스템이 다음 사전 조건을 충족하는지 확인하십시오.

요구 사항 사양
OS Ubuntu 22.04 LTS
아키텍처 64 비트
커널 5.4 이상
RAM 최소 2GB

Docker 설치 방법

graph TD
    A[Docker 설치] --> B[리포지토리 방법]
    A --> C[패키지 방법]
    A --> D[스크립트 방법]

리포지토리 설치 과정

## 기존 패키지 업데이트
sudo apt-get update

## 필요한 종속성 설치
sudo apt-get install ca-certificates curl gnupg lsb-release

## 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 Engine 설치
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Docker 설치 확인

## Docker 버전 확인
docker --version

## Docker가 실행 중인지 확인
sudo systemctl status docker

## Docker 설치 테스트
sudo docker run hello-world

설치 후 구성

## 현재 사용자를 docker 그룹에 추가
sudo usermod -aG docker $USER

## Docker 서비스 다시 시작
sudo systemctl restart docker

Docker Compose 설치

## Docker Compose 다운로드
sudo curl -L " -s)-$(uname -m)" -o /usr/local/bin/docker-compose

## 실행 권한 부여
sudo chmod +x /usr/local/bin/docker-compose

## 설치 확인
docker-compose --version

Docker 이미지 관리

Docker 이미지 이해

Docker 이미지는 애플리케이션 실행에 필요한 모든 것을 포함하는 가볍고 독립적인 실행 가능 패키지입니다. 컨테이너 생성을 위한 청사진 역할을 합니다.

graph TD
    A[Dockerfile] --> B[Docker 이미지]
    B --> C[Docker 컨테이너]

이미지 관리 명령어

명령어 기능
docker images 로컬 이미지 목록
docker pull 이미지 다운로드
docker push 이미지 업로드
docker rmi 이미지 삭제

Dockerfile 생성

## 기본 이미지 선택
FROM ubuntu:22.04

## 메타데이터
LABEL maintainer="developer@example.com"

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

## 종속성 설치
RUN apt-get install -y python3 python3-pip

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

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

## 애플리케이션 종속성 설치
RUN pip3 install -r requirements.txt

## 애플리케이션 포트 노출
EXPOSE 8000

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

Docker 이미지 생성

## Dockerfile에서 이미지 생성
docker build -t myapp:v1 .

## 로컬 이미지 목록
docker images

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

이미지 관리 워크플로우

graph LR
    A[코드 개발] --> B[Dockerfile 생성]
    B --> C[이미지 생성]
    C --> D[컨테이너 테스트]
    D --> E[레지스트리에 푸시]
    E --> F[컨테이너 배포]

고급 이미지 작업

## 이미지를 tar 아카이브로 내보내기
docker save -o myimage.tar myimage:v1

## tar 아카이브에서 이미지 가져오기
docker load -i myimage.tar

## 사용되지 않는 이미지 제거
docker image prune

Docker 레지스트리 상호 작용

## Docker Hub에 로그인
docker login

## 레지스트리에 이미지 푸시
docker push myusername/myimage:tag

## 레지스트리에서 이미지 가져오기
docker pull myusername/myimage:tag

요약

Docker 는 소프트웨어 컨테이너화에 혁명적인 접근 방식을 제시하며, 개발자들에게 일관성 있고 효율적이며 확장 가능한 애플리케이션 환경을 구축할 수 있는 강력한 플랫폼을 제공합니다. Docker 의 핵심 구성 요소, 아키텍처 및 명령어를 숙달함으로써 전문가들은 개발 워크플로우를 간소화하고, 리소스 관리를 개선하며, 다양한 컴퓨팅 플랫폼에서 더욱 유연한 소프트웨어 배포를 달성할 수 있습니다.