Docker Why We Need
보통 하나의 프로그램은 여러가지 프로그램과 라이브러리를 사용해서 개발하며 배포시 여러가지 환경에 배포해야 한다.
이때 개발에 사용되는 여러 프로그램은 호환되는 OS 와 Libraries 가 있을 것이고
동일한 Library 를 사용하는 두 프로그램이 서로 다른 Version 이 필요하거나
프로그램 사이의 Dependency 로 인해 다른 도구를 찾거나 다른 OS 를 찾거나 하는 등
여러가지 호환성 문제에 직면하게 된다.
도커를 사용하면 프로그램에 필요한 각각의 프로그램과 이 각각의 프로그램에 필요한
Library, OS , Dependency 를 각 요소를 모아 컨테이너에 담고 패키징하여
필요할때 패키징된 이미지를 컨테이너로 실행시켜 사용할 수 있다.
즉 위와 같은 Matrix Hell 상황이 방지되게 된다.
물론 이렇게 나뉘어진 컨테이너가 유기적으로 동작하기 위해서는 네트워크 설정이나 컨테이너 이미지를
관리하는 등의 일을 위한 많은 기능이 필요하지만 Docker 에서 이미 이를 제공하고 있다.
Container
여기서 말하는 컨테이너는 외부와 완벽히 격리된 환경을 말하는데,
OS Kernel 을 공유하는 점을 제외하고
각각이 모두 하나의 VM 처럼 컨테이너 마다 프로세스가 실행되고
자신의 Network 를 가지며 자기 자신의 Mount 를 가진다.
보통 OS 를 보면 OS Kernel 과 Software 로 이뤄지는데
Linux 계열의 OS 는 모두 OS Kernel 이 동일하며 기본 하드웨어와의 상호 작용을 담당하고
Software 는 UI, 드라이버, 컴파일러, 파일 관리자, 개발자 도구 등으로 구성되어 각 OS 별로 다르다.
그래서 Docker 컨테이너는 서로 다른 OS 를 선택하여 사용해도 이상없이 동작한다.
다만 Window OS 는 OS Kernel 이 다르기 때문에 Linux OS 가 설치된 도커 호스트에서
Windows 기반 컨테이너를 실행할 수 없다.
'Container > Docker' 카테고리의 다른 글
07. Docker Image (0) | 2020.01.14 |
---|---|
06. Docker Run (0) | 2020.01.14 |
04. Docker CE 설치하기 (0) | 2020.01.14 |
03. Docker 시스템 (0) | 2020.01.14 |
02. 가상 머신과 Docker (0) | 2020.01.14 |