(참고: Fastcampus 강의, 강민철의 인공지능 시대 필수 컴퓨터 공학 지식)

7. 컨테이너

Contents

  1. 컨테이너란
  2. 컨테이너 이미지 & 실행
  3. 컨테이너 레지스트리
  4. 도커 실습 1
  5. 도커 실습 2
  6. 컨테이너 사용하는 이유
  7. 컨테이너 오케스트레이션


(1) 컨테이너란

애플리케이션이 “독립된 실행공간”을 확보하도록 하는 “OS 수준”“가상화 기술”

  • (1) “독립된 실행공간”
    • 독립된 실행을 위해, 자원을 격리함
    • 코드 실행에 필요한 요소 (라이브러리 등)을 묶음
  • (2) “OS 수준”
    • 각 컨테이너는 “같은 호스트 OS” 커널을 공유
  • (3) “가상화 기술”
    • 다양한 컴퓨팅 환경에서도, 일관되게 실행할 수 있도록하는 가상 실행 환경


대표적인 예시) docker, lxc

figure2


(2) 컨테이너 이미지 & 실행

  • 컨테이너: 컨테이너 이미지로 생성

  • 컨테이너 이미지: 애플리케이션 실행에 필요한 모든 요소가 포함된 패키지

  • 컨테이너 실행: 컨테이너 이미지 기반으로 컨테이너 생성 후, 격리된 환경에서 애플리케이션 구동

figure2


(3) 컨테이너 레지스트리

컨테이너 이미지를 저장/관리/배포하는 저장소

  • public & private으로 나뉨


대표적 예시) Docer hub (https://hub.docerk.com)


컨테이너 이미지를..

  • Push = 업로드
  • Pull = 다운로드


(4) 도커 실습 1

docker pull ubunti:22.04 # (1) pull
docker images # (2) 가지고 있는 docker image 목록 확인
docker run --rm -it ubuntu:22.04 /bin/bash # (3) 컨테이너 실행
cat /etc/os-release # (4) 지금 실행한 컨테이너 정보 확인
exit # (5) 컨테이너 종료
  • docker run: 컨테이너 실행
  • --rm: 컨테이너 실행 후 삭제
  • -it: interactive 모드
  • /bin/bash: 컨테이너 실행 후, bash 실행


(5) 도커 실습 2

컨테이너 안에서 실행할 예시 애플리케이션

mkdir pyftrace_docker
cd pyftrace_docker
touch fooobar.py # 생성 후 편집


  1. 도커 이미지 생성하기
  • Dockerfile: 컨테이너 이미지 생성을 위한 파일
# (1) Base Image: 가벼운 python 3.9
FROM python:3.9-slim

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

# (3) 현재 디렉터리의 모든 파일을, 컨테이너의 /app 디렉토리로 복사
COPY . . 

# (4) pyftrace 설치
RUN pip install pyftrace

# (5) 컨테이너 시작 시, 실행할 명령어
CMD ['pyftrace','foobar.py']


  1. Dockerfile로 이미지 만들기
docker build -t pytrace-image .
docker images
  • -t: 이미지 태그
  • .: 현재 디렉토리 내에 있는 Dockerfile 기반으로 이미지 생성


  1. 이미지로 컨테이너 실행하기
docker run --rm pftrace-image


(6) 컨테이너 사용하는 이유

  • 경량 가상화: 가상 머신 (VM)보다 낮은 overhead로 격리된 환경 생성 가능
  • 효율적 배포: 이미지만 있으면, 쉽게 컨테이너 찍어낼 수 있음
  • 일관된 실행 환경: 필요한 요소만 골라서 격리된 환경에서 실행
  • 플랫폼 독립성: 다양한 운영환경에서 동일한 동작


(7) 컨테이너 오케스트레이션

많은 컨테이너를 효율적으로 관리하는 방법

  • e.g., 쿠버네티스 (kubernetes, k8s) , 도커 스웜 (docker swarm)


주요 작업

  • 자동화된 배포 및 관리: 컨테이너 생성, 시작, 중지 및 재시작 등의 작업을 자동으로 수행
  • 확장 관리: 애플리케이션 부하에 따라 컨테이너 수를 동적 조절하여 자원을 효율적으로 활용
  • 네트워킹: 컨테이너 간의 통신을 관리
  • 가용성 관리 및 복구: 장애 발생 시, 컨테이너를 자동으로 재배치/재시작, 서비스 지속성 보장


실습

# (1) swarm 초기화
docker swarm init

# (2) 서비스 생성
docker service create \
	--name logger \
	-- replicas 3 \
	alpine \
	sh -c "while true; do echo Hello from replica \$(hostname) at \$(date); sleep 5; done"
  • docker service create: 서비스 생성
    • docker swarm은 “서비스” 단위로 컨테이너를 관리한다
  • --name logger: 서비스 이름을 “logger”로 지정
  • --replicas 3: 서비스의 복제본을 3개 (=컨테이너 3개)로 실행
  • alpine: 실행 이미지
  • sh -c "...": 컨테이너에서 실행할 명령


# (1) 서비스 목록 확인
docker service ls

# (2) 아까 만든 "logger" 서비스의 상태/컨테이너 목록 확인
docker service ps logger

# (3) 로그 확인
docker service logs -f logger # 5chdp g

# (4) scale up & down
docker service scale logger=5 # 
docker service scale logger=2

# (5) 서비스 삭제 및 swarm 종료
docker service rm logger
docker swarm leave --force

Categories: ,

Updated: