이 글은 Udemy 강의 Docker & Kubernetes: The Practical Guide [2024 Edition]을 수강하며 정리한 내용입니다.
Docker란? Container란?
Docker란?
컨테이너를 만들고 관리하는 기술
컨테이너란?
소프트웨어의 표준화된 단위 : 코드 + 그것을 수행하기 위한 dependency들
예를들어 nodeJS 애플리케이션을 빌드하는 경우, 소스코드를 더불어 JavaScript 런타임이 필요한데 Docker로 구축된 컨테이너에서는 항상 동일한 환경에서 일관된 결과물을 얻을 수 있다.
피크닉 바구니에 비유하면 바구니 안에는 요리, 식기 등이 다 들어있고, 우리는 바구니를 들고 원하는 곳 아무데나 가서 피크닉을 할 수 있다. 다 준비되어있기 때문에 음식을 찾기 위해 돌아다니거나 할 필요 없다. 그리고 이 각각의 도구들은 섞이지 않으며, 독립적으로 작용할 수 있고, 필요한 경우 무언가 추가를 하기도 쉽다.
컨테이너의 필요성
우리는 왜 개발에서 독립적이고 표준화된 애플리케이션 패키지를 원하는가?
- NodeJs버전 14.3에서만 동작하는 애플리케이션이 있다고 하자. 이것을 배포할 때 배포하고자 하는 환경에는 어떤 버전이 설치되어있을지 모른다. 다른 버전이 설치되어있다면 애플리케이션이 작동하지 않을 수 있다. 도커 컨테이너는 애플리케이션 구동에 필요한 버전까지 모두 포함되어있기 때문에 이러한 종속성 문제를 해결한다.
- 비슷한 예로, 팀 내 다양한 개발환경이 있을텐데, 같은 노드 애플리케이션을 실행시키고자 하는데, 두 사람간 구성된 환경이 달라 결과가 다르게 나올 수 있다. 도커 컨테이너에서는 항상 동일한 개발환경을 제공해 이러한 번거로움을 없앤다.
- 단독으로 일하는 경우도 예를들어 두가지 프로젝트에서 서로 다른 파이썬 버전을 사용해야 한다고 할 때, 로컬 환경에서는 두 버전이 충돌하거나 꼬일 수 있다. 각각의 프로젝트는 각자의 컨테이너를 갖고 있기 때문에 충돌할 일이 없으며 로컬에서 개발환경을 구성하는 것 처럼 뭔가 제거하고 재설치하는 과정을 거치지 않아도 된다.
VM과 Container의 차이점
독립된 환경에서 구동되기를 원하는 거면 VM 쓰면 되는거 아님? 이라는 생각을 할수도 있다.
vm은 우리의 컴퓨터 안에 가상의 운영체제를 설치한다. 캡슐화된 가상 머신으로 우리가 필요한 모든 도구를 설치할 수 있다. 여러 OS로 구성할수도 있다. 이런점에서는 도커컨테이너와 비슷하다.
문제는 vm은 우리의 실제 컴퓨터에 할당되는 것이기 때문에 cpu, 메모리 등 엄청 많은 리소스가 필요하다는 것이다. 그리고 독립된 가상의 운영체제가 있더라도 여전히 특정 애플리케이션 개발 및 배포를 위한 환경 구성은 해야하는 상황이기 때문에 좀 까다롭다.
도커컨테이너는 우리 컴퓨터 안에 가상 머신을 설치하지 않는다. 대신 우리가 사용하고 있는 운영체제에 내장되어있거나 에뮬레이트 되어있는 지원을 사용하게 된다. Docker Engine을 실행하고, 모든것은 도커엔진에서 돌아가게 된다. config파일을 통해 공유 및 재빌드가 용이하다.
틀린부분 피드백은 언제나 환영입니다.
'docker' 카테고리의 다른 글
[Docker] Volume의 정의, 종류, 터미널에서 사용하는 법 (0) | 2025.02.03 |
---|---|
[Docker] Volume과 Bind Mount의 정의, 필요한 이유 (0) | 2025.02.02 |
[Docker] Image와 Container의 관계, 이미지로 컨테이너 빌드하기 (3) | 2024.09.15 |