본문 바로가기
도커

도커(Docker)를 이해해보자!

by eunjineee 2023. 7. 30.

✨도커

LXC(리눅스 컨테이너스)라는 커널 컨테이너 기술을 이용하여 만든 컨테이너 기술 중 하나로,

Docker는 Linux 커널 기능을 사용하여 운영 체제 위에 컨테이너를 생성하는 컨테이너 엔진이다.

 

컨테이너 기반의 오픈소스 가상화 플랫폼으로

리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트이다.

 

출처 : https://ragin.medium.com/docker-what-it-is-how-images-are-structured-docker-vs-vm-and-some-tips-part-1-d9686303590f

✨도커 파일

Docker Image를 만들기 위한 설정 파일

이미지를 어셈블 하기 위해 사용자가 명령줄에서 호출할 수 있는 모든 명령을 포함하는 텍스트 문서이다.

 

✨이미지 (Docker image)

소스 코드, 라이브러리, 종속성, 도구 및 응용 프로그램을 실행하는데 필요한 기타 파일을 포함하는 불변(변경 불가) 파일

Docker image는 파일로 어플리케이션 실행에 필요한 독립적인 환경을 포함하며, 런타임 환경을 위한 일종의 템플릿이다.

✅특징✅

  • 상태값을 가지지 않고 변하지 않음
  • 컨테이너는 이미지를 실행한 상태라고 볼 수 있고 추가되거나 변하는 값은 컨테이너에 저장됨
  • 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 삭제되더라도 이미지는 변하지 않고 그대로 남음
  • 도커 이미지는 Docker hub에 등록하거나 Docker Registry 저장소를 직접 만들어 관리 가능함
  • 누구나 쉽게 이미지를 만들고 배포할 수 있음

 

✨컨테이너

실행 중인 컴퓨터의 호스트 운영체제에 격리된 공간을 설정하고,
이 격리공간 내에 호스트 운영체제로부터 독립된 프로세스를 실행시키는 기술과 이를 위한 소프트웨어 구성 일체이다.

 

배에 실는 화물 수송용 박스처럼 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순화하는 것이다.

Docker가 해당 이미지를 실행해야 하는 경우 이미지를 기반으로 컨테이너를 생성한다.

✅특징✅

  • WAS 서버, DB 서버 등 다양한 프로그램을 컨테이너를 통해 추상화할 수 있음
  • 리눅스 커널이 제공하는 기능들(주로 cgroups와 이름공간) 위에 빌드되기 때문에 가상머신과는 달리 별도의 운영 체제를 요구하거나 포함하지 않음
  • 대신, 커널의 기능에 의존하며 리소스 격리 (CPU, 메모리, 블록 입출력, 네트워크 등) 및 격리된 이름 공간을 사용하여 운영 체제에 대한 응용 프로그램의 관점을 격리함
  • 컨테이너의 내용은 미리 정의할 수 없으며 나중에 응용 프로그램의 일부 로그 또는 PID 등을 포함할 수 있음
  • 새 컨테이너가 시작되면 쓰기 가능한 새 레이어가 생성됨 

 

✨컨테이너 기반 기술

프로세스를 격리하는 방식이 컨테이너 기술이다.

✅특징✅

  • 리눅스에서는 단순히 프로세스를 격리시키기 때문에 가볍고 빠르게 동작함
  • CPU나 메모리는 딱 프로세스가 필요한 만큼만 추가로 사용하고 성능적으로도 손실이 없음
  • 하나의 서버에 여러개의 컨테이너를 실행하면 서로 영향을 미치지 않고 독립적으로 실행됨
  • 실행 중인 컨테이너에 접속하여 명령어를 입력할 수 있음
  • apt-get이나 yum으로 패키지를 설치 가능함
  • 사용자도 추가할 수 있으며 여러 개의 프로세스를 백그라운도로 실행 가능함
  • CPU 나 메모리 사용량을 제한할 수 있고 호스트의 특정 포트와 연결하거나 호스트의 특정 디렉터리를 내부 디렉토리처럼 사용 가능함
  • 즉 VM으로 할 수 있었던 것은 거의 모두 할 수 있음
  • 새로운 컨테이너를 만드는데 걸리는 시간도 1초 이내로 아주 짧음

 

🔄️각각의 연관성?

도커파일(Dockerfile)의 명령으로 이미지(Docker Image)가 생성된다.
도커가 해당 이미지를 실행해야 하는 경우, 이미지를 기반으로 컨테이너(container)를 생성한다.

이미지는 템플릿일 뿐이므로 시작하거나 실행할 수 없으나, 컨테이너는 실행인 이미지이다.