Linux 에서 Docker 컨테이너 생성 및 관리 방법

DockerBeginner
지금 연습하기

소개

이 포괄적인 Docker 컨테이너 튜토리얼은 개발자 및 IT 전문가에게 컨테이너 기본 원리를 심층적으로 다루며, 컨테이너화 기술의 핵심 원리를 탐구합니다. Docker 의 아키텍처, 라이프사이클 관리 및 운영 전략을 이해함으로써 학습자는 다양한 컴퓨팅 환경에서 현대 소프트웨어 애플리케이션을 구축, 배포 및 관리하는 실질적인 기술을 습득하게 됩니다.

Docker 컨테이너 기본 개념

Docker 컨테이너란 무엇인가요?

Docker 컨테이너는 애플리케이션 실행에 필요한 모든 요소 (코드, 런타임, 시스템 도구, 라이브러리 및 설정) 를 포함하는 경량의 독립 실행형 소프트웨어 패키지입니다. 컨테이너화를 통해 개발자는 다양한 컴퓨팅 플랫폼에서 일관된 환경을 생성할 수 있습니다.

컨테이너 아키텍처 개요

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

주요 컨테이너 특징

특징 설명
격리 컨테이너는 독립적으로 전용 리소스를 사용하여 실행됩니다.
이식성 다양한 환경에서 일관되게 배포될 수 있습니다.
효율성 기존 가상 머신에 비해 경량입니다.
확장성 수평적으로 쉽게 복제 및 확장할 수 있습니다.

기본 Docker 컨테이너 명령어

Ubuntu 22.04 는 간편한 Docker 컨테이너 관리를 제공합니다.

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

## 새로운 컨테이너 생성 및 실행
docker run -it ubuntu:latest /bin/bash

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

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

## 실행 중인 컨테이너 중지
docker stop [container_id]

컨테이너 라이프사이클 관리

컨테이너는 생성, 실행, 일시 중지, 중지 및 삭제 등 여러 상태를 거칩니다. 각 상태는 컨테이너의 운영 라이프사이클에서 특정 단계를 나타냅니다.

컨테이너화의 장점

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

  • 일관된 개발 환경
  • 더 빠른 배포 프로세스
  • 감소된 인프라 복잡성
  • 개선된 리소스 활용
  • 향상된 애플리케이션 이식성

기술 구현 예시

## 간단한 웹 애플리케이션 컨테이너 생성
docker run -d -p 8080:80 nginx:latest

이 명령어는 Docker 컨테이너를 사용하여 웹 서버를 얼마나 빠르게 배포할 수 있는지 보여주며, 이 기술의 간편성과 효율성을 강조합니다.

컨테이너 라이프사이클 관리

컨테이너 상태 전이

Docker 컨테이너는 운영 라이프사이클 동안 여러 상태를 거치며, 실행 및 관리의 다양한 단계를 나타냅니다.

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

컨테이너 상태 관리 명령어

상태 Docker 명령어 설명
생성 docker create 시작하지 않고 컨테이너를 준비합니다.
시작 docker start 중지된 컨테이너를 시작합니다.
중지 docker stop 실행 중인 컨테이너를 정상적으로 종료합니다.
일시 중지 docker pause 컨테이너 프로세스를 일시 중지합니다.
재시작 docker restart 컨테이너를 중지하고 즉시 재시작합니다.

재시작 정책

Ubuntu 22.04 Docker 구성은 여러 재시작 전략을 지원합니다.

## 항상 재시작 정책
docker run -d --restart=always nginx:latest

## 오류 발생 시에만 재시작
docker run -d --restart=on-failure nginx:latest

## 최대 재시도 횟수로 재시작
docker run -d --restart=on-failure:3 nginx:latest

컨테이너 복구 메커니즘

재시작 정책은 자동 컨테이너 복구를 가능하게 합니다.

  • 예기치 않은 컨테이너 종료 처리
  • 서비스 가용성 유지
  • 구성 가능한 재시도 메커니즘
  • 다양한 복구 시나리오 지원

실제 라이프사이클 관리 예시

## 컨테이너 라이프사이클 모니터링
docker events

## 컨테이너 상태 검사
docker inspect [container_id]

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

이러한 명령어는 포괄적인 컨테이너 상태 추적 및 관리 기능을 제공합니다.

고급 Docker 작업

컨테이너 건강 모니터링

Docker 는 컨테이너 성능 및 안정성을 추적하는 정교한 메커니즘을 제공합니다.

graph TD A[컨테이너 건강 체크] --> B[준비성 프로브] A --> C[활성 프로브] B --> D[서비스 가용성] C --> E[자동 복구]

건강 체크 구성

## 사용자 지정 건강 체크 구성
HEALTHCHECK --interval=5s --timeout=3s \
  CMD curl -f || exit 1

성능 최적화 전략

전략 설명 영향
리소스 제한 CPU/메모리 제약 리소스 고갈 방지
다단계 빌드 이미지 크기 축소 배포 효율 향상
볼륨 관리 지속적인 데이터 처리 데이터 지속성 강화

컨테이너 확장 기법

## Docker Swarm을 이용한 수평 확장
docker service create --replicas 5 nginx:latest

## 동적 확장
docker service scale web=10

고급 네트워크 구성

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

## 특정 네트워크에 컨테이너 연결
docker run --network=isolated_network nginx:latest

성능 모니터링 명령어

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

## 리소스 사용량 분석
docker system df

## 컨테이너 성능 지표
docker top [container_id]

컨테이너 보안 강화

## 제한된 권한으로 컨테이너 실행
docker run --read-only nginx:latest

## 컨테이너 루트 액세스 비활성화
docker run --security-opt=no-new-privileges nginx:latest

요약

Docker 컨테이너화는 소프트웨어 개발 및 배포에 혁명적인 접근 방식을 제시하며, 전례 없는 유연성, 효율성 및 이식성을 제공합니다. 컨테이너 관리 기술을 숙달함으로써 개발자는 일관성 있고 확장 가능하며 가벼운 애플리케이션 환경을 만들 수 있습니다. 이는 개발 워크플로우를 간소화하고 인프라 복잡성을 줄이는 데 도움이 됩니다. 성공적인 컨테이너화의 핵심은 컨테이너 라이프사이클을 이해하고 Docker 의 강력한 도구 세트를 활용하며 리소스 관리 및 애플리케이션 격리에 대한 최상의 관행을 구현하는 데 있습니다.