도커란? > 클라우드네이티브

본문 바로가기

[이론] 도커란?

필기자
2025-09-03 11:48 77 0

본문

IaaS, PaaS, SaaS는 클라우드 서비스의 세 가지 주요 모델.
  • IaaS (Infrastructure as a Service): 서버, 스토리지, 네트워크 같은 인프라 자원을 제공. 사용자가 운영 체제와 소프트웨어를 직접 설치하고 관리해야 함. 예: AWS EC2, Microsoft Azure, Google Cloud Compute Engine.
  • PaaS (Platform as a Service): 애플리케이션 개발에 필요한 플랫폼 제공. 사용자는 애플리케이션 개발에만 집중 가능, 인프라 및 플랫폼 관리는 제공자가 담당. 예: AWS Elastic Beanstalk, Google App Engine, Heroku.
  • AWS PaaS 서비스
    • Elastic Beanstalk
      • 애플리케이션 코드만 업로드하면 실행 환경 자동 제공
      • 다양한 언어 및 플랫폼 지원 (Java, Python, Node.js, PHP, .NET 등)
      • EC2, 로드밸런서, 오토스케일링, 모니터링 자동 관리
      • 배포 편의성 (코드 업로드 → 자동 빌드/배포/운영)
      • 버전 관리 및 롤백 지원
      • RDS, S3 등 AWS 서비스와 손쉬운 연동
Configuring AWS Elastic Beanstalk Environment | StarWind Blog
  • Google PaaS 서비스
    • Google App Engine
      • 코드 업로드만으로 애플리케이션 실행 환경 자동 제공
      • 다양한 언어 런타임 지원 (Python, Java, Node.js, Go 등)
      • 서버/OS/WAS 자동 관리 (생성, 패치, 모니터링, 로드밸런싱)
      • 자동 스케일링 (트래픽 변화에 따라 확장·축소)
      • 간단한 배포 (gcloud app deploy, 버전 관리, 롤백 지원)
      • GCP 서비스와 연동 (Datastore, SQL, Storage 등)
Monitoring and alerting latency | Google App Engine standard ...
 
  • SaaS (Software as a Service): 소프트웨어를 인터넷을 통해 서비스 형태로 제공. 사용자는 소프트웨어 설치나 관리 없이 웹 브라우저로 사용. 예: Google Workspace, Salesforce, Slack.
3529946166_8KEHAPhV_875ff644561480f535b40408c0afa9542e9aa191.png

클라우드 네이티브(Cloud Native)
  • 클라우드 환경을 최대한 활용하도록 애플리케이션을 설계·개발·운영하는 방식
  • 컨테이너 + MSA + 쿠버네티스 + DevOps 묶인 큰 개념
  • 클라우드 인프라 위에서 유연하게 확장·자동화·복구되는 서비스를 만드는 철학이자 방법론
클라우드 네이티브 구성 요소
  • 컨테이너 기반
    • 애플리케이션을 가볍게 패키징해서 어디서든 실행 가능하게 함 (대표: Docker).
  • 마이크로서비스 아키텍처(MSA)
    • 서비스를 작은 단위로 쪼개서 독립 배포/확장 가능하게 설계.
  • 동적 오케스트레이션
    • 쿠버네티스 같은 도구로 컨테이너를 자동 배치, 확장, 복구.
  • DevOps & 지속적 배포(CI/CD)
    • 빠른 업데이트, 자동화된 배포 파이프라인을 전제로 함.
도커(Docker)
  • 컨테이너 개념을 도입해서 데이터/프로그램을 격리시키는 기능을 제공하는 소프트웨어
  • 컨테이너 환경을 손쉽게 만들 수 있는 기능과 각 컨테이너를 손쉽게 동작할 수 있는 도커 엔진 제공
  • 애플리케이션를 위해 컨테이너로 패키징하고 배포하는 도구. IaaS와 PaaS에서 주로 활용됨
3529946166_X6gDLqkt_ebd494d8198545e92b9daaaf86ec4a919dc57e69.png

