도커없이 프로그램을 다운받고 실행한다면 갖고 있는 서버, 패키지 버전, 운영체제 등에 따라 많은 에러가 발생할 수 있다. 이러한 설치 과정을 단순하게 해주는 것이 도커다.
(1) 도커 없이: redis 홈페이지 이동 -> 하라는 대로 함 -> wget 설치 ~~ 복잡
(2) 도커로: docker run -it redis
위와 같이 예상치 못한 에러가 덜 발생하며 설치하는 과정도 훨씬 간단해진다.
컨테이너를 사용해 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구이며 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
일반적인 컨테이너의 개념은 물건을 넣고 다양한 운송 수단으로 옮길 수 있는 것인데, 서버에서의 container도 마찬가지로 레디스와 같은 프로그램을 이동, 배포, 관리를 할 수 있게 해준다.
응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 가볍고 독립적이며 실행 가능한 소프트웨어 패키지
카카오톡을 예로 들자면 카카오톡에 필요한 모든 설정, 종속성들을 가지고 있는 것이다. 이를 컨테이너에서 프로그램을 실행한다.
즉, 도커 이미지를 이용해 컨테이너를 생성하고, 도커 컨테이너를 이용해 프로그램을 실행하는 것이다.
하나의 서버를 하나의 용도로 사용, 남는 서버 낭비 but 안정적
논리적으로 공간을 분할해 VM이라는 독립적인 가상 환경의 서버 이용 가능하게 되었다.
여기서 하이퍼 바이저란, 다수의 게스트 OS를 구동할 수 있는 소프트웨어, 하드웨어를 가상화하면서 하드웨어와 각각의 VM을 모니터링하는 중간 관리자다.
주로 사용하는 방식은 호스트형 하이퍼 바이저인데, 일반적인 소프트웨어처럼 호스트 OS위에서 실행되며 하드웨어 자원을 VM 내부의 게스트 OS에 에뮬레이트 하는 방식이다.
<호스트형 하이퍼 바이저>
위처럼 격리가 되어있기에 하나가 에러가 발생한다면 다른 VM에 영향을 받지 않는다는 장점이 있다.
이러한 격리된 환경 내에 어플리케이션을 배치한다는 점에 발전해 도커가 등장하게 되었다.
<도커>
동작 방식은 비슷하지만, 컨테이너는 하이퍼바이저와 게스트 OS가 필요하지 않는다.
도커는 호스트 OS에 이미지를 배포하면 되는데, VM은 게스트 OS를 부팅해 어플리케이션을 실행 해야 한다.
C Group, Namespace를 이용해서 컨테이너 기술을 사용할 수 있다.
C Group: CPU, 메모리, Network Bandwith 등 프로세스의 그룹을 관리한다. 어떤 어플이 사용량이 너무 많다면 C Group에 넣어 사용을 제한한다.
Namespace: 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술
이 기술을 이용해 하드 디스크, 네트워크, RAM, CPU를 프로세스를 작동시키는데 필요한 양만큼 격리해 컨테이너로 관리한다.
❗️ 하지만 이들은 리눅스 환경에서 사용되는데 ..
docker version
명령어를 사용한다면, OS가 linux로 되어 있다. 즉, docker는 결국에 리눅스 환경에서 돌아가고 있다.
이미지는 응용 프로그램을 실행하는데 필요한 모든 것을 포함하고 있다. 여기서 그 필요한 것은 다음과 같다.