클라우드 배포 2

j0yy00n0·2025년 12월 3일

2025.05.22

Docker

Docker 개념

개발자가 애플리케이션을 어디서든지 구축(Build), 공유(Share), 실행(Run), 검증(Verify)할 수 있도록 도와주는 도구

  • 개발 도구, 서비스, 신뢰할 수 있는 콘텐츠, 자동화 도구 모음을 제공하여 이를 개별적으로 또는 함께 사용함으로써 안전한 애플리케이션의 제공 속도를 높일 수 있다.

Docker 특징

  • 컨테이너(container)라고 부르는 운영체제 수준의 가상화 방식으로 소프트웨어를 배포하는 방식을 사용하는 Paas 제품을 일컫는다.
  • Paas : Platform as a Service 의 약자로, 애플리케이션, 데이터 단계만 사용자가 책임지고 관리하는 서비스
  • 고래 : 애플리케이션을 다양한 환경에 빠르고 유연하게 배포하고 실행하는 도커의 기능을 상징
  • 컨테이너 : 도커 컨테이너를 나타내며 서로 독립된 애플리케이션 환경을 상징
  • 다양한 개발(dev) 및 운영(ops) 환경에서 도커를 사용해 각종 소프트웨어를 무료로 편하게 배포

Docker 의 구성요소

Docker Manuals
Dockerfile, DockerImage, DockerContainer, DockerComose 등 구성요소가 있다.

Docker Image

Docker Image

  • 애플리케이션을 실행하는데 필요한 운영 체제, 바이너리 실행 파일 및 라이브러리 등 모든 파일과 설정을 포함한 read-only 템플릿
  • Java 나 JS 등에서 프로그램 상으로 구현하고자 하는 무언갈르 추상화 시켜서 CLass 로 설계하고, 이 설계본을 기반으로 인스턴스를 찍어냈던 것 처럼 Class - Docker Image, 설계도를 참조해 탄생한 인스턴스 - Docker Container 라고 보면 된다.
  • 도커 이미지는 보통 Dockerfile을 기반으로 빌드되며, 이 Dockerfile 은 이미지 생성 시 필요한 명령어가 계층별로 작성되어 있다.
  • Docker 이미지는 이러한 계층 구조 덕분에 특정 부분만 변경해도 해당 부분만 다시 빌드되므로 경량화와 빠른 배포가 가능하다.
  • 다양한 운영 환경 간에 일관성을 보장해주며 다양한 시스템에 쉽게 배포할 수 있도록 해준다.
  • 애플리케이션을 만들게 되면 그 애플리케이션들을 사진처럼 Image화 시킨다 -> 정적파일
  • 이 정적파일을 실행 시키는 것이 Docker Container

Docker Container

Docker Container

  • Docker Image 를 실제로 실행 가능한 단위로 변환한 것
  • 각 컨테이너는 격리된 환경에서 작동하며, 필요한 네트워크와 스토리지 등의 리소스를 할당 받아 애플리케이션을 구동한다.
  • 여러번 실행해도 늘 일관된 실행 환경과 결과를 보장하며, 필요 시 이미지를 기반으로 여러 개의 컨테이너를 생성해 확장성과 유지 보수성을 확보할 수 있다.
  • 특정 시점의 컨테이너의 상태를 이미지로 저장하여 배포 단계에서 동일한 상태로 재생성할 수 있어서 운영의 안정성을 강화한다.

Dockerfile

Dockerfile

  • Docker Image 생성 시 필요한 설정과 명령어를 담고 있는 텍스트 파일
  • 종속성 설치, 애플리케이션 실행 명령, 환경 변수 설정 등을 지정할 수 있으며, 이를 바탕으로 개발자는 Docker Image 를 여러 환경에 일관되게 배포할 수 있다.
  • Dockerfile 을 사용한 이미지 빌드는 자동화된 애플리케이션 배포의 핵심으로, 한 번 정의된 구성을 통해 여러 인스턴스의 일관성을 유지할 수 있게 해준다.

Docker Network

Docker Network

  • Docker Containers 이 서로 통신할 수 있는 가상 네트워크를 설정하는 기능
  • 설정 가능한 네트워크 타입에는 브리지(bridge), 호스트(host), 오버레이(overlay) 네트워크 등이 있으며, 각 네트워크는 컨테이너 간 통신 범위와 고유 네트워킹 속성을 달리하여 제공

Docker Volume

Docker Volume

  • Docker Container 의 데이터를 지속적으로 저장하는 스토리지 솔루션
  • 도커 디폴트 설정 상으로 컨테이너 내에서 생성되고 관리되는 모든 데이터는 컨테이너를 종료하는 순간 같이 사라지는 휘발성이지만,
    도커 볼륨을 사용하면 호스트 OS의 특정 파일 시스템 상의 경로와 컨테이너의 파일 시스템 경로를 링크해 동기화 시킬 수 있다. -> 바인드(Bind)
    향후 컨테이너를 재생성 하거나 재실행해도 호스트OS 상에서 데이터가 존재하므로 컨테이너 상의 데이터를 영속시킬 수 있다.
  • 컨테이너의 Life-cycle 과 무관하게 중요하고 값 비싼 데이터를 유지하고자 할 때 적용
  • 애플리케이션 운영 시 생성되는 각종 사용자 데이터 및 정적 파일들, 특히 데이터베이스 데이터를 저장하고자 할 때 반드시 사용해야 한다.

Docker Hub

Docker Hub

  • Docker의 공식 이미지 저장소
  • 전 세계의 개발자들이 만든 컨테이너 이미지를 저장하고 고유할 수 있는 공용 플랫폼 -> GitHub 와 비슷한 역할 및 서비스를 제공
  • 각종 어플리케이션의 이미지를 빠르게 가져오고 (docker pull), 자신의 이미지를 업로드(docker push) 하여 팀이나 커뮤니티와 공유할 수 있다.
  • Docker Hub 에는 인증된 공식 이미지와 커뮤니티 이미지가 포함되어 있어 다양한 어플리케이션을 간편하게 구축할 수 있다.
    ex)
    JDK 설치된 이미지 -> eclipse-temurin-Official Image|Docker Hub
    Node.js -> node-Official Image|Docker Hub
    MySQL -> mysql-Official Image|Docker Hub

Docker Compose

Docker Compose

  • 다중 컨테이너 애플리케이션을 정의하고 실행하기 위한 도구
  • YAML 파일(compose.yml) 에 각 컨테이너 간의 구성 정보와 관계를 정의해 여러 개의 서비스를 단 하나의 명령으로 실행할 수 있도록 한다.
  • ex) 웹 서버, 백엔드 서버, 데이터베이스가 연결된 애플리케이션을 하나의 설정 파일로 정의하면, docker-compose up 명령어 하나로 각각 3개의 애플리케이션 실행 환경이 담긴 컨테이너 3개 전체를 한 번에 실행할 수 있어 개발 및 테스트 환경에서 굉장히 유용

profile
잔디 속 새싹 하나

0개의 댓글