Docker

애플리케이션의 배포, 확장 및 관리를 자동화하기 위해 설계된 오픈 소스 플랫폼

👉 컨테이너라고 부르는 애플리케이션 자동화 기술을 쉽게 사용할 수 있게 고안됨
👉 애플리케이션이 격리된 환경에서 실행될 수 있게 함

  • 컨테이너 : 소프트웨어를 실행하는 데 필요한 모든 것을 포함하는 경량의 독립 실행형 패키지 (코드, 런타임, 시스템 도구, 라이브러리 및 설정 등)

  • 이미지 : 컨테이너를 생성하는데 사용되는 불변 템플릿, 특정 시점의 컨테이너 스냅샷

  • Dockerfile : 도커 이미지를 빌드하기 위한 일련의 명령어가 포함된 텍스트 파일

  • Docker Hub (public) : 도커 사용자가 컨테이너 이미지를 찾고 공유할 수 있는 클라우드 기반 저장소

  • 볼륨 : 컨테이너의 파일 시스템 외부에 데이터를 저장하는 데 사용할 수 있는 영구 저장소

  • 네트워크 : 컨테이너가 서로 및 외부 시스템과 통신하는 방식을 정의하는 설정

👉 Dockerfile → 이미지 파일 → 컨테이너 만들기

장점

* 편리한 관리 : 서비스 환경 이미지만 관리
* 확장성 : 이미지 하나로 서버를 계속 복제
* 경량화

VM 과 똑같은데 guestOS가 없다
이미지 파일을 대상으로 프로세스를 기동


도커의 동작 원리

컨테이너를 효율적으로 생성, 실행 및 관리하기 위해 세 가지 핵심 구성 요소인 도커 엔진, 호스트 운영체제, 도커 이미지 캐시를 활용

✔ 도커 엔진

도커의 컨테이너화 기술을 가능하게 하는 핵심 구성 요소

🌟도커 데몬(dockerd)

  • 서버 측 구성 요소, 🌟Dokcer API 요청을 수신하고 이미지, 컨테이너, 네트워크, 볼륨 등 도커 객체를 관리
  • 백그라운드에서 실행

도커 CLI(docker 명령)

  • docker build | run | ps 등 명령어를 통해 도커 데몬에 명령 전달

✔ 운영 체제

호스트 OS에서 작동하지만, 전통적인 OS 환경의 종속성 관리를 추상화하여 격리와 효율성 제공

네임스페이스를 통한 격리

  • 프로세스, 네트워크 인터페이스, 파일 시스템 등을 분리하여 컨테이너가 자체 프로세스와 자원만 볼 수 있게 한다
    👉 컨테이너가 독립적으로 작동, 보안과 안정성 향상

cgroups을 통한 자원 할당

  • cgroups(컨트롤 그룹)은 리눅스 커널 기능 → 도커가 각 컨테이너에 CPU, 메모리 등 자원을 할당하고 제한하는데 사용

[Docker] 도커 컨테이너를 이루는 기술: namespace, cgroups, network 이 외에도 많은 블로그를 참고해봤지만... 실제로 이게 어떻게 쓰이는지 잘 모르겠다... 뭔지 감이 안 잡힘... 뿌앵

대략적으로 네임스페이스를 통해 컨테이너를 독립적으로 구분할 수 있다...? cgroup을 통해서 관리를 한다...? 지금 한 번에 다 알려고 하지 말고 공부 하다보면서 차차 알아가봐야겠음...

유니언 파일 시스템(UnionFS)

  • 레이어 이미지로 구성된 이미지 생성 (트리구조)
    👉 이미지 레이어를 쌓아 하나의 통합된 보기로 만든다!
    👉 이미지 빌드 시, Dockerfile의 각 명령이 새로운 레이어를 생성하고 Docker가 이를 캐시하여 빌드 속도를 높인다

✔ 도커 이미지 캐시

