[cloud] 컨테이너와 도커 컨테이너

Updated:

Categories:

Tags:

📌 개인적인 공간으로 공부를 기록하고 복습하기 위해 사용하는 블로그입니다.
정확하지 않은 정보가 있을 수 있으니 참고바랍니다 :😸
[틀린 내용은 댓글로 남겨주시면 복받으실거에요]

클라우드 : 컨테이너와 도커 컨테이너

1. 컨테이너(Container)

컨테이너는 애플리케이션과 그 종속성(라이브러리, 환경 설정, 실행 파일 등)을 하나의 패키지로 묶어, 다양한 환경에서 일관되게 실행할 수 있도록 만든 가볍고 독립적인 실행 단위이다.

컨테이너의 특징

  1. OS 공유:
    • 컨테이너는 호스트 운영체제를 공유하므로 VM(가상머신)과 달리 OS가 중복 설치되지 않아 경량이고 빠르게 실행
  2. 격리(Isolation)
    • 각 컨테이너는 다른 컨테이너와 분리된 환경을 갖지만, 호스트 OS가 손상되면 영향을 받을 수 있다.
  3. 이식성
    • 특정 OS/라이브러리/환경에 종속되지 않고, 컨테이너 이미지를 어느 환경에서든 동일하게 실행 가능

2. 도커(Docker)

  • 도커(Docker)는 컨테이너를 손쉽게 만들고, 배포하고, 실행할 수 있도록 종합적인 기능을 제공하는 플랫폼

도커의 주요 요소

  1. 도커파일(Dockerfile)
    • 컨테이너 이미지를 생성하기 위한 명령어환경 설정을 적어 놓은 스크립트 파일
    • 예: 어떤 OS 기반으로, 어떤 라이브러리를 설치하고, 어떤 포트를 열고, 어떤 명령을 실행할지 등
  2. 도커 이미지(Docker Image)
    • Dockerfile을 빌드하면 생성되는 불변(Immutable) 상태
    • 컨테이너 실행에 필요한 모든 정보를 포함(코드, 라이브러리, 설정)
    • 한 이미지에서 여러 개의 컨테이너를 똑같이 만들어 실행 가능
  3. 도커 컨테이너(Docker Container)
    • 이미지를 실행시킨 상태
    • 실행 시 호스트 컴퓨터와 네트워크, CPU, 메모리 등을 연결해 애플리케이션이 동작
    • 상태 변화는 컨테이너 내부에서만 발생하며, 이미지는 영향을 받지 않음

3. 도커 이미지 생성 및 실행 흐름

  1. Dockerfile 작성

    1
    2
    3
    4
    5
    
     FROM ubuntu:20.04
     RUN apt-get update && apt-get install -y nodejs
     COPY . /app
     WORKDIR /app
     CMD ["node", "index.js"]
    
    • 예: Node.js 설치, 앱 소스코드 복사, 실행 명령 지정 등
  2. 도커 이미지 빌드

    1
    
     docker build -t my-node-app .
    
    • 이 과정을 통해 my-node-app이라는 도커 이미지 생성
  3. 도커 컨테이너 실행

    1
    
     docker run -d -p 3000:3000 my-node-app
    
    • d는 백그라운드 실행, p는 포트 매핑
    • 컨테이너가 실행되면 Node.js 애플리케이션이 3000번 포트에서 동작

4. 도커의 장점과 한계

장점

  1. 경량화된 배포
    • VM처럼 무겁지 않고, 빠르게 생성·종료 가능
  2. 일관된 환경
    • 개발, 스테이징, 프로덕션 등 어떤 환경에서도 동일하게 동작
  3. 확장성
    • 여러 컨테이너를 손쉽게 배포·스케일링
    • Kubernetes, Docker Swarm 같은 오케스트레이션 도구와 결합 시 강력

한계

  1. 호스트 OS 의존성
    • 호스트와 커널을 공유하므로, 커널 레벨 문제나 보안 이슈 발생 시 다른 컨테이너에도 영향
  2. 운영체제 선택 폭
    • Docker는 리눅스 기반 컨테이너를 기본으로 하며, 윈도우 컨테이너도 가능하지만 제약이 있을 수 있음

5. 도커 활용 사례

  1. 개발 환경 통일
    • 팀원마다 다른 OS를 쓰더라도, Docker 이미지만 있으면 모두 동일 환경에서 개발 가능
  2. CI/CD 파이프라인
    • 코드 푸시 시 Docker 이미지를 자동 생성·테스트·배포
  3. 마이크로서비스 아키텍처
    • 각 서비스별로 독립된 컨테이너로 분리해 관리

실제 예시

  • 구글: 2014년 발표에 따르면, 구글 내부의 대부분 서비스가 컨테이너 기술로 구동되고 매주 약 20억 개 이상의 컨테이너가 운영
  • AWS ECS/Fargate, Azure Container Instances 등: 클라우드에서 컨테이너 배포 자동화 제공

6. 컨테이너 vs 가상머신(VM)

항목 컨테이너(Container) 가상머신(Virtual Machine)
운영체제 호스트 OS 공유 OS를 독립적으로 설치(게스트 OS)
부팅 속도 매우 빠름 OS 부팅 시간이 필요(느림)
자원 효율성 경량화(라이브러리만 추가) 무겁고 자원 소모가 큼
격리 수준 커널을 공유하므로 완벽한 격리는 아님 가상화된 하드웨어로 완벽한 격리
사용 예 Docker, Kubernetes, Containerd 등 VMware, VirtualBox, Hyper-V 등

“컨테이너는 경량화된 독립 실행 환경, 도커는 그 환경을 손쉽게 다룰 수 있게 해주는 도구”

도커 컨테이너 기반으로 서비스하는 방식은 클라우드 시대에 필수적인 스킬이며, Kubernetes와 같은 컨테이너 오케스트레이션 솔루션과 함께 사용하면 자동화된 대규모 배포 환경을 구축할 수 있다.





cloud 카테고리 내 다른 글 보러가기

Leave a comment