웹 개발을 한다면 웹 서버, 데이터베이스 등을 설치해야 한다.
이것들을 설치하는 것은 여간 까다롭고 귀찮은 일이 아니다.
웹 서버를 만든 사람이 컴퓨터를 구해서 운영체제를 설치하고, 그 위에 웹 서버와 데이터베이스를 설치해서 우리에게 준다면 아주 편리할 것이다.
그리고 우리의 앱이 네트워크로 통신해서 이것들을 사용하면 아주 좋겠지만,
이렇게 하면 컴퓨터가 세 대나 필요하므로 비용이 많이 든다.
기존의 가상화 기술은 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식이었다.
하나의 컴퓨터에 가상으로 컴퓨터를 만들고 그 위에 운영체제를 설치해 웹 서버를 설치한다면, 컴퓨터를 별도로 장만하지 않아도 된다.
(vmware, virtualbox가 이런 방식)
운영체제는 용량이 크고, 운영체제 위에서 운영체제를 돌리면 실행 속도도 느려지기 때문이다!
가상 머신은 완벽한 운영체제를 생성할 수 있다는 장점이 있지만, 일반 호스트에 비해
성능 손실이 있으며, 수 기가바이트에 달하는 가상 머신 이미지를 애플리케이션으로 배포하기는 부담스럽다.
한 대의 컴퓨터 안에서 격리된 환경에서 각각의 앱을 실행시킨다.
각각의 컴퓨터에는 운영체제 전체가 설치된 것이 아니고,
앱을 실행하는 데 필요한 라이브러리와 실행 파일(lib, bin)만 존재한다.
이렇게 하면 이미 존재하는 운영체제를 공유하므로 운영체제를 별도로 설치하지 않아도 되고,
운영체제가 하나이므로 속도도 느려지지 않는다.
👉🏻 시간도 절약하고 저장 장치의 용량도 아낄 수 있다.
리눅스 운영체제에는 이러한 앱 실행방법이 내장되어 있다.
이러한 기술을 container라고 부른다.
이 container 기술을 이용해서 이 일을 쉽게 해주는 소프트웨어들 중 제일 잘나가는 docker를 알아보자!!
Docker는 부두에서 컨테이너를 다루는 노동자들을 의미한다.
도커 컨테이너는 가상화된 공간을 생성하기 위해 리눅스의 자체 기능인 chroot, 네임스페이스, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만든다.
성능의 손실이 거의 없다.
컨테이너를 이미지로 만들었을 때 이미지의 용량 또한 가상 머신에 비해 대폭 줄어든다.
애플리케이션의 개발과 배포가 편해진다.
- 독립된 개발 환경을 보장받을 수 있다.
- 개발/운영 환경의 통합이 가능해진다.
- 배포 속도가 매우 빨라진다.
여러 애플리케이션의 독립성과 확장성이 높아진다.
- 컨테이너는 수 초 내로 생성, 시작이 가능하다.
- 여러 모듈에게 독립된 환경을 동시에 제공할 수 있다.
👉🏻 위 두가지 이유로, 마이크로서비스 구조에서 가장 많이 사용되고 있는 가상화 기술이다.
docker와 같은 컨테이너 기술은 리눅스 운영체제의 기술이다.
도커 위에서 돌아가는 컨테이너, 또 컨테이너 안에서 동작하는 각각의 앱들은 리눅스 운영체제에서 동작하는 앱들이다.
자신의 컴퓨터가 리눅스가 아닌 window나 mac이라면,
가상 머신을 깔고 가상머신에 리눅스 운영체제를 깔아서 도커와 같은 컨테이너 기술을 사용할 수 있다.
이렇게 하는 것은 굉장히 어렵고 까다로워 보이지만,, 돈워리!
도커가 알아서 가상머신을 깔고 리눅스를 설치해준다!
그럼에도, 도커를 사용하는 이유는 도커를 사용했을 때의 편의성이 어마어마하기 때문이다~!
👇🏻 설치 ㄱㄱ
https://docs.docker.com/get-docker/
도커는 GUI보다는, 명령어(terminal)을 이용해서 제어해야 도커의 풀파워를 발휘할 수 있다.ㅎㅎ
docker images
위 명령어를 입력했을 때 에러가 나지 않는다면, 설치가 완료된 것!
진짜 도커는 누구입니까 ㅠㅠ 잘보고 갑니다~