Linux® 컨테이너와 VM(Virtual Machine:가상 머신)은 IT 환경에서 격리된 패키징된 컴퓨팅 환경을 제공함.
  • 크기 및 패키징:
    • 컨테이너: 일반적으로 메가바이트 단위의 크기를 가지며, 애플리케이션과 그 실행에 필요한 최소한의 파일만 포함함. 종종 단일 기능을 수행하는 마이크로서비스를 컨테이너에 패키징함.
    • VM: 일반적으로 기가바이트 단위의 크기를 가지며, 자체 운영 체제(OS)를 포함함. 여러 리소스 집약적인 작업을 동시에 수행할 수 있으며, 전체 서버, OS, 데스크탑, 데이터베이스, 네트워크 등을 추상화, 분할, 복제, 에뮬레이션함.
  • 이동성 및 확장성:
    • 컨테이너: 경량화 속성과 공유 운영 체제(OS)로 인해 여러 환경 간에 쉽게 이동할 수 있으며, 확장이 상대적으로 쉬움.
    • VM: VM은 자체 운영 체제를 가지고 있어 이동성이 상대적으로 낮으며, 확장하기 위해서는 추가 리소스가 필요함.
  • 리소스 분리:
    • 컨테이너: 컨테이너는 호스트 OS 커널을 공유하므로 리소스 분리가 상대적으로 덜 격리됨.
    • VM: VM은 자체 운영 체제를 가지고 있어 더 격리된 환경을 제공하며, 리소스를 더욱 강력하게 분리할 수 있음.
  • 용도:
    • 컨테이너: 주로 미세한 서비스 또는 컨테이너 오케스트레이션 플랫폼(예: Docker, Kubernetes)을 통해 애플리케이션 배포와 관리에 사용됨.
    • VM: 다양한 용도로 사용되며, 여러 개의 VM을 호스팅하는 가상화 환경에서 서버 가상화, 개발 환경 분리, 테스트 및 백업 등 다양한 용도로 활용함.
  • 요약
  • ​​​​​컨테이너는 경량하고 이동성이 뛰어나며, 주로 애플리케이션 수준의 격리를 제공.
  • VM은 무거우며 격리가 강화되어 다양한 용도로 활용되지만 이동성이 상대적으로 낮음.

컨테이너와 도커 엔진
  • 컨테이너 : 운영체제 수준의 가상화 기술로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술
  • 도커 엔진 : 도커 소프트웨어의 본체이며, 도커 엔진이 있어야 컨테이너를 생성하고 실행시킬 수 있음

3529946166_oEBqyQD3_7faad2ef0a544aeefe151c236a37c90e9e87e71f.png


컨테이너를 만들려면 이미지가 필요
  • 이미지 : 컨테이너 실행에 필요한 파일과 설정값들을 포함하고 있고 컨테이너의 상태가 바뀌거나 삭제되어도 이미지는 변하지 않음
3529946166_9UvVORa3_169681a5c0506a19cf1d3acbe620b64f9c7407e8.png


도커는 리눅스 컴퓨터에서 사용
  • 리눅스 운영체제에서 사용하는 것을 전제로 만들어 졌기 때문에 반드시 리눅스 운영체제가 필요
  • 컨테이너 안에서 동작하는 프로그램도 리눅스용 프로그램
3529946166_Syj7iGXV_849b42e2fec3bb0b34284516887ee50611008da1.png


데이터나 프로그램을 독립된 환경에 격리해야 하는 이유
  • 데이터/프로그램이 격리되지 않으면 서로에게 영향을 줄 수 있고 서로에게 강한 의존성을 가질 가능성이 있음
  • 공유하는 프로그램, 파일, 라이브러리 등을 한 개의 프로그램만을 위해 수정하게 되면 오류 발생 가능성이 있음
  • 의존성 충돌(Dependency Conflict)
    • 시스템 A는 PHP 7 환경을 필요로 하고, 시스템 B는 PHP 8 환경을 필요로 함.
    • 동일한 서버(시스템 C)에 PHP 7과 PHP 8을 동시에 설치하면 라이브러리나 설정 파일 충돌로 인해 한쪽 서비스가 정상적으로 동작하지 않을 수 있음.
    • 따라서 각 서비스를 컨테이너/VM 등 격리된 환경에 배치하면 서로 다른 버전의 PHP를 안전하게 운용할 수 있음.
