블스뜸 2025. 4. 30. 11:20

도커란?
애플리케이션을 격리된 환경(컨테이너) 안에서 실행하고 관리할 수 있게 해주는 linux기반 플랫폼
"내 컴퓨터에서는 잘 되는데, 왜 서버에서는 안 될까?" 하는 상황 - 이는 개발 환경과 운영 환경의 차이 때문에 발생
Docker는 이러한 환경 차이 문제를 해결하기 위해 등장

Docker의 핵심 개념:

  • 컨테이너 (Container): 애플리케이션과 그 실행에 필요한 모든 것(코드, 런타임, 시스템 도구, 라이브러리, 설정 등)을 하나로 묶은 가볍고 이식 가능한 패키지. 컨테이너는 호스트 운영체제와 격리되어 독립적으로 실행되기 때문에, 어떤 환경에서든 동일하게 작동하는 것을 보장. 마치 택배 상자에 필요한 물건을 모두 담아서 어디든 안전하게 배송하는 것과 비슷하다.
  • 이미지 (Image): 컨테이너를 만들기 위한 읽기 전용 템플릿. 애플리케이션과 그 의존성들을 담고 있는 일종의 설계도와 같습니다. Dockerfile이라는 파일에 정의된 설정대로 빌드되어 이미지가 만들어진다. 이 이미지를 기반으로 여러 개의 동일한 컨테이너를 생성할 수 있다.
  • Dockerfile: 이미지를 만들기 위한 설정 파일. 어떤 운영체제를 사용할지, 어떤 프로그램과 라이브러리를 설치할지, 애플리케이션 코드를 어디에 둘지 등 컨테이너를 구성하는 모든 단계를 명시한다.
  • Docker Hub: Docker 이미지를 공유하고 관리하는 공개 레지스트리. 마치 앱 스토어처럼 다양한 운영체제, 프로그래밍 언어, 데이터베이스 등의 이미지를 쉽게 찾아 다운로드하고 사용할 수 있다. 개인 또는 기업이 자신만의 이미지를 올려서 공유하거나 비공개로 관리할 수도 있다.
  • Docker Engine: Docker 이미지를 빌드하고, 컨테이너를 실행 및 관리하는 핵심 소프트웨어. 클라이언트-서버 아키텍처로 이루어져 있으며, Docker CLI(명령줄 인터페이스)를 통해 Docker Engine에 명령을 내린다.

Docker를 사용하는 이유 (장점):

  • 환경 일관성: 개발, 테스트, 운영 환경을 동일하게 유지하여 "내 컴퓨터에서는 잘 되는데..." 문제를 해결한다.
  • 빠른 배포 및 확장: 미리 만들어진 이미지를 사용하여 애플리케이션을 빠르게 배포하고 확장할 수 있다.
  • 자원 효율성: 컨테이너는 가상 머신(VM)보다 훨씬 가볍고 자원을 효율적으로 사용한다. 하나의 호스트 OS에서 여러 개의 컨테이너를 실행할 수 있다.
  • 격리성: 컨테이너는 서로 격리되어 실행되므로, 하나의 컨테이너에서 문제가 발생해도 다른 컨테이너에 영향을 주지 않는다.
  • 이식성: Docker 이미지는 다양한 환경(Linux, macOS, Windows, 클라우드 등)에서 실행될 수 있다.
  • DevOps 워크플로우 개선: CI/CD (Continuous Integration/Continuous Delivery) 파이프라인을 구축하는 데 용이하여 개발과 운영의 협업을 증진시킨다.

Docker의 활용 예시:

  • 웹 애플리케이션 배포: 웹 서버, 애플리케이션 서버, 데이터베이스 등을 각각의 컨테이너로 묶어서 배포하고 관리.
  • 마이크로서비스 아키텍처: 작은 기능 단위의 서비스를 각각의 컨테이너로 만들어 독립적으로 배포하고 확장.
  • 테스트 환경 구축: 다양한 환경을 쉽게 구성하고 테스트를 자동화.
  • 로컬 개발 환경 구축: 개발에 필요한 다양한 도구와 환경을 컨테이너로 쉽게 구성하여 개발 환경 설정을 간소화.