1. 도커란?
도커는 컨테이너를 생성하고 관리하기 위한 도구이다.
2. 컨테이너란?
소프트웨어 개발에서 컨테이너란 표준화된 소프트웨어 유닛이다.
이는 기본적으로 코드 패키지이며 해당 코드를 실행하는데 필요한 종속성과 도구가 포함되어있다.
예를 들어 NodeJS 애플리케이션을 구축하는 경우 NodeJS는 서버에서 js코드를 실행하는데 사용할수 있는 런타임이다.
도커로 빌드된 컨테이너에는 애플리케이션 소스 코드 뿐만 아니라 코드를 실행하는데 필요한 기타 도구가 있을수 있다.
동일한 NodeJS코드와 동일한 NodeJS도구를 사용하는 동일한 컨테이너는
항상 동일한 버전을 사용하는 동일한 js런타임에 항상 동일한 동작과 결과를 제공한다.
3. 컨테이너의 필요성
개발을 하다 보면 버전에 따라 실행이 안되는 코드도 있다.
코드를 실행시키기 위해서는 모두 똑같은 환경이 필요한데 이 때문에 컨테이너가 필요하다.
특정 노드 버전을 도커 컨테이너에 고정할수 있으므로 코드가 항상 정확한 버전으로 실행되도록 할 수 있다.
팀프로젝트에서 팀원끼리 다른 Node버전을 사용하여 충돌이 일어나는걸 방지할 수 있다.
혼자작업할때에는 오래전 작업해논 파일과 최근 작업한 파일의 버전이 달라 충돌할 수 있는걸 방지해준다.
도커는 각 버전을 컨테이너에 보관하고 각각 프로젝트에는 그들만의 컨테이너가 존재하도록 한다.
호스트 컴퓨터가 아닌 컨테이너에 모든것이 있기 때문에 충돌을 막을 수 있다.
4. 가상머신
(1) 가상머신
호스트 운영체제에 독립적인 자체 셀을 지닌 캡슐화된 가상 운영체제를 지닌 가상머신이 해결책이 될수도 있다.
호스트 운영체제 windows, macOS, Linux 그 위에 가상머신을 설치한다는 것이다.
가상머신에는 그 가상머신 내부에서 실행되는 자체 운영체제인 가상 운영체제가 있다.
이 가상머신은 컴퓨터와 같기 때문에 가상버신 내부에 추가 도구를 설치할 수 있다.
프로그램에 필요한 모든것을 설치하고 코드를 옮길수 있기 때문에 도커의 컨테이너와 동일한 결과를 얻을수 있다.
하지만 프로젝트를 추가할때마다 매번 새로운 컴퓨터를 머신 내부에 설치해야 하기때문에
메모리, CPU, 하드 드라이브의 공간을 낭비하고 효율이 떨어진다.
(2) 가상머신의 장단점
장점
분리된 환경을 생성할 수 있다.
그 안에 환경별 구성을 가질수 있다.
모든것을 안정적으로 공유하고 재생산 할수 있다.
단점
중복복제, 즉 낭비되는 공간이 발생한다.
호스트 시스템 위에 추가 시스템이 실행되고 있기 때문에 성능이 나빠질수 있다.
재생산, 공유가 가능하더라도 원하는 모든 시스템에 그 가상머신을 설정해야 한다.
(3) 컨테이너와 차이점
컨테이너의 특징
컨테이너를 사용하면 여전히 호스트 운영체제가 존재하지만 하나의 머신에 몇대의 머신을 설치하지는 않는다.
대신 운영체제가 기본적으로 내재하고 있거나 컨테이너 애뮬레이트를 지원하는 내장 컨테이너를 활용한다.
가상머신에 설치하는것보다 훨씬 작은 운영체제의 가벼운 버전일 뿐이다.
가상머신보다 운영체제와 시스템에 미치는 영향이 적고 매우빠르다.
가상머신보다 최소한의 디스크 공간을 사용하며 공유, 재구축 및 배포하는것이 매우 쉽다.
가상머신보다 앱에 필요한 모든것을 캡슐화한 앱과 환경을 보유하지만 쓸데없는 부가적인것이 없다.
'개발 > Docker' 카테고리의 다른 글
[Docker] 도커 마운트 경로 오류 (0) | 2022.12.14 |
---|---|
[Docker] DockerHub 사용하기 (0) | 2022.12.13 |
[Docker] Docker 명령어 (0) | 2022.12.13 |
[Docker] Dockerfile (0) | 2022.12.13 |
[Docker] 이미지와 컨테이너 (0) | 2022.12.13 |