KimYHG 2025. 2. 23. 17:46

1. Docker를 왜 사용할까?

 Docker를 통해 서버를 표준화하고 같은 환경에서 테스트 및 배포 테스트를 진행할 수 있다.

 => 어떤 서버에서도 표준화된 배포를 구성할 수 있다.

 => 테스트로 검증된 자동화 배포를 사용하여 실패 확률을 낮출 수 있다.

 

2. Docker란?

  • 리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트 => 툴
    => 응용 프로그램들을 컨테이너화하는 과정을 직접하지 않아도 된다.
  • 이미지 기반 배포 모델을 제공
  • 컨테이너 환경 내에서 애플리케이션 배포를 자동화함
  • 호스트 OS kernel을 바로 사용한다.
  • Docker Engine이 호스트 OS와 여러 애플리케이션을 연결해주는 역할을 한다.
  • linux 일반 계정에서 실행할 수 없음
  • Docker Swarm : 도커 컨테이너의 네이티브 클러스터링 기능을 제공, 도커 엔진을 하나의 가상 도커 엔진으로 탈바꿈시킴
  • 이미지 가상화에서 사실상 표준의 위치

Docker와 VM의 차이

 

 

  • Docker Image : Docker의 packaging한 결과, 즉, 묶음 프로그램 자체
    Container 런타인에 필요한 바이너리, 라이브러리 및 설정 값 등을 포함하고, 변경되는 상태값을 가지고 있지 않음
    (Immutable, Read-Only)
    필요한 파일만 포함하고 있기 때문에, 용량이 작음
    운영체제에서 필요한 network, volumn mount, IPC 연결, process 등까지 패키징
    거의 vm 가상화 수준까지 패키징
  • Docker Container : Docker Image를 실행한 프로세스
    소프트웨어와 스프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템
    리눅스에서 운영 체제 수준 가상화의 추상화 및 자동화 계층을 추가적으로 제공
    cgroups와 같은 커널, 리눅스 커널, 또 aufs와 같은 유니언 가능 파일 시스템의 리소스 격리 기능을 사용하여 프로세스를 분리함으로써 독립적으로 실행될 수 있도록 함
    이를 통해 독립적인 "컨테이너" 하나의 리눅스 인스턴스 안에서 실행할 수 있게 함
    여러 프로세스와 애플리케이션을 서로 개별적으로 실행하여 인프라를 더 효과적으로 활용하고 개별 시스템을 사용할 때와 동일한 보안을 유지할 수 있음
    ps -ef | grep [docker container명] 명령어를 입력하면 실행중인 container를 확인할 수 있고 process임을 알 수 있음
  • 도커라이징(dockerizing) : Docker 컨테이너를 사용하여 응요프로그램을 패킹(packing), 배포(deploying), 실행(running)하는 전 과정
  • Dockerfile : 코드의 형태로 인프라를 구성하는 방법을 텍스트 형식으로 저장해 놓은 파일
  • Docker build : Dockerfile 및 컨텍스트로부터 이미지를 빌드하는 Docker 명령


3. Docker Compose란?

  • 멀티 컨테이너 도커 애플리케이션을 정의하고 실행하는 도구
  • yaml파일을 사용하여 애플리케이션의 서비스를 구성
  • 하나의 명령을 가지고 docker-compose.yml 파일 내의 모든 컨테이너의 생성 및 시작 프로세스를 수행
  • 컨테이너 실행에 사용되는 옵션과 컨테이너 사이의 의존성을 정의하고 컨테이너 실행 및 설정 관리를 함