ComputerScience/Docker

[Docker] 0. Docker란?

kyungmin.yu 2019. 4. 10. 18:23

이번에 네트워크 스터디를 시작하면서 Docker에 대해 공부하게 되었다.

 

회사에서 Docker 이미지를 구동만 시켜봤지 실제로 만들어 보지 않아서 기초부터 공부해야 할 필요를 느꼈다고나 할까..

 

아무튼 지금부터 시작

 

Docker란? 

컨테이너 기반의 오픈소스 가상화 플랫폼으로, 다양한 프로그램, 실행 환경을 컨테이너로 추상화 하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줌

 

테이너

컨테이너는 격리된 공간에서 프로세스가 동작하는 기술로 보통 알고 있는 VMWare, Virtual Machine같은 프로그램에서는 주로 OS를 가상화 하였으나 이 경우에는 비교적 사용법이 간단하지만, 느려서 운연 환경에서는 사용하기 힘들다는 단점이 있음.

 

이러한 문제 때문에 CPU의 가상화 기술(HVM) 이용한 KVM(Kenel-based Virtual Machine)과 반가상화(Paravirtualization)방식의 Xen이 등장함. 이런 방식은 OS 전체를 가상화 하는 것이 아니었기 때문에 호스트형 가상화 방식에 비해 성능이 향상 됨어찌 되었든 추가적인 OS를 설치한다는 점에서 성능 문제가 발생함.

   

그래서 생겨난 것이 프로세스를 격리하는 방식. 

리눅스에서는 이 방식을 리눅스 컨테이너라고 하고 단순히 프로세스를 격리하기 때문에 가볍고 빠르게 동작함, CPU나 메모리는 프로세스가 필요한만큼만 사용하며, 성능적으로 손실이 거의 없음

 

이미지

Docker에서 가장 중요한 개념은 컨테이너와 함께 이미지라는 개념. 이미지는 컨테이너 실행에 필요한 파일과 설정 값들을 포함하고 있는 것으로 상태 값을 가지지 않고 변하지 않음(Immutable) 컨테이너는 이미지를 실행한 상태로 볼 수 있고, 추가되거나 변하는 값은 컨테이너에 저장됨, 같은 이미지에서 여러 개의 컨테이너를 생성할 수 있고 컨테이너의 상태가 바뀌거나 삭제되더라도 이미지는 변하지 않음.

 

Ubuntu이미지는 Ubuntu 실행을 위한 모든 파일을 가지고 있고, MySQL이미지는 debian을 기반으로 MySQL을 실행하는데 필요한 파일과 실행 명령어, 포트 정보등을 가지고 있음, Gitlab이미지의 경우 centos를 기반으로 ruby, go, database, redis, gitlab source, nginx를 가지고 있음 이미지는 컨테이너를 실행하기 위한 모든 파일을 가지고 있기 때문에 더 이상 의존성 파일을 컴파일 하고 설치할 필요가 없게됨

 

 

참조: https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

'ComputerScience > Docker' 카테고리의 다른 글

[Docker] 5. Docker Container Life Cycle  (0) 2019.04.26
[Docker] 4. Docker 명령  (0) 2019.04.16
[Docker] 3. Docker 실행  (0) 2019.04.16
[Docker] 2. Docker 설치  (0) 2019.04.12
[Docker] 1. Docker의 기능  (0) 2019.04.10