👉 캐싱 메커니즘을 통해 빌드 속도를 높이고 효율성 개선 (CI/CD 파이프라인에서 유용)

이미지 레이어 캐싱

  • Dockerfile의 각 명령이 별도의 레이어 생성
  • Dockerfile이 변경되어 다시 빌드될 때 변경된 레이어만 재빌드, 변경되지 않은 레이어는 캐시를 사용하여 재사용

중간 레이어

  • 각 명령어에 대해 중간 레이어 생성, 이미지 캐시로 저장

멀티 스테이지 빌드

  • 이미지 크기를 줄이고 캐시 효율성을 높이는 Docker 기술

상호작용 방식

이미지 빌드 과정

  • 개발자가 Dockerfile을 작성하여 빌드 단계 정의, 도커 CLI가 이를 도커 데몬에 전송 => 이미지가 레이어별로 생성

컨테이너 실행 과정

  • 컨테이너가 시작되면 도커 데몬은 이미지 캐시에서 이미지를 불러와 네임스페이스와 cgroups를 사용하여 격리된 환경에서 실행

캐시된 레이어 재사용

  • 이전 Dockerfile과 유사한 새 이미지를 빌드할 때, Docker는 캐시된 레이어를 재사용하여 빌드 시간을 줄인다

도커 허브, 이미지, 컨테이너

Docker Hub

Docker 이미지의 저장소 역하을 하는 클라우드 기반의 서비스

  • 이미지 저장 및 배포

  • 자동 빌드
    👉 GitHub나 Bitbucket과 연동하여 소스 코드가 변경될 때마다 자동으로 이미지를 빌드하고 업데이트 (CI/CD)

  • 이미지 검색

  • 커뮤니티 및 공식 이미지

Docker File

Docker 이미지를 만들기 위해 사용하는 텍스트 파일

  • FROM - 베이스 이미지 지정, 모든 Dockerfile은 이 명령어로 시작
  • RUN - 컨테이너 내부에서 명령어 실행
  • COPY
  • WORKDIR - 작업 디렉토리 설정
  • CMD - 컨테이너가 시작될 때 실행할 명령어 지정
  • EXPOSE - 컨테이너가 리슨할 포트 지정
  • ENV - 환경 변수 설정

Docker Image

컨테이너화된 애플리케이션을 실행하는데 필요한 모든 것을 포함한 읽기 전용 템플릿

장점

  • 일관된 환경 제공
  • 경량화
  • 이식성 (어디에서나 동일하게 실행될 수 있다)
  • 재사용성
  • 버전 관리 - 태그를 사용하여 버전 관리 가능
  • 보안성
  • 자동화

특징
1. 레이어와 레이어링 시스템

도커 이미지는 여러 레이어로 구성
각 레이어는 이전 레이어 위에 쌓여 효율적인 구조 형성

  1. 도커 이미지 빌드

Dockerfile이 처리될 때 도커가 각 명령을 읽고 각 레이어를 빌드하여 최종 이미지 생성

  1. 이미지 저장소와 레지스트리

  2. 이미지를 사용해 도커 컨테이너 실행

  3. 이미지 버전관리 및 태그

Docker Container

애플리케이션과 그 종속성을 함께 패키징하여 다양한 컴퓨팅 환경에서 안정적으로 실행할 수 있게 하는 경량 가상화 형태

OS레벨의 가상화 👉 프로세스를 격리시켜 동작하는 방식

작동 방식

Dockerfile (이미지 생성을 위한 설정 파일) > Docker Image (컨테이너의 실행 가능한 템플릿) > Docker Container (이미지를 기반으로 실행되는 독립된 프로세스)

장점

  • 이식성
  • 격리성
  • 확장성
  • 효율성
  • 신속한 배포

본 포스팅은 글로벌소프트웨어캠퍼스와 교보DTS가 함께 진행하는 챌린지입니다

profile
영차영차 😎

0개의 댓글