[도커] 1. 도커 기본강의 - 인프런(따라하며 배우는 도커와 CI환경)

 

도커를 쓰는 이유 

: 어떠한 프로그램을 다운 받는 것을 간편하게 하기 위함.

: 갖고 있는 서버, 패키지 버전, 운영체제 에 따라 프로그램을 설치 과정에 다양한 에러 발생 설치과 정이 복잡하다.

 

도커는 무엇인가요?

: 컨테이너를 사용하여 응용 프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구

컨테이너 기반의 오픈소스 가상화 플랫폼 생태계

 

* 컨테이너 : 

일반적으로 컨테이너는 물건을 넣고 다양한 운송 수단으로 쉽게 옮길 수 있음.

서버에서의 컨테이너 개념 - 다양한 프로그램 , 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순. 프로그램을 손쉽게 이동 배포 관리를 할 수 있게 해줌.

다양한 클라우드 환경(AWS, Azure, Google Colud 등) 에서 어디서든 실행 가능함.

 

도커 이미지와 컨테이너 정의

: 컨테이너는 간단하고 편리하게 프로그램을 실행시켜 주는 것.

: 컨테이너 이미지는 코드 , 런타임, 시스테 도구 , 설정과 같은 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 가볍고 독립적이며 실행 가능한 소프트웨어 패키지

: 도커 이미지는 프로그램 실행하는데 필요한 설정이나 종속성을 갖고 컨테이너를 생성

: 도커 컨테이너를 이용하여 프로그램을 실행, 컨테이너는 이미지의 인스턴스

 

도커 설치 - Window 버전

https://www.docker.com/

 

Docker: Accelerated, Containerized Application Development

Docker is a platform designed to help developers build, share, and run modern applications. We handle the tedious setup, so you can focus on the code.

www.docker.com

 

Downlodad Docker Desktop Window 버전 설치

 

도커 허브 계정 가입

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Deliver your business through Docker Hub Package and publish apps and plugins as containers in Docker Hub for easy download and deployment by millions of Docker users worldwide.

hub.docker.com

 

doker version 명령어를 통해서 도커 설치여부 확인

doker version

 

도커를 사용할 때의 흐름

도커를 사용할 때

1. 먼저 도커 CLI 커맨드 입력

2. 도커서버(도커 데몬)이 그 커맨드를 받아 명령에 따라 이미지 생성 또는 컨테이너 실행 등의 모든 작업을 한다.

 

실세 CLI에서 커맨드 입력 예제

1. doker run hello-world

   -> 도커 클라이언트 -> 도커서버 ->  이미지 캐시보관장소(hello-world 이미지 있는지 체크)

   -> 만약 캐시보관소에 없다면 도커허브에서 가져오기 -> 도커허브에서 Pulling

 

도커와 기존의 가상화 기술과의 차이를 통한 컨테이너 이해

 

가상화 나오기 전 : 한대의 서버를 하나의 용도로 사용-> 남는 서버 공간은 그대로 방치 -> 하나의 서버에 하나의 운영체제 

                            : 안정적이긴 하지만 비효율적으로 서버를 사용함.

 

하이버바이저 기반의 가상화 출현 

: 논리적으로 공간을 분할하여 VM이라는 독립적인 가상 환경의 서버 이용 가능

: 하이버 바이저는  호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게 하는 소프트웨어

 

하이버바이저 기반의 VM 구조

: 하이퍼 바이저에 의해 구동되는 VM 은 각 VM마다 독립된 가상하드웨어 자원을 할당받음.

: 논리적으로 분리되어 있어서 한 VM에 오류가 발생해도 다른 VM으로 퍼지지 않는 다는 장점이 있음.

 

-> 이러한 가상화 기술에서 도커가 탄생함.

 

공통점 

: 도커 컨테이너와 가상머신은 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 방법

 

차이점 

: 비교했을 때 Guest OS가 필요하지 않아 더 가볍다.

: 가장 큰 차이는 격리된 환경을 얼마나 격리 시키는 지의 차이

 

도커 컨테이너에서 돌아가는 애플리케이션은 컨테이너가 제공하는 격리 기능 내부에 샌드박스가 있지만, 여전히 같은 호스트의 다른 컨테이너와 동일한 커널을 공유.

결과적으로 컨테이너 내부에서 실행되는 프로세스는 호스트 시스템에서 볼 수 있음.

Ex) 도커,몽고 DB 컨테이너를 시작하면 호스트의 일반 쉘에 ps -e grep 몽고를 실행하면 프로세스가 표시

또한 컨테이너가 전체 OS를 내장할 필요가 없어 매우 가벼움(약 5~100MB)

 

가상머신(VM) 은 VM 내부에서 실행되는 모든 것은 호스트 운영체제 또는 하이퍼바이저와 독립되어 있음.

가상머신 플랫폼은 특정 Vm에 대한 가상화 프로세스를 관리를 위해 프로세스를 시작하고 호스트 시스템은 그것의 하드웨어 자원의 일부를 VM에 할당한다. 그러나 VM과 근본적으로 다른 것은 시작 시간에 이 VM환경을 위해 새롭고 이 특정 VM만을 위한 커널을 부팅 하고 운영체제 프로세스 셋을 시작한다는 것. 이것으로 인해 응용프로그램만 포함하는 컨테이너에 보다 훨씬 VM의 크기를 만든다.  OS 까지 가상화됨. 비교적 사용법은 간단하지만 느리고 무겁다. 

 

 

컨테이너들을 격리 시키는 데 어떻게 도커 컨테이너를 격리 시키는 가??

 

리눅스에서 사용하고 있는 기능

: C Group CPU, 메모리, Network Bandwidth / Hardware IO 등  프로세스 그룹의 시스템 리소스 관리 => 어떤 어플이 사용량이 너무 많다면 사용량을 제한.(CPU,메모리 사용 제한 가능)

: 네임스페이스 하나의 시스템에서 프로세스를 격리시킬 수 있는 기술/ 별개의 독립된 공간을 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술

 

Cgroup과 네임스페이스를 도커에서 사용할 수 있는 이유?

 : 모두 리눅스 기능이지만 다른 운영체제(Window, Mac 등에서도 도커 사용 가능함.)

 

도커 버전으로 실행해서 확인해보면,

doker version

OS는 Linux로 나타남.

-> 리눅스 VM이 깔려 있음. 도커 클라이언트와 도커 컨테이너는 리눅스 커널, 리눅스 VM에서 동작함.

 

이미지로 컨테이너 만들기

이미지는 응용 프로그램을 실행하는 필요한 모든 것을 포함하고 있음.

1. 컨테이너가 시작될 때 실행되는 명령어 ex) run kakaotalk.

2. 파일 스냅샷 : ex) 컨테이너에서 카카오톡 실행하고 싶다면 카카오톡 파일 스탭샷

 

순서

1. 도커 클라이언트에서 doker run <이미지> 입력

 

2. 도커 이미지에 있는 파일 스냅샷을 컨테이너 하드웨어(하드디스크)에 옮긴다.

 

3. 이미지에서 가지고 있는 명령어(컨테이너가 실행될 때 사용될 명령어)를 이용해서 이미지 실행한다.