-
Docker 를 왜 사용할까?Computer Science/Software Engineering 2022. 8. 9. 21:46
Docker 를 왜 사용할까?
우선 도커란 무엇일까요?
도커는 어플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다.
Linux 의 응용 프로그램들을 프로세스 격리 기술들을 사용해서 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다.그렇다면 컨테이너란 무엇이고 왜 사용해야 할까요?
컨테이너
컨테이너는 표준화된 소프트웨어 유닛 또는 패키지이며, 해당 코드가 실행하는데 필요한 종속성과 도구 등이 포함되어 있습니다.
예를 들어보면 큰 배나 트럭에 싣는 컨테이너에 비유할 수 있습니다.
컨테이너에는 다양한 것들을 담을 수 있지만, 담고 난 뒤에는 격리되어 자체적으로 보관됩니다.왜 Docker 와 컨테이너일까?
1. 팀/회사 내에 다른 개발/생산 환경
실제로 협업에서는 팀 또는 회사에 속한 개발자마다 각기 다른 개발/생산 환경을 가지고 있다는 보장이 없습니다.
예를 들면 로컬에 있는 Node 14.x.x 버전으로 개발 및 테스트를 거친 뒤, 배포를 했다고 가정해보자.
하지만 실제로 배포하려는 서버의 Node 버전은 12.x.x 를 사용하고 있기 때문에 어플리케이션이 제대로 작동하지 않는 경우가 발생할 수도 있습니다.그렇기에 도커와 컨테이너는 큰 도움이 된다.
환경(Node, JVM...) 별 버전을 지정할 수 있기 때문에 코드가 항상 정확한 버전으로 실행되도록 할 수 있습니다.2. 프로젝트 별 충돌
내가 진행하고 있는 프로젝트 A 에서는 최신 버전의 Python 을 사용하고, 프로젝트 B 에서는 Python2 를 사용하고 있다고 가정해봅시다.
충돌하는 버전이 존재할 수 있고, 프로젝트 A 와 B 간에 전환을 할 때마다 버전을 제거하고 설치하는 등의 작업을 반복해야 합니다.하지만 도커와 컨테이너는 이러한 프로젝트 간의 버전을 제거하고 설치하는 등 불필요한 작업을 하지 않도록 해결합니다.
각각의 버전을 컨테이너에 보유하고 프로젝트별로 그들만의 컨테이너가 존재하도록 하면 되기 때문입니다.Virtual Machines(가상머신)/OS vs Docker 컨테이너
근데 이러한 환경 문제는 가상머신을 통해 해결할 수 있지 않은가?
가상머신을 사용한다는 것은 Host 운영체제인 Windows, MacOS, Linux 등이 있고 그 위에 가상머신을 설치한다는 것이다.
즉, 컴퓨터 내부에 새로운 컴퓨터를 설치하는 것입니다.
이것은 완전히 다른 가상의 컴퓨터가 설치되어 캡슐화 된 것이기 때문에 필요한 모든 라이브러리, 종속성 및 도구 등을 설치할 수 있다.
그리고 이것은 도커, 컨테이너와 동일한 결과를 얻을 수 있습니다.
하지만 몇 가지 문제가 존재합니다.문제. 여러 개의 Virtual Machine 에서 발생하는 오버헤드
하나의 컴퓨터에서 매번 새로운 컴퓨터(Virtual Machine) 를 내부에 설치해야 되고,
이 때문에 메모리, CPU, 하드웨어 공간을 낭비하게 됩니다. 그리고 Virtual Machine 이 많아진다면 문제가 될 것입니다.
특히 OS(운영체제) 는 동일하게 복제되어 존재하는 경우가 빈번합니다.장점
- 분리된 환경을 생성할 수 있다.
- 환경 별 다른 구성을 가질 수 있다.
- 모든 것을 안정적으로 공유하고 재생산할 수 있다.
단점
- 중복, 복제로 인해 낭비되는 공간이 발생된다.
- 새로운 컴퓨터를 설치하는 것이기 때문에 성능이 저하될 수 있고, 실제로 여러 개일 경우 성능은 저하된다.
- 재생산 및 공유 시에 정확히 동일한 방식으로 구성해야 하기 때문에 까다로울 수 있다.
Docker 가 Virtual Machine 보다 더 나은 이유는?
Docker 컨테이너를 사용할 경우 하나의 컴퓨터에 여러 대의 추가적인 컴퓨터를 설치하지 않아도 됩니다.
그 대신, 운영체제가 기본적으로 운영체제가 내재되어 있거나 컨테이너 애뮬레이터를 지원하는 내장 컨테이너를 활용합니다.- 애뮬레이터: 다른 컴퓨터 또는 프로그램을 모방하는 컴퓨터나 프로그램
그리고 그 위에 도커 엔진이라는 툴을 실행하고 여러 개의 컨테이너로 분리합니다.
컨테이너에는 소스 코드와 코드를 실행하기 위해 필요한 툴 및 런타임이 포함되어 있지만 여러 개의 운영체제들이나, 수 많은 툴 등을 포함하지는 않습니다.
컨테이너 내부에 작은 운영체제 계층이 있을 수 있지만 Virtual Machine 에 설치하는 것보다 훨씬 작고 가벼운 버전입니다.Config 파일을 통해서 컨테이너를 구성하고 이를 설명할 수 있다는 장점이 있습니다.
또한 이를 공유함으로써 다른 사람들이 컨테이너를 다시 만들 수 있도록 하거나 컨테이너 이미지를 빌드할 수도 있습니다.
그리고 컨테이너 이미지를 통해 모든 사람의 시스템에서 동일한 컨테이너를 시작할 수 있도록 할 수 있습니다.Docker Container
- 운영체제와 시스템에 미치는 영향이 적고, 매우 빠른 속도를 제공한다.
- 이미지와 Config 파일을 통해 공유, 재구축 및 배포하는 것이 매우 쉽다.
Virtual Machines
- 운영체제에 많은 영향을 미치고, 속도가 느리며, 디스크 공간을 비교적 더 많이 차지 한다.
- 공유, 재구축 및 배포를 모두 수행할 수는 있지만 Docker 에 비해 까다로울 것이다.
- 환경 자체를 캡슐화하는 것은 맞지만, 컴퓨터 환경 자체를 캡슐화 하기에 중복되는 것이 많다.