Data/Docker

[Docker] Docker란 무엇일까?

gangmin 2024. 7. 11. 09:30

안녕하세요! 미니입니다. 프로젝트 후에 폭풍으로 몰아치는 강의를 들으면서 글을 잘 못썼네요 ㅎㅎ

맘잡고 다시 학습하는 내용을 적어보려고 합니다.

 

프로젝트 이후에 바로 Docker에 대해서 학습을 했고, 많은 기업들에서 활용하고 있다고 합니다. Docker는 뭐하는 친구이고, 어떻게 사용하는 지 학습한 내용을 올려보려고 합니다.

Docker란?

"Docker는 컨테이너 기반 가상화 플랫폼으로, 응용 프로그램과 그 종속성을 격리된 환경인 컨테이너로 패키징하여 실행하는 기술이다." 와 같은 글들을 많이 찾아보게 될 것입니다. (저는 와닿지 않았는데, 혹시 와닿으시나요? ㅎㅎ) 저는 모르는 용어가 많아서 그런거라고 생각하고 하나씩 뜯어봤어요.

컨테이너란?

컨테이너는 가상화 기술을 이용하여 애플리케이션과 개발 환경을 격리된 공간에서 실행하는 단위라고 합니다. 그러면, 또 가상화 기술은 무엇일까요? 저희가 PC를 사게 되면, 하나의 운영체제를 활용하게 됩니다. Mac은 Mac OS, 일반 PC는 Windows와 같이요.

 

하지만, 다른 OS를 사용하려면 어떻게 해야할까요? 직접 컴퓨터에 다른 운영체제를 설치하는 방법도 존재하지만, 다른 운영체제를 소프트웨어처럼 사용할 수 있도록 하면 됩니다. 이런 기술을 가상 머신이라고 부르게 됩니다. 즉, 가상화는 물리적인 하드웨어를 보다 효율적으로 활용할 수 있도록 해주는 프로세스입니다. 

 

이런 가상화 기술에는 크게 2가지로 구분할 수 있으며, 가상 머신과 Docker Container가 있는 것입니다. Docker는 가상 머신처럼 하드웨어 장치를 효율적으로 활용할 수 있도록 해주는 프로세스인 것입니다.

 

 

가상 머신과 컨테이너는 애플리케이션을 격리할 수 있다는 점에서 유사합니다. 기본적인 인프라에 대해서 가상화하고 추상화하기 때문에 사용자가 신경쓸 일이 없습니다. 하지만, 중요한 차이점이 존재하게 됩니다.

Virtual Machine (가상 머신)

실제 OS와 게스트 OS를 이어주기 위해서 하이퍼 바이저를 사용하게 됩니다. 하이퍼바이저는 중요한 기능은 두 OS 사이의 자원을 조정하는 것입니다. 실제로, 게스트 OS가 사용할 수 있는 리소스의 양을 조절할 수 있습니다. 리소스를 할당하게 된다면, 게스트 OS만 그 공간을 사용하게 됩니다.

Docker Container (컨테이너)

Container 기반 기술은 게스트 OS를 올리지 않고, 애플리케이션을 Docker Engine위에 올리게 됩니다. 이는 무거운 OS를 올리지 않기 때문에 속도적인 측면에서 이점을 가지게 됩니다.

종속성이란?

소프트웨어 종속성은 다양한 말로 해석할 수 있습니다. 프로그램들 간의 종속성을 이야기할 수 있고, 라이브러리들의 관계를 이야기할 수 있습니다. 저는 Docker를 설명하기 위해서는 더 큰 범주에서 생각했습니다. 소프트웨어와 소프트웨어간의 포함관계를 관리한다라고 생각했습니다. 즉, "A라는 애플리케이션은 B라는 애플리케이션이 필요하기 때문에 B가 실행된 후에 실행되야 한다."와 같은 것을 관리하는 것입니다.

도커 구성요소

 

도커를 구성하는 요소는 크게 4가지로 확인할 수 있습니다.

  • Client : 도커를 설치하는 공간이며, CLI 명령어를 수행할 수 있습니다.
  • Host : 도커가 띄워져있는 서버를 의미합니다.
  • Daemon : 도커 엔진
  • Registry : 외부 이미지 저장소입니다. Github 처럼 다양한 버전의 이미지를 올릴 수 있습니다.

이미지와 컨테이너

도커 엔진에서 사용하는 기본 단위는 이미지와 컨테이너입니다. 도커 이미지와 컨테이너는 1:N의 관계를 가지게됩니다.

Docker는 이미지를 기반으로 Container를 구성하게 됩니다. 이미지라는 용어에서 확인할 수 있듯이, Container를 생성하기 위한 기록이라고 생각했습니다. 이미지를 생성하기 위해서는 Dockerfile을 구성해야 합니다. 이때, 저희는 베이스 이미지를 기초로 다양한 레이어를 구성할 수 있습니다.

 

Container는 Image를 통해서 생성할 수 있습니다. 해당 이미지의 목적에 맞는 파일이 들어 있는, 다른 컨테이너로부터 격리된 시스템 자원과 네트워크를 활용할 수 있는 독립된 프로세스가 생성됩니다. 여기서 중요한 점은 이미지를 읽기 전용으로 사용하기 때문에 이미지 내에서 변경된 사항만 컨테이너 계층에 저장합니다. 그렇기 때문에 컨테이너의 변화는 이미지에 영향을 주지 않는다는 것입니다.

 

'Data > Docker' 카테고리의 다른 글

[Docker] Container 띄워보기  (0) 2024.07.15