도커란?

간단히 말하면 도커란 애플리케이션을 패키징 할 수 있는 툴이다.
컨테이너에 애플리케이션과, 의존성, 환경설정등을 하나로 묶어서 서버와 같이 로컬과 다른 곳에 쉽게 배포하기 위해 사용할 수 있게 한다.
도커를 사용하는 이유?


만약 nodeJs를 이용하여 서버를 만들었다고 한다면 로컬에서 작업한 코드를 서버에 올리는 것만으로는 서버를 구동할 수 없다.
오른쪽 그림과 같이 다양한 라이브러리들, 설정, 의존성등 서버를 구동하기 위해 필요한 모든 것들을 로컬과 동일하게 서버에도 구성해줘야 한다.

동일하게 환경을 구성했다고 생각했지만 막상 로컬과 서버에 구성해 준 환경이 버전이 맞지 않아 제대로 동작하지 못하는 경우도
있기 때문에 직접 서버에 로컬과 동일한 환경을 구성해서 서버를 구동한다는 것은 매우 번거로운 일이다.
이러한 번거로운 과정을 해결하기 위해 도커를 사용한다.

도커는 컨테이너를 이용하여 동작하는데
하나의 컨테이너 안에 소스 코드, 리소스, 의존성, 라이브러리, 환경설정 등등 애플리케이션을 구동하는데 필요한
모든 것들을 넣는다.

도커는 이렇게 컨테이너를 통해 별다른 준비작업 없이 서버에서도 로컬과 동일한 서버 구동환경을 만들어준다.
컨테이너와 VM의 차이


왼쪽의 VM(Virtual Machine)의 경우 Hypervisor(ex: vmware, VirtualBox 등)를 이용하여 각각의 독립된 환경을 만들어
애플리케이션을 구동한다. 예를 들어 맥 OS 에서 VM을 이용하면 윈도우와 리눅스를 동시에 구동할 수 있다.
하지만 VM은 Guest OS, 즉 각각마다 운영체제를 포함해야 하기 때문에 굉장히 무겁고, 실행시간 또한 오래 걸린다.
오른쪽의 컨테이너의 경우 VM과는 다르게 Guest OS가 없이 Host OS를 공유해서 사용한다.
따라서 VM에 비해 매우 가볍고, 빠른 독립된 애플리케이션 구동환경을 만들어준다.
이런 컨테이너를 사용하기 위해서는 Container Engine이 필요한데 그중 하나가 Docker이다.
도커의 동작방식

도커를 이용하여 컨테이너를 구동하기 위해서는 다음과 같은 준비물이 필요하다.
먼저 Dockerfile이 필요하고, Dockerfile을 이용하여 만든 Image가 필요하다.
이렇게 만들어진 Image를 이용하여 컨테이너에서 애플리케이션을 구동한다.
Dockerfile

Dockerfile은 일종의 컨테이너를 어떻게 만들어야 하는지 설명하는 설명서라고 생각하면 된다.
Dockerfile에는 애플리케이션을 구동할 때 필요한 파일은 무엇인지, 어떤 라이브러리를 설치해야 하는지,
환경변수, 어떻게 구동하는지에 대한 script도 포함할 수 있다.
Image

Dockerfile을 이용하여 이미지를 만들 수 있는데 이미지 안에는
소스코드, 환경설정, 리소스, 의존성 등등 애플리케이션을 구동하는데 필요한 모든 것들이
들어있다. 한마디로 실행되고 있는 애플리케이션의 상태를 마치 스냅샷 하여 이미지로 만든다고 생각하면 된다.
이렇게 만들어진 이미지는 변경이 불가능한 불변의 상태가 된다.
Container


컨테이너는 이미지를 담을 수 있고, 이미지를 실행시킬 수 있는 독립된 환경을 제공해 준다.
하나의 이미지를 가지고 여러 컨테이너에서 독립된 환경에서 애플리케이션을 실행할 수 있다.
이미지는 불변이지만 이미지를 실행한 애플리케이션은 각각의 컨테이너에서 수정, 추가 등 추가 작업을 할 수 있다.
다만 모든 컨테이너는 독립된 환경이기 때문에 하나의 컨테이너에서 애플리케이션을 수정했다고 해서
다른 컨테이너가 영향을 받거나, 이미지 파일 자체가 변경되는 일은 일어나지 않는다.
객체지향적인 표현으로 이미지는 클래스, 각각의 컨테이너는 만들어진 인스턴스라고 생각할 수 있다.
도커 이미지 배포 과정

이미지 배포과정을 간단히 그림으로 표현하면 위와 같다
로컬에서 생성한 이미지를 Container Registry에 push 하고 이를 서버에서 pull 해서
사용하면 되는데 이런 과정은 마치 GitHub를 사용하는 과정과 비슷하다.
서버가 이미지를 pull 받아서 이를 실행하기 위해서는 docker와 같은 container engine이 필요하다.
Container Registry 종류

container registry는 크게 public과 private 2가지로 구분할 수 있다.
회사에서는 보안상의 이유로 private container registry를 사용하고, 외부에 공개해도 괜찮은 경우에는
public 한 registry를 사용하는데 그중 docker hub를 많이 사용한다.
정리

우선 로컬과 서버에 도커를 설치한다.
이후 로컬에서 Dockerfile을 이용하여 이미지를 생성하고
생성한 이미지를 container reigstry(ex: docker hub)에 push 한다.
서버에서는 container registry에서 pull을 하여 이미지를 받아온다.
이후 도커를 이용하여 이미지를 컨테이너에서 실행시킬 수 있다.
참고
https://www.youtube.com/watch?v=LXJhA3VWXFA
'Infra' 카테고리의 다른 글
Kafka란? (feat.성능과 고가용성) (0) | 2025.03.26 |
---|---|
클러스터와 노드 개념 (0) | 2025.03.24 |
Nginx 알아보기 (0) | 2025.03.04 |