소프트웨어를 배포하려면 소프트웨어 자체 뿐만 아니라 의존성과 구성이 필요하다. 여기서 의존성이란 라이브러리, 인터프리터, 서브 패키지, 컴파일러 , 확장 등을 의미하고 구성이라는 것은 설정, 라이선스 키, 데이터베이스 비밀번호 등을 의미한다.
이러한 문제를 해결하기 위해서 옴니버스 패키지, 가상 머신 이미지 등의 방법들이 있지만 이들은 규모가 너무 크고 다루기 힘들며 구축과 유지보수에 시간이 오래 걸린다. 더욱이 여러대의 프로그램을 한 서버에서 돌릴려면 이러한 다양한 종류의 패키지에 대해 관리, 감시, 네트워크 설정 등의 부수적인 작업이 필요하다.
이런 문제를 해결하기 위해 등장 한 것이 컨테이너이다. 컨테이너는 쉽게 말하면 소프트웨어 배포 및 패키징 단위이다. 더 나아가서 설명하면 재사용, 스케일링, 리소스 할당 단위이다.
위에서 언급한 가상 머신과 컨테이너를 비교해보면 가상화 오버헤드 없이 CPU에서 직접 실행되고 컨테이너는 필요한 이미지만 가지고 있으므로 VM이미지보다 훨씬 작다. 위의 그림은 해당 내용을 비교하기 쉽게 그려놓은 자료이다.
자 이제 이 글의 주제인 도커에 대한 이야기를 해야할 때가 왔다.
도커는 위에서 언급한 컨테이너에 대한 이미지 포맷, 수명주기를 관리하는 컨테이너 런타임 라이브러리이다.
따라서 우리는 도커를 이용해서 컨테이너를 우리가 원하는 환경에 따라 만들 수 있고 이를 관리할 수 있게 되는 것이다.
좀 더 깊게 생각해보면 컨테이너에서 필요한 기능들을 Docker가 linux kernel에 접근하게 해준다. 이 때문에 컨테이너를 실행하기 위해서 별도의 운영체제가 필요하지 않은 것이다. 하지만 이와 동시에 cgroups를 사용한 리소스 격리를 통해 운영체제에서 여러 환경을 독립적으로 운영할 수 있게 해준다.
읽어주셔서 감사합니다.
틀린 부분이 있으면 댓글을 달아주시면 감사하겠습니다.
📧 : may3210@g.skku.edu
🔗 : https://github.com/RicardoKim
참조
https://www.docker.com/resources/what-container/
https://ko.wikipedia.org/wiki/%EB%8F%84%EC%BB%A4_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)
'개발 > 쿠버네티스' 카테고리의 다른 글
Docker -v ? (1) | 2022.12.23 |
---|