disqus: brainbackdoor | false
kakaoChannel: false
floatFirstTOC: right

<aside> 📌 이 포스팅은 도커 컨테이너가 무엇인지, 명령어를 직접 입력해가며 살펴보는데 초점을 두고 있습니다. 간단한 실습을 원하신다면, 도커 컨테이너 실행해보기 포스팅을 참고 바랍니다.

</aside>

0. 왜 도커 컨테이너를 학습해야 할까요?

77d5ab7c60454e328a881451b7e5460a.png

2b36433ce51542ca8c897c3827ab3015.gif

애플리케이션이 배포되는 환경을 서버에 직접 설치하여 구성할 경우, snowflake server 이슈에 직면합니다. 서비스가 점차 확장되면서 기존에 사용하던 서버와 새로 구축한 서버간에 설정의 차이가 발생하고, 관리자의 인적요소에도 영향을 받을 수 있습니다. 그리하여 기존에는 스크립트를 활용한 자동화 방식부터, kickstart 등을 거쳐 OS를 가상화 방식까지 다양한 형태로 서버를 관리해왔습니다.

기존의 OS 가상화 방식

스크린샷 2023-11-07 오후 10.48.56.png

기존의 가상화 기술은 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식입니다. 하이퍼바이저는 호스트 컴퓨터에서 다수의 운영체제를 동시에 실행하기 위한 논리적 플랫폼 정도로 이해해도 충분하다고 생각합니다.

중요한 점은, 각 종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 반드시 하이퍼바이저를 거치기 때문에 일반 Host에 비해 성능의 손실이 발생한다는 것입니다.

뿐만 아니라, 가상머신은 GuestOS를 사용하기 위한 라이브러리, 커널 등을 전부 포함하기에 가상 머신을 배포하기 위한 이미지로 만들었을 때 이미지 크기가 커져 가상머신 이미지를 애플리케이션으로 배포하기는 부담스럽습니다. (기존의 가상화는 전가상화, 반가상화 등의 방식으로 분류됩니다.)

우리가 원하는건 특정 환경에 종속되지 않은 상태로 어플리케이션을 띄우는 것입니다.

단순히 어플리케이션만을 띄우고 싶을 뿐인데 OS까지 띄우는것은 엄청난 낭비입니다.

"격리된 CPU, 메모리, 디스크, 네트워크를 가진 공간을 만들고 이 공간에서 프로세스를 실행해서 유저에게 서비스" 하려면 어떻게 해야 할까?