[Docker]2. 도커의 동작 원리

Gaeng·2024년 11월 24일

도커의 동작 원리

01. 도커의 동작 원리

도커의 구조

도커는 운영체제 위에 도커 엔진이 동작하고 그 위에서 컨테이너가 동작.

도커의 컨테이너 속의 구조는? 우리가 생각하기에 컨테이너 안에는 비어있을 것이라고 생각하는데, 컨테이너 리눅스 운영체제 비슷한 무언가(실제 운영체제 X)가 있다.
-> 그러면 운영체제가 하는 일 : 소프트웨어나 프로그램의 명령을 하드웨어에 전달하는 역할

운영체제는 사람이 이해할 수 있는 고수준 명령(소프트웨어)과 하드웨어가 수행할 수 있는 저수준 작업 사이를 중재하는 역할을 합니다.

이를 귤 먹기 예시를 통해 정리하면:
1. 소프트웨어 (명령1)

  • 명령: "귤을 먹어라"
  • 의미: 소프트웨어는 최종 목적을 명확히 지시하지만, 실제 행동 방법은 구체적으로 설명하지 않음.
  • 컴퓨터: 이런 명령만으로는 하드웨어가 행동할 수 없음.
  1. 운영체제 (명령2)
  • 명령: "테이블 오른쪽 상단에 위치한 귤을 손에 쥐고 껍질을 벗겨 알맹이를 먹어라."
  • 의미: 운영체제는 소프트웨어의 추상적 명령세분화하여 구체적 단계로 바꿔 하드웨어가 이해할 수 있도록 중개.
  • 컴퓨터: 이 단계에서 명령이 하드웨어에 전달 가능한 형태로 변환됨.
  1. 하드웨어 실행
  • 동작: 하드웨어는 운영체제가 전달한 세부 지시를 기반으로 각 동작을 수행.
    • 오른쪽 상단으로 이동 → 귤을 잡음 → 껍질을 벗김 → 알맹이를 먹음.
  • 결과: "귤을 먹어라"라는 최종 명령이 실행됨.

도커의 가장 큰 특징?

컨테이너 기반의 완전한 격리와 경량화

  1. 컨테이너의 완전한 분리
    • 도커 컨테이너는 호스트 운영체제와 격리되어 독립적으로 동작합니다.
    • 컨테이너 내부의 프로그램은 호스트 운영체제의 다른 부분과 직접 상호작용하지 않습니다.
  2. 프로그램 명령 전달 구조
    • 컨테이너 내부의 프로그램은 컨테이너 속에 포함된 최소한의 운영체제 구성 요소(주로 사용자 공간 라이브러리)를 통해 명령을 처리합니다.
    • 이 명령은 최종적으로 호스트 운영체제의 커널로 전달됩니다.
    • 즉, 호스트 운영체제의 커널을 공유하면서도 프로그램 간 간섭을 방지합니다.
  3. 리소스 경량화
    • 컨테이너는 가상 머신처럼 별도의 전체 운영체제를 포함하지 않고, 호스트 운영체제의 커널을 재사용합니다.
    • 결과적으로 컨테이너는 가볍고 빠르게 실행됩니다.

요약
1. 컨테이너 내부 → 프로그램 명령 실행.
2. 컨테이너 내부 운영체제 구성 요소가 명령을 처리.
3. 명령은 밑바탕이 되는 호스트 커널로 전달.
4. 컨테이너 간은 완전히 독립적으로 동작.

도커는 기본적으로 리눅스용

  • 도커는 밑바탕에서 리눅스 운영체제가 동작하는 것을 전제로 하기에, 리눅스 운영체제만 동작 가능
  • 즉, 도커는 리눅스 컴퓨터에 독립된 격리 환경을 만드는 것이며, 리눅스에서만 동작하고, 컨테이너에서 동작할 프로그램도 리눅스용 프록그램.

02. 도커 허브와 이미지, 그리고 컨테이너

이미지와 컨테이너

1. 이미지와 컨테이너의 관계

  • 이미지:
    컨테이너를 생성하는 데 사용되는 설계도.
    • 이미지에는 프로그램, 실행 환경, 라이브러리 등이 포함됨.
    • 이미지를 기반으로 동일한 컨테이너를 반복적으로 생성 가능.
  • 컨테이너:
    이미지를 기반으로 실행된 실제 실행 환경.
    • 이미지는 정적인 파일 시스템이고, 컨테이너는 이미지의 복사본으로 동작하며 실행 상태를 유지함.

2. 컨테이너로부터 이미지 생성

  • 컨테이너는 이미 실행 중인 상태를 기반으로 새로운 이미지 생성 가능.
  • 이것은 컨테이너를 "개조"하여 변경사항(설정, 추가 파일 등)을 저장하는 과정으로 이해할 수 있음.
  • 이 기능 덕분에 이미지를 수정하거나 컨테이너의 상태를 저장하여 새로운 컨테이너 생성이 간편해짐.

3. 도커 엔진 간 이동 가능

  • 컨테이너는 도커 엔진만 설치되어 있으면 어디서나 실행 가능.
  • 이를 통해 동일한 컨테이너를 다른 환경에서도 쉽게 재현 가능.
  • 예: 로컬에서 개발한 컨테이너를 클라우드 환경에서도 동일하게 실행.

도커 허브와 도커 이미지

도커 허브 : 공개된 컨테이너 이미지가 모여 있는 곳. 원하는 컨테이너의 이미지를 내려 받을 수 있는 곳. (https://hub.docker.com)

어떤 이미지가 공개돼 있을까?

같은 소프트웨어라도 다양한 변종의 이미지가 제공됨. 그래서 하나의 컨테이너 안에 여러개의 소프트웨어가 섞일 수도 있고, 하나의 소프트웨트만 있을 수 있다.

안전한 컨테이너 이미지를 고르는 법?

  • 공식 이미지 사용
  • 커스텀 이미지를 직접 만들어 사용

03. 도커 컨테이너와 생애주기와 데이터 저장

도커 컨테이너의 생명주기

생성 → 시작 → 실행 → 정지 → 삭제 순으로 관리.
중간 단계에서 컨테이너 상태를 저장하거나 재시작 가능.

데이터의 저장

컨테이너가 삭제되면 그 데이터도 삭제되기 때문에, 도커가 설치된 물리적 서버의 디스크를 마운트에해 이 디스크에 데이터를 저장한다. 그래서 확인을 해두어야함.


04. 도커의 장점과 단점

출처:https://velog.io/@kjw8370/%EB%8F%84%EC%BB%A4%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%A /책

도커의 구조와 성질 및 그 장단점

'환경을 격리할 수 있다.'

  • 독립된환경
  • 이미지 만들 수 있다
  • 컨테이너에 커널을 포함 필요 X

도커의 장점과 단점

장점

  • 한대의 물리 서버에 여러 개의 서버를 띄울 수 있음
  • 서버 관리가 용이
  • 서버 고수가 아니어도 다루기 쉽다.

단점

  • 리눅스만 지원
  • 호스트 서버에 문제가 생기면 모든 컨테이너에 영향

도커의 주 용도

  • 팀원 모두에게 동일한 개발환경 제공
    (동일한 환경을 여러개 만들 수 있음)
  • 새로운 버전의 테스트 환경 구축
  • 동일한 서버가 여러 대 필요한 경우
profile
문제를 해결하면서 나온 문제를 기록하는 노트

0개의 댓글