[Docker] 컨테이너와 도커

·2023년 8월 1일

2023 공개SW개발자대회에 참가하면서 온라인교육을 수강할 수 있는 기회가 주어졌다. 관심이 있었던 도커에 대한 강의도 제공해주어 강의 내용을 정리하면서 공부하고자 한다.

Docker

컨테이너

어느 한 대기업의 개발팀을 생각해보자. 각 분야에 따라 여러 개발팀이 존재할 것이고, 개발팀에 따라 언어, 버전, 라이브러리, 설정 등이 다양하게 사용될 것이다. 이러한 다양한 소프트웨어가 충돌하지 않고, 하나의 컴퓨터에서 돌아가려면 굉장히 세심한 주의와 복잡한 작업이 요구된다. 컨테이너는 이러한 부분을 해결해주는 역할을 한다.

컨테이너(Container)는 소프트웨어를 격리된 환경에서 실행하는 기술로, 애플리케이션을 필요한 모든 것(코드, 라이브러리, 설정 등)을 함께 패키징하여 독립적으로 실행할 수 있게 해준다. 컨테이너는 애플리케이션을 환경과 상관없이 일관성 있게 실행하고 관리할 수 있도록 도와준다.

가상머신(VM)과 컨테이너

하지만 우리가 익히 알고 있는 VMware나 VirtualBox와 같은 가상머신도 독릭접인 실행환경을 구성할 수 있도록 도와주는데, 컨테이너를 이용하는 이유가 뭘까.

기존의 VMware나 VirtualBox를 이용한 가상화 방식은 호스트 OS 위에 게스트 OS 전체를 가상화하여 사용하는 방식이다. 정확히는 Hypervisor를 설치해서 호스트 OS 위에 하드웨어를 구현해주고 그 위에 게스트 OS를 설치한다. 여러가지 OS를 가상화할 수 있고 비교적 사용법이 간단하지만, 부하가 심하고 불필요한 리소스가 생겨 무겁다는 단점이 있다. 우리가 가상화를 하는 이유는 이 위에 어떠한 애플리케이션을 돌리기 위함이 대부분이므로 이러한 단점을 극복하기 위해 (Hypervisor + Guest OS)를 제거하고, 컨테이너를 이용하는 기술이 등장했다. 위 그림에서 도커는 해당 부분이 Docker Engine으로 대체된 것을 볼 수 있는데, 도커 엔진은 컨테이너를 만들 수 있다. 컨테이너는 하나의 호스트 OS 위에서 마치 각각의 독립적인 프로그램처럼 관리되고 실행된다. 불필요한 OS를 만드는 작업 및 인프라를 독립적으로 나눌 필요가 없어서 확장성이 좋고 빠르다.

도커

도커(Docker)는 컨테이너 기반의 오픈소스 가상화 플랫폼으로, 소프트웨어를 컨테이너로 추상화하여 인프라에서 애플리케이션을 분리하고 빠르게 제공할 수 있게 해준다. 이는 하나의 호스트 OS 안에서 여러 컨테이너를 동시에 실행할 수 있어서 자원을 효율적으로 활용할 수 있다. 컨테이너의 라이프사이클을 관리하고, 애플리케이션을 자동화된 서비스로 배포하는 등 유용한 기능들을 제공하여 개발과 배포의 편의성을 높여준다.

한 마디로 도커는 뛰어난 가상화 기술을 제공하여 다양한 환경에서 애플리케이션을 쉽고 빠르게 배포하고 관리할 수 있도록 도와주는 도구이다.

도커는 리눅스의 가상화 환경을 지원하는 기능 중 하나인 리눅스 컨트롤 그룹(Cgroup)리눅스 네임 스페이스(Namespace) 등의 기술을 사용하여 컨테이너를 생성하고 관리한다. Cgroup는 CPU, 메모리, 네트워크 대역폭, 디바이스 등의 리소스를 제한할 수 있는 기능을 제공하며, Namespace는 파일 시스템이나 네트워크 인터페이스를 가상화하여 격리된 환경을 제공한다.

도커의 특징

도커는 가상화를 위해 하이퍼바이저를 사용하지 않고, 호스트 OS의 리눅스 커널을 공유하여 가상화를 이룬다. 이로 인해 도커 컨테이너는 가상 머신보다 가볍고 빠르게 동작한다.

Q. 그럼 도커를 윈도우에 설치하면 어떻게 되나요?
→ 윈도우에 설치되면 도커가 하이퍼바이저를 사용하게 된다. 따라서 가능하면 리눅스 환경에서 도커를 사용하기를 추천한다. 하이퍼바이저를 사용하지 않기 위해 도커를 사용하기 때문에 윈도우에 설치하면 의미가 없어진다. 윈도우보다는 우분투를 추천한다.

도커를 통한 마이크로서비스

도커의 도입은 개발 프로세스를 단순화하고 자원의 효율성을 극대화하기 위해 모놀리식 아키텍처에서 마이크로서비스 아키텍처로의 전환을 촉진한다. 도커를 사용하면 각 서비스를 컨테이너 단위로 개발하고 배포할 수 있으며, 서비스 간의 상호 작용이 용이해진다. 이는 복잡한 시스템의 관리와 확장을 용이하게 만들어 준다.


참고 링크
https://www.youtube.com/watch?v=ePpiEy_C_jk&list=PLnIaYcDMsSczk-byS2iCDmQCfVU_KHWDk

profile
깡통 채우기

1개의 댓글

comment-user-thumbnail
2023년 8월 1일

좋은 글 감사합니다.

답글 달기