도커란

초폭풍견·2024년 8월 24일

Docker란

도커는 컨테이너 기반의 오픈 소스 프로그램으로, 애플리케이션을 격리된 환경에서 실행하고, 관리할 수 있도록 도와준다. Docker를 사용하면 애플리케이션을 개발하고 배포하는 과정에서 환경 의존성을 줄이고, 일관된 실행환경을 제공하며, 다양한 운영체제 및 환경에서의 호환성을 보장할 수 있다.
👉Docker는 클라우드 네이티브 애플리케이션과 DevOps 환경에서 널리 사용된다.



도커의 주요 개념

컨테이너

  • 애플리케이션과 그 의존성(라이브러리, 설정 파일 등)을 포함하는 경향의 실행 환경

  • 컨테이너는 격리된 환경에서 실행되며, 동일한 호스트에서 여러 컨테이너를 동시에 실행 가능하다.

  • 컨테이너는 가상화 기술이 아닌 운영 체제 수준의 격리를 제공하여 빠르고 효율적이다.

( 컨테이너는 도커 이미지로부터 생성된 실행 환경 )

이미지

  • 컨테이너를 생성하기 위한 템플릿

  • 이미지는 애플리케이션과 그 의존성, 설정 등을 포함한 읽기 전용 파일 시스템

  • 이미지는 DockerFile을 기반으로 빌드되며, 컨테이너의 생성 및 실행시 필요한 모든 설정을 포함한 것으로 상태값을 가지고 변하지 않으며, 컨테이너가 실행시 사용된다.


위의 그림은 Docker의 기본적인 개념을 설명하는 다이어그램이다. Docker를 사용해 소프트웨어를 컨테이너화하여 어디서든 일관되게 실행할 수 있도록 한다.

1. Dockerfile:

왼쪽 상단에 있는 'Dockerfile'은 Docker 이미지의 기본 청사진이다. 이 파일에는 소프트웨어가 설치되고 구성되는 방법에 대한 명령어들이 포함되어 있다.

2. Docker 이미지 (Docker image):

'Dockerfile'을 사용하여 docker build 명령어를 실행하면, 이로부터 Docker 이미지를 생성할 수 있다. 이 이미지는 애플리케이션 및 그 실행에 필요한 모든 종속성을 포함하는 템플릿이다.
그림에서 CD 모양의 아이콘으로 표현된 부분이 Docker 이미지를 나타낸다.

3. Docker 컨테이너 (Docker container):

생성된 Docker 이미지를 기반으로 docker run 명령어를 실행하면 Docker 컨테이너가 생성된다. 컨테이너는 이미지의 실행 인스턴스이며, 실제 애플리케이션이 이 컨테이너에서 실행된다.

요약하자면, Dockerfile에서 Docker이미지를 만들고, 그 이미지를 사용하여 여러 개의 Docker 컨테이너를 실행할 수 있음을 나타낸다.




😜 도커는 기본적으로 리눅스용이기 때문에, 컨테이너에 들어가는 프로그램은 리눅스용이여야 한다.

👉 도커는 리눅스 운영체제에 독립적인 환경을 만드는 것이다. 그리고 리눅스 운영체제가 서버에서 사용되는 경우가 많고, 리눅스용 소프트웨어도 서버용 소프트웨어가 많기 때문에, 도커는 대부분 서버환경을 전제로 하는 경우가 많다.

도커의 동작 구조는 위와 같다.

  • 물리서버 위에 운영체제가 있고,
  • 그 위에 도커 엔진이 동작한다
  • 도커 엔진 위에서 컨테이너들이 동작한다.
    (프로그램이나 데이터는 컨테이너 안에 위치한다.)

도커에서는 컨테이너가 완전히 분리되어 있으므로, 밑의 운영체제(리눅스) 주변부분이 커테이너 속 명령을 전달받고 이를 커널에 전달하는 구조로 되어 있다.
커널이란?




<도커와 가상머신의 차이>

도커

  • 호스트 운영체제의 커널을 공유하면서, 애플리케이션과 그 의존성만을 패키징하여 컨테이너를 실행
  • 컨테이너는 OS 레벨에서 격리되며, 프로세스와 파일시스템 수준에서 격리
    ➡️ 가상화가 아닌 컨테이너화를 통해 동작

가상머신

  • 하이퍼바이저를 통해 하드웨어를 가상화하고, 각 VM이 독립적인 운영체제를 실행한다.

  • 각 가상머신은 전체 운영체제와 CPU를 포함하고 있어서,
    메모리와 저장소의 사용량이 상대적으로 많다.

  • 완전히 독립적인 운영체제 환경을 제공하므로 강력한 격리성을 가지고 있다

도커(컨테이너)가상머신
하나의 물리적 컴퓨터에서 하나의 운영체제를 사용하지만,
각 애플리케이션이 자신의 환경을 가지고 있는것
마치 여러 개의 컴퓨터를 하나의 물리적 컴퓨터 위에 만들수 있는것




커널 :
컴퓨터의 전원을 켜면 운영체제는 이와 동시에 수행된다. 한편 소프트웨어가 컴퓨터 시스템에서 수행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 한다. 마찬가지로 운영체제 자체도 소프트웨어로서 전원이 켜지면 동시에 메모리에 올라가야 한다. 하지만, 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심하게 된다.

따라서 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다.
이 때에 메모리에 상주하는 운영체제의 부분을 커널이라고 한다. 또 이것을 좁은 의미의 운영체제라고도 한다.

즉, 커널은 메모리에 상주하는 부분으로써 운영체제의 핵심적인 부분을 뜻한다.


하이퍼바이저 :
단일 물리적 머신에서 여러 가상 머신을 실행하는데 사용할 수 있는 소프트웨어. 하이퍼바이저는 필요에 따라 CPU 및 메모리와 같은 기본 물리적 컴퓨팅 리소스를 개별 가상 머신에 할당

0개의 댓글