본문 바로가기
개발/백엔드

[백엔드] Docker (1) - Docker란?

by 헤이즐넛 좋아하는 개발자 2024. 9. 11.

시작하기 전에

오늘의집 회사에서 파트타임으로 일하면서 Docker를 사용해볼 기회가 생겼다.

앞으로도 유용하게 사용할 개념이니 이번에 확실하게 정리해보고자 한다.

출처: https://docs.docker.com/


핵심

  • 보통 외부 코드를 가져와서 사용하려 하면, 패키지 환경이 안 맞아서 실행이 안 되는 경우가 많다. Docker는 이를 해결해준다.
  • Docker는 컨테이너라는 독립된 환경(코드+패키지)을 통째로 제공해줘 다른 유저가 바로 사용할 수 있게 한다.

Docker란

애플리케이션을 패키지하고, 컨테이너라는 독립된 환경에서 이를 실행할 수 있도록 도와주는 오픈 소스 플랫폼이다. 즉, 호스트에 설치되어 있는 것에 의존하지 않고 애플리케이션을 실행할 수 있다.


Docker Architecture

Docker는 Client-Server 구조를 사용한다. Docker daemon, Docker client, Docker desktop, Docker registry, Docker objects(Images, Containers) 각각이 무엇인지 살펴보자.

Docker architecture


Docker Daemon

Docker daemon(dockerd)는 Docker API 요청을 받고 Image, Container, Network, Volume 등의 Docker objects를 관리한다.


Docker Client

Docker client(docker)는 Docker 유저들이 Docker와 상호작용하는 주요 방법이다. docker run 명령어를 입력하면, client가 이를 dockerd로 전달한다.


Docker Desktop

Mac, Windows, Linux 환경에서 쉽게 설치할 수 있는 앱이다. Docker daemon, Docker client, Docker Compose, Docker Content Trust, Kubernetes, Credential Helper를 모두 포함한다. 이 개념은 아래에서 더 자세히 알아보자.


Docker Registry

Docker image가 저장되는 장소다. 개인 레지스트리를 만들 수도 있고, Docker Hub는 모두가 사용할 수 있는 공개적인 레지스트리다. Docker가 이미지를 찾을 때 기본적으로 Docker Hub에서 찾는다.

docker pull 또는 docker run 명령어는 요청된 이미지를 레지스트리에서 가져온다. docker push 명령어는 이미지를 레지스트리로 푸시한다.


Docker Objects

대표적인 Image, Container만 알아보자.

 

Image

Container를 생성하기 위한 read-only 템플릿이다. 직접 만들 수도 있고 레지스트리에서 가져와 사용할 수도 있다.

직접 이미지를 생성하기 위해서는, Dockerfile을 만들어 코드를 작성하고 실행하면 된다. Dockerfile의 각 instruction이 이미지의 layer를 생성한다.

Dockerfile을 수정하여 이미지를 재빌드하면, 수정한 layer만 재빌드되기 때문에 다른 가상화 기술에 비해 가볍고, 작고, 빠르다.

 

Container

Image의 실행가능한 버전이다. Docker API 또는 CLI로 start, stop, move, delete할 수 있다.

 

※ CLI란?

더보기

※ CLI란?

 

운영 체제와 상호 작용하는 메커니즘에 대표적으로 CLI, GUI 2가지가 있다.

CLI(Command Line Interface)는 키보드를 사용하여 운영 체제와 상호 작용하는 인터페이스이다. 터미널을 열고 입력하는 명령어가 CLI이다. GUI보다 시스템 자원을 덜 사용하므로 빠르고 가볍다.

GUI(Graphical User Interface, 그래픽 UI)는 마우스를 사용하여, 그래픽 요소(아이콘, 버튼, 창 등)를 통해 운영 체제와 상호 작용하는 인터페이스이다. 그래픽 요소를 클릭하거나 드래그해서 작업을 쉽게 수행할 수 있으니 과정이 직관적이다.