Docker란 ?

yrok·2023년 10월 29일
0
post-thumbnail

📌 도커란 ?

Go언어로 작성된 리눅스 컨테이너를 기반으로 하는 오픈소스 가상화 플랫폼이다.
-> 특정 서비스를 패키징하고 배포하는데 유용한 오픈소스 프로그램이다.

📌 Virtual Machine(가상머신) vs Docker Container(도커 컨테이너)

가상머신(Virtual Machine)은 하이퍼바이저(Hipervisor)를 이용해 여러개의 운영체제를 하나의 호스트에 생성해서 사용하는 방식이다.

이렇게 생성된 여러 개의 운영체제는 가상머신이라는 단위로 구분되고 각 가상머신에는 Ubuntu, CentOS 등의 운영체제가 설치되어 사용된다.

가상머신을 사용하면 하나의 물리적 컴퓨터에서 여러 운영체제를 실행할 수 있다는 장점이 있지다. 하지만, 각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치기 때문에 성능 손실이 발생한다. 또한, 가상머신은 라이브러리, 커널 등을 전부 포함하기에 배포하기 위한 이미지로 만들었을 때 이미지의 크기도 커진다.

  • 하이퍼바이저를 통해 여러개의 운영체제가 생성되고 관리된다. -> 가상머신
  • 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 거치므로 성능 손실이 크다.
  • 가상머신은 배포할 때 용량이 크다.

도커 컨테이너에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 이미지를 만들 경우 용량이 대폭 줄어들게 된다. 따라서 컨테이너를 이미지로 만들어 배포하는 시간이 가상머신에 비해 빠르며, 가상화된 공간을 사용할 때의 성능 손실도 거의 없다.

  • 도커 컨테이너는 가상화된 공간을 생성할 때 리눅스 자체 기능을 사용하여 프로세스 단위의 격리 환경을 만드므로 성능 손실이 거의 없다.
  • 가상머신과 달리 커널을 공유해서 사용하므로, 컨테이너에는 라이브러리 및 실행 파일만 존재한다. 따라서, 이미지의 용량이 가상머신에 비해 작다.
  • 배포하는 시간이 가상 머신에 비해 빠르고, 성능 손실도 거의 없다.

📌도커 이미지와 도커 컨테이너

Docker File : 도커 이미지를 만들 때 사용하는 파일이다. docker build 명령어를 실행시키면 Dockerfile을 감지하여 도커 이미지를 생성한다.

Docker Image : 도커 이미지를 docker run 명령어를 통해 실행시키면 Docker Container를 만들 수 있다.

💡 도커 이미지

도커에서 서비스 운영에 필요한 서버 프로그램, 코드 및 라이브러리, 컴파일된 실행 파일을 묶는 형태를 도커 이미지라고 한다. 특정 프로세스를 실행하기 위한 모든 파일과 설정 값을 지닌 것으로, 더 이상의 의존성 파일을 컴파일하거나 이것저것 설치 할 필요 없는 상태의 파일을 의미한다.

  • 이미지는 상태 값을 가지지 않고 변하지 않는다.
  • 하나의 이미지는 여러 컨테이너를 생성할 수 있고, 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아 있다.
  • 도커 이미지들은 github와 비슷한 서비스인 DockerHub를 통해 버전 관리 및 배포가 가능하다.
  • 도커는 DockerFile이라는 파일로 이미지를 만든다.

💡 도커 컨테이너

도커 이미지를 실행한 상태로, 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징, 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술이다.

  • 컨테이너는 이미지 Layer에 읽기/쓰기 Layer를 추가하는 것으로 생성/실행된다. 따라서 여러 개의 컨테이너를 생성해도 최소한의 용량만 사용된다.
  • 컨테이너는 종료되어도 메모리에서 삭제되지 않고 남아있다. 삭제하려면 명시적으로 삭제해야 한다. 즉, 컨테이너가 종료돼도 다시 시작할 수 있다.
  • 한 서버는 여러 개의 컨테이너를 가져도 상관없으며, 컨테이너는 각각 독립적으로 실행된다.
  • 컨테이너는 커널 공간과 호스트OS 자원을 공유한다.

💡 예시

  • app store에서 program을 다운 받아서 실행시키면 process가 실행된다.
  • Docker Hub에서 image를 pull 받아서 실행시키면 container가 생성된다.

위의 예시와 같이 생각하니 이해가 수월했다.

profile
공부 일기장

0개의 댓글