Docker #01 (도커,,???)

수박·2020년 7월 14일
0

Docker

목록 보기
1/2

## What is Docker?

컨테이너 기반의 오픈소스 가상화 플랫폼
=> 애플리케이션 실행에 필요한 환경을 하나의 이미지로 모아두고 그 이미지를 사용해 다양한 환경에서 실행 환경을 구축, 운용하기 위한 오픈소스 플랫폼


시스템 개발의 흐름을 보면 개발, 테스트, 제품환경마다 작성된 프로그램을 구동시켜야하는데, 각 라인마다 시스템환경을 모두 맞추어줄 수 없으니 그 환경을 하나의 파일로 구축하여 git의 소스 버전관리처럼 개발환경을 파일로 작성할 수 있다.

도커의 기능?

  • 이미지를 만드는 기능(Build)
    - Docker명령어를 사용하거나, Dockerfile이라는 설정파일로 이미지파일을 만들 수 있다.
  • 이미지를 공유하는 기능(Ship)
    - Docker Hub에서 이미지를 배포하고 있다.
  • 컨테이너를 작동시키는 기능(Run)
    - Docker는 Linux 상에서 컨테이너 단위로 서버 기능을 작동시킨다. 컨테이너의 바탕이 바로 Docker 이미지다. Docker명령으로 컨테이너 구동, 정지, 파기를 할 수 있다.

컨테이너

컨테이너란 무엇일까?

컨테이너 : 격리된 공간에서 프로세스가 동작하는 기술!
다양한 OS에 여러 Application이 올려져 있는 것이 Container이고, 이런Container를 도커(플랫폼)위에 올려서 사용할 수 있는 것.

VMware or VirtualBox와 같은 가상머신은 호스트 OS위에 게스트 OS 전체를 가상화하여 사용하는 방식입니다. 여러 OS를 가상화할 수 있지만 무겁고, 느린 단점이 존재.
이를 개선하기 위해 CPU의 가상화기술 Hardware-assisted virtualization, KVM, 반가상화방식의 Xen이 등장, 이런 기술은 OpenStack, AWS와 같은 클라우드 서비스에서의 가상 컴퓨팅 기술의 기반이 되었음.

전, 반가상화는 둘다 가상머신을 생성하고 구동하는 소프트웨어인 HyperVisor를 설치하여 가상화해서 성능문제가 있습니다. 이를 개선하기 위해 프로세스를 격리하는 방식이 등장함.

이 방식을 리눅스에서는 리눅스 컨테이너라고 하고 가볍고 빠르게 동작함.

이미지


컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것, immutable하다.
상태값을 가지고 있지 않음.
예를들어 ubuntu이미지는 ubuntu실행에 필요한 모든 파일을 갖고 있음.
이용자는 해당 도커가 설치되어있고 해당 이미지만 존재하면 별도의 설치없이 ubuntu OS를 이용할 수 있다.
Mysql이미지는 debian기반으로 Mysql실행에 필요한 파일과 명령어, 포트정보등을 갖고 있음.
마찬가지로 이미지만 존재하면 설치과정필요없이 이미지를 pull하면 mysql을 사용할 수 있다.
따라서 이미지는 컨테이너를 실행하기 위한 모든 정보를 갖고 있어서 이미지만 받으면 해당 애플리케이션을 사용할 수 있는 것임!

이미지 하나에 수백MB정도 되기 때문에 (nginx - 약 100메가이상)..
이미지에 파일 하나를 추가했다고, 다시 받는 것은 비효율적임.
예를 들어, A + B + C 에 nginx를 추가한다면 해당 이미지만 받으면 되는데, A + B + C + nginx를 다 받으면 비효율적이라는 것 같음..
이런 문제를 해결하기 위해 도커는 Layer개념을 사용하고 Union File System을 이용해 여러 레이어를 하나의 파일시스템으로 사용할 수 있게 해줌.
출처


Union File System

출처
복수의 파일시스템을 하나의 파일시스템으로 마운트하는 기능.
두 파일시스템에서 동일파일이 있다면 나중에 마운트된 파일 시스템의 파일을 오버레이함. 하위 파일시스템에 대한 작업은 복사본을 생성해 수행하므로 원본 파일 시스템은 변하지 않는 것이 특징.

0개의 댓글