✔ 어떠한 프로그램을 다운 받는 과정을 굉장히 간단하게 만들기 위해서
✔ 도커를 이용하여 프로그램을 설치하면 예상치 못한 에러도 덜 발생하며, 설치하는 과정도 훨씬 간단해진다.
✔ 컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구이며, 컨테이너 기반의 오픈소스 가상화 플랫폼이며 생태계입니다.
✔ 컨테이너 안에 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줍니다. 일반 컨테이너의 개념에서 물건을 손쉽게 운송 해주는 것 처럼 프로그램을 손쉽게 이동 배포 관리를 할 수 있게 해줍니다. AWS, Azura, Google cloude등 어디서든 실행 가능하게 해줍니다.
✔ 컨테이너는 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 소프트웨어의 표준 단위이다.
=> 현재까지 여러가지 방향으로 컨테이너를 정의할 때 간단하고 편리하게 프로그램을 실행시켜 주는 것으로 정의하고 있다.
✔ 컨테이너 이미지는 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용 프로그램을 실행하는데 필요한 모든 것을 포함 하는 가볍고 독립적이며 실행 가능한 소프트웨어 패키지 이다.
✔ 또한 컨테이너 이미지는 런타임에 컨테이너가 되고 도커 컨테이너의 경우 도커 엔진에서 실행될 때 이미지가 컨테이너가 된다.
✔ 리눅스와 윈도우 기반 애플리케이션 모두에서 사용할 수 있는 컨테이너화된 소프트웨어는 인프라에 관계없이 항상 동일하게 실행된다.
✔ 컨테이너는 소프트웨어 환경으로부터 격리시키고 개발과 스테이징의 차이에도 불구하고 균일하게 작동하도록 보장한다.
먼저 도커 CLI에 커멘드를 입력한다.
그러면 도커 서버( 도커 Daemon )이 그 커멘드를 받아서 그것에 따라 이미지를 생성하든 컨테이너를 실행하든 모든 작업을 하게 된다.
도커 클라이언트에 커멘드를 입력하고 클라이언트에서 도커 서버로 요청을 보냄
서버에서 hello-world라는 이미지가 이미 로컬에 cache가 되어 있는지 확인
현재는 없기에 Unable to find image 'hello-world:latest' locally 라는 문구가 출력
그러면 Docker Hub에서 해당 이미지를 가져오고 로컬 cache로 보관
그 후 이제는 이미지가 있으니 그 이미지를 이용해 컨테이너를 생성
그리고 이미지로 생성 된 컨테이너는 이미지에서 받은 설정이나 조건에 따라 프로그램을 실행
한대의 서버를 하나의 용도로만 사용
남는 서버 공간 그대로 방치
하나의 서버에 하나의 운영체제, 하나의 프로그램만을 운영...
안정적 But 비효율적
논리적으로 공간을 분할하여 VM이라는 독립적인 가상환경의 서버 이용가능
하이퍼 바이저는 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게 하는 소프트웨어, 그리고 하드웨어를 가상화하면서 하드웨어와 각각의 VM을 모니터링 하는 중간 관리자이다.
도커 컨테이너와 가상 머신은 기본 하드웨어에서 격리된 환경 내에 어플리케이션을 배치하는 방법입니다.
격리된 환경을 얼마나 격리를 시키는지의 차이
VM과 비교했을 때 컨테이너는 하이퍼바이저와 게스트 OS가 필요하지 않으므로 더 가볍다
어플리케이션을 실행할 때는 컨테이너 방식에서는 호스트 OS위에 어플리케이션의 실행 패키지인 이미지를 배포하기만 하면 되는데 VM은 어플리케이션을 실행 하기 위해서 VM을 띄우고 자원을 할당한 다음 게스트 OS를 부팅하여 어플리케이션을 실행해야 해서 훨씬 복잡하고 무겁게 실행해야 한다
📌 이미지는 응용 프로그램을 실행하는데 필요한 모든 것을 포함하고 있다.
컨테이너가 시작 될 때 실행되는 명령어 ex) run kakaotalk
파일 스냅샷 ex) 컨테이너에서 카카오톡을 실행하고 싶다면 카카오톡 파일(카카오톡을 실행하는데 필요한 파일) 스냅샷
파일 스냅샷은 디렉토리나 파일을 카피한 것
Docker 클라이언트에 docker run <이미지> 입력
도커 이미지에 있는 파일 스냅샷을 컨테이너 하드 디스크에 옮긴다
이미지에서 가지고 있는 명령어 (컨테이너가 실행될때 사용될 명령어)를 이용해서 카카오톡을 실행시켜준다.
컨테이너를 격리 시킬 수 있는 이유는 C-group과 네임스페이스를 이용해서이다.
그러나 생각해보면 C-group과 네임스페이스는 리눅스 환경에서 실행되는 것인데 어떻게 도커 환경에서 쓸 수 있는가...❓
하드웨어 => MacOs / Windows => 리눅스 VM => 리눅스 커널
✔ 리눅스 VM이 깔려있어 리눅스 커널을 사용해 C-group과 네임스페이스를 사용할 수 있다