Docker는 배포단계에서 내가 만든 소스코드들을 Container화 할 때, 빠르고 편하고 효과적으로 할 수 있도록 도움을 줄 수 있는 라이브러리이다. 여기에서 Docker와 Container라는 개념이 등장하는데, Docker는 현재 웹 개발에서 거의 필수적인 요소가 되었고, Container라는 개념은 다양한 산업 전반에서 사용되는 개념이기 때문에 알아보고 가면 좋을 것 같아 내용을 정리했다.
정리를 하면서 Container가 필요해지므로 인해, Docker가 탄생된 것을 알게 되었고, Docker에 대해 조금 더 깊은 이해가 필요한 단계에서 많은 도움이 되었기에 해당 내용을 같이 정리했다.
# 전통적 배포
물리적으로 존재하는 컴퓨터 한 대에 하나의 OS를 설치하고 여러가지 프로그램을 배포하는 방식. 어떤 프로그램을 설치하거나 배포했을 때 다른 프로그램에 영향을 미칠 수 있다. (OS를 공유하기 때문)
# 가상화 배포
가상머신(Virtual Machine)을 기반으로 배포하는 것을 말하며, OS위에 하이퍼바이저라는 계층을 하나 더 두고, 하이퍼바이저 위에 여러 가상머신으로 여러 OS를 기반으로한 가상의 컴퓨터를 만들어 그 각각의 가상의 컴퓨터에서 프로그램을 배포하는 방식이다.
여기에서 등장하는 가상머신은 컴퓨터의 모든 하드웨어적 부품들과 기능들을 에뮬레이션(emulation) 즉, 하드웨어로써 존재하는 부품들이 가지고 있는 기능들을 소프트웨어적으로 구현해주는 역할을 한다. 쉽게는 컴퓨터가 데이터를 저장하기 위해 필요한 하드디스크는 사실 실물로 존재하는 하드웨어로써 역할을 할 수 있지만, 하드디스크를 에뮬레이션하게 되면 실물로 존재하지 않아도 소프트웨어가 하드디스크의 역할을 할 수 있음을 말한다.
다만, 이러한 가상머신을 기반으로 한 가상화 배포는 OS가 공유되지 않기 때문에 하나의 가상의 컴퓨터에 하나의 OS가 설치되어야 하며, 용량이 거대한 OS를 많이 사용하기 때문에 그만큼 비용이 증가할 수 밖에 없는 단점이 존재한다.
# 컨테이너 배포
여기에서 등장하는 컨테이너(Container)의 개념은 작성한 소스코드와 node.js나 라이브러리 등 종속성을 가지고 있는 것들을 하나의 패키지로 만들 수 있는 소프트웨어의 표준 단위이며, 컨테이너 런타임 환경을 중간에 만들고, 그 위에서 OS를 설치하는 것이 아닌 OS의 역할을 할 수 있는 최소 단위의 요소들만 넣어둔다.
결론적으로 컨테이너와 가상머신은 같은 역할(하나의 컴퓨터이지만 다른 컴퓨터라고 인식하게 만듬)이지만, 컨테이너는 격리성은 조금 완화하여 OS를 공유하기 때문에 경량화 되어있다고 할 수 있고, 경량화는 곧 비용과 속도 측면에서 우위가 있다는 뜻이다. 일반적으로 컨테이너 배포가 가상화 배포보다 약 5배 더 많은 애플리케이션을 실행할 수 있다고 한다.
# 도커
도커는 내 애플리케이션을 컨테이너화 시키고, 그 컨테이너를 실행하는 기능을 제공하는 플랫폼이다.
도커가 애플리케이션을 컨테이너화 시켜 실행시키는 순서는 다음과 같다.
1. 도커파일 작성 : 컨테이너에 설치해야하는 패키지나 환경변수 등을 기록한 파일
2. 도커이미지 생성 : 도커가 도커파일에 작성된 단계에 따라 컴퓨터의 상태를 '스냅샷'으로 저장한다. (스크린샷을 찍어둔다고 생각하면 편함)
3. 컨테이너 : 도커가 생성된 도커이미지를 실행할 때 생성되는 인스턴스. 컨테이너는 이미지에 지정된 프로그램과 데이터를 사용해 일반적인 컴퓨터와 연결되어서 사용이 가능하다.
'Computer Science' 카테고리의 다른 글
디자인 패턴의 의미와 여러가지 디자인패턴 (0) | 2023.02.11 |
---|---|
클라우드(Cloud)의 개념과 클라우드를 기반으로 한 서비스 (0) | 2023.02.07 |
개발자 필수(?)지식 (0) | 2023.02.07 |