3529946166_TNcF784G_54ce6710b8b3f3446cd626555dccb507889e2290.png



프로그램의 격리
  • 도커 컨테이너를 사용해 프로그램을 격리하면 여러 프로그램이 한 서버에 실행되면서 발생하게 되는 문제들을 대부분을 해결할 수 있음
    • ​​​​​​​시스템 A는 PHP 7(그림 예시, C v1.0), 시스템 B는 PHP 8(그림 예시, C v2.0) 환경을 필요로 함.  
    • 동일 서버에서 두 버전을 함께 설치하면 라이브러리·설정 충돌이 발생할 수 있음.  
    • 컨테이너로 분리하면 각 버전을 독립적으로 유지해 충돌 없이 실행 가능함.  
3529946166_57jNXo28_76365e13f2b28b0187ef9e61680e72aceadc0e90.png



자유로이 옮길 수 있는 컨테이너
  • 도커만 설치돼 있으면 운영체제가 달라도 컨테이너를 옮길 수 있음
  • 도커를 이용하면 물리적 환경의 차이, 서버 구성의 차이를 무시할 수 있으므로, 운영 서버와 개발 서버의 환경 차이로 인한 문제를 방지할 수 있음
3529946166_yWSJ8hTL_0655ac9b2812e12c8ad9102505d0c1da3ef11c9c.png



도커의 구조
  • 물리 서버 > 리눅스 운영체제 > 도커 엔진 > 컨테이너
  • 도커에서는 컨테이너 속에 운영체제의 주변 부분이 들어 있어 프로그램의 명령을 전달받고 이를 커널에 전달하는 구조로 되어 있음
3529946166_0xI4f8Zn_a6539754117b59e5acdfa5d0912fa5030a4164d9.png


윈도우와 macOS에서 도커 구동하기
  • 가상 환경 위에 리눅스 운영체제를 설치하고 그 위에서 도커를 실행
  • 도커를 실행하는데 필요한 리눅스 운영체제를 포함하는 패키지를 설치하여 실행
3529946166_BZW4FCLe_4cd67990d7bee24a02717199b15cd7d41e0f9aa2.png


이미지와 컨테이너 : 이미지
  • 컨테이너의 설계도 역할 수행, 컨테이너를 생성하는데 사용
  • 이미지를 사용하면 동일한 컨테이너를 여러 개 생성 가능
3529946166_sN9tOBFx_ed8fbe7c7c878f7f6091e7707391e9735b5148dd.png


컨테이너로도 이미지를 만들 수 있음
3529946166_PuQ3rmzX_3e86907870346d7ebfcee5a4f5f3465de2daed26.png

이미지를 이용한 컨테이너 이동
3529946166_1UNC5c8O_3d083f013469432cef858136c24ab278ec9b91dc.png



도커 허브와 도커 이미지
  • 공개된 컨테이너 이미지가 모여 있는 곳, 원하는 이미지를 다운받을 수 있고 누구든지 이미지를 등록하고 공유
3529946166_KzkvWHFM_855674dc9f8028d42e74655bf3755aeec702dea6.png


도커의 장점
  • 한 대의 물리 서버에 여러 대의 서버를 띄움
  • 서버 관리가 용이함
  • 다루기 쉬움
도커의 단점
  • 호스트 서버에 문제가 생기면 모든 컨테이너에 영향을 미침
도커의 주 용도
  • 동일한 개발 환경 제공
  • 새로운 버전의 테스트
  • 동일한 서버가 여러 대 필요한 경우







 

댓글목록0

등록된 댓글이 없습니다.
게시판 전체검색