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

DockerBeginner
지금 연습하기

소개

이 포괄적인 Docker 튜토리얼은 개발자 및 시스템 관리자에게 컨테이너 기술 이해를 위한 실용적인 가이드를 제공합니다. Ubuntu 22.04 에서 핵심 Docker 개념, 설치 절차 및 기본 컨테이너 관리 기술에 중점을 둡니다. Docker 의 강력한 생태계를 탐색함으로써 학습자는 가볍고 휴대 가능한 애플리케이션 환경을 생성, 실행 및 관리하는 방법을 이해하게 될 것입니다.

Docker 기본 개념

컨테이너 기술 소개

Docker 는 개발자가 다양한 컴퓨팅 환경에서 애플리케이션을 효율적으로 패키징, 배포 및 실행할 수 있도록 지원하는 강력한 컨테이너화 플랫폼입니다. Linux 컨테이너는 호스트 시스템의 커널을 공유하면서도 분리된 런타임 환경을 유지하여 가벼운 가상화를 제공합니다.

Docker 컨테이너의 핵심 개념

graph TD A[Docker 이미지] --> B[Docker 컨테이너] B --> C[분리된 런타임 환경] A --> D[Dockerfile] D --> E[빌드 지침]
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=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 엔진 설치
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

기본 Docker 명령어

## Docker 버전 확인

## Ubuntu 이미지 가져오기

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

## 컨테이너 실행

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

## 컨테이너 중지

컨테이너화의 이점

Docker 컨테이너는 현대 소프트웨어 개발에서 다음과 같은 중요한 이점을 제공합니다.

  • 개발 및 프로덕션 환경에서 일관된 환경
  • 가볍고 빠른 배포
  • 개선된 리소스 활용
  • 쉬운 확장성 및 이식성
  • 간소화된 종속성 관리

Docker Exec 핵심

Docker Exec 명령어 이해

docker exec 명령어는 실행 중인 컨테이너와 직접 상호 작용하여 컨테이너 관리 및 문제 해결을 위한 강력한 메커니즘을 제공합니다. 중지 또는 재시작 없이 활성 컨테이너 환경 내에서 명령어를 실행할 수 있습니다.

graph LR A[Docker 호스트] --> |docker exec| B[실행 중인 컨테이너] B --> |명령어 실행| C[컨테이너 쉘]

일반적인 Docker Exec 시나리오

시나리오 명령어 예시 목적
대화형 Bash 세션 docker exec -it container_name /bin/bash 컨테이너 쉘 접근
단일 명령어 실행 docker exec container_name ls /app 특정 명령어 실행
루트 사용자로 실행 docker exec -u 0 container_name command 루트 권한으로 명령어 실행

실제 실행 예시

## 샘플 컨테이너 시작
docker run -d --name web_app nginx:latest

## 대화형 bash 세션 실행
docker exec -it web_app /bin/bash

## 컨테이너에 들어가지 않고 명령어 실행
docker exec web_app cat /etc/nginx/nginx.conf

## 여러 명령어 실행
docker exec web_app sh -c "apt update && apt install -y curl"

고급 실행 기법

## 실행 중인 컨테이너에 파일 복사
docker cp local_file.txt web_app:/container/path

## 백그라운드 프로세스 실행
docker exec -d web_app python3 background_script.py

## 특정 환경 변수로 명령어 실행
docker exec -e DEBUG=true web_app python3 script.py

컨테이너 상호 작용 패턴

Docker exec 는 다음과 같은 유연한 방법을 제공합니다.

  • 실행 중인 컨테이너 디버깅
  • 유지 관리 작업 수행
  • 컨테이너 구성 조사
  • 진단 명령어 실행
  • 컨테이너 환경 동적 관리

고급 컨테이너 기술

컨테이너 성능 최적화

성능 관리 (Performance management) 는 효율적인 컨테이너화된 애플리케이션에 필수적입니다. Docker 는 컨테이너 런타임 환경을 모니터링, 최적화 및 문제 해결하기 위한 다양한 기술을 제공합니다.

graph TD A[컨테이너 성능] --> B[리소스 모니터링] A --> C[런타임 구성] A --> D[네트워크 최적화]

리소스 관리 전략

기술 설명 구성
CPU 제한 컨테이너 CPU 사용량 제한 --cpus="1.5"
메모리 제약 메모리 할당량 제어 --memory=512m
스토리지 관리 컨테이너 디스크 공간 정의 --storage-opt size=10G

고급 Docker 런타임 구성

## CPU 및 메모리 제약 조건으로 컨테이너 실행
docker run -d \
  --cpus="2" \
  --memory="2g" \
  --name performance_app \
  nginx:latest

## 컨테이너 재시작 시도 제한
docker run -d \
  --restart=on-failure:3 \
  webapp:latest

디버깅 및 문제 해결 기술

## 컨테이너 상세 정보 확인

## 컨테이너 로그 확인

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

## 컨테이너 상태 확인
--health-interval=5s \
  webapp:latest

네트워크 구성 최적화

## 사용자 정의 브리지 네트워크 생성
docker network create --driver bridge custom_network

## 특정 네트워크에 컨테이너 연결
docker run -d \
  --network=custom_network \
  --network-alias=web_service \
  nginx:latest

컨테이너 런타임 보안

다음을 통해 보안 조치를 구현합니다.

  • 리소스 격리
  • 제한된 컨테이너 권한
  • 네트워크 분할
  • 런타임 취약점 스캔
  • 최소 이미지 크기

요약

Docker 는 소프트웨어 배포 방식에 변혁을 가져오며, 개발자들에게 일관되고 격리된 런타임 환경을 구축하기 위한 강력한 플랫폼을 제공합니다. 컨테이너 기본 사항, 설치 프로세스 및 필수 명령어를 숙달함으로써 전문가들은 애플리케이션 개발을 간소화하고, 리소스 효율성을 높이며, 환경 간 원활한 호환성을 달성할 수 있습니다. 이 튜토리얼은 학습자들에게 Docker 의 컨테이너화 기능을 효과적으로 활용하는 데 필요한 기본 지식을 제공합니다.