[TIL]

Dev_min·2020년 5월 25일
0

TIL

목록 보기
41/61

Why Docker ?

: 컨테이너(Docker)는 애플리케이션을 환경에 구애받지 않고 실행하는 기술이다. Docker가 설치되어 있다면 어느 환경이든 상관 없이 설정한 명령어를 사용하여 실행할 수 있다.

Docker는 반 가상화보다 경량화된 방식이고. 게스트 OS를 설치하지 않는다. 그리고 Docker에서는 분리된 공간을 이용해 서버 운영을 위한 프로그램과 라이브러리를 쉽게 설치할 수 있다. 하드웨어를 가상화하는 계층(Hyper-V)이 없으며, 호스트의 자원을 직접 이용하기 때문에 메모리 접근, 파일시스템, 네트워크 속도가 가상머신에 비해 월등히 빠르다. 그러므로, 메인 호스트와 Docker의 컨테이너 사이의 계층과 성능차이는 크게 발생하지 않는다.

Docker는 LXC(Linux Container)에서 사용하는 리눅스 커널 컨테이너 기술을 이용해 만든 컨테이너 관리 유틸리티이며, Build, Ship, Run Docker는 서비스 운영환경을 묶어서 손 쉽게 배포하고 실행하는 경량컨테이너 기술이다.
AWS, Google Cloud Platform, Azure에서 공식 지원 중

Docker가 지닌 장점

  1. 개발 프로그램 설치와 삭제가 매우 쉽다
  2. Docker의 컨테이너에 대한 개념은 network에 대한 지식 그리고 cloud platform(GCP, AWS, Azure)의 이론을 간접적으로 익힐 수 있다.
  3. 극 초기의 각종 셋팅을 포함한 아키텍처를 만들때, 스크립트로 짜 놓기만 하면 모두가 같은 환경을 이용할 수 있다.
  4. 컨테이너 이미지 생성 및 공유할 수 있다. 그러기 위해서 Docker에서는 github처럼 docker hub란 것이 존재한다.
  5. docker-compose라는 여러 Docker 컨테이너를 통합적으로 관리하는 cli 프로그램으로써 docker를 설치하면 번들로써 제공한다.
  6. docker-compose.yml 파일을 이용하면 컨테이너들의 구성(아키텍쳐)을 공유할 수 있다.
  7. 컨테이너 기반을 이용하여 단순한 저장공간 컨테이너(볼륨)를 만들어 저장공간을 container끼리 연결할 수 있으며, 실행한 호스트의 저장공간에도 접근가능하다.
  8. Docker는 게스트 OS를 설치하지 않는다. 단지 이미지에 서버 운영을 위한 프로그램과 라이브러리만 격리해서 설치하기 때문에 이미지 용량이 크게 줄어든다.
  9. Docker의 컨테이너는 OS를 설치하지 않기 떄문에 호스트와 OS자원을 직접 사용한다.
  10. Docker는 하드웨어 가상화 계층이 존재하지 않기 때문에 메모리접근, 파일접근 등등 관련한 기능에서 직접 접근하기 때문에 가상화보다 빠른 성능을 보여준다
  11. Docker프로그램에서 다양한 API를 제공하기 때문에 원하는 만큼 자동화가 가능하다. 이 점은 개발과 서버운용에 매우 유용하다.

Docker에 대해 알기전에 알아야 하는 것

가상화가 나오기 직전
: 컴퓨터 안에서 컴퓨터를 만들어내기 위한 시도에 의해 탄생한 기술이다. 1960년대에 가상화라는 개념이 처음 등장하였으며, 컴퓨터 성능이 좋아지면서 PC에서도 사용하게 되었다. 우리가 알고있는 오픈소스 Open Stack, 아마존의 EC2 또는 그 이외의 VPC 호스팅 서비스들이 가상화 서비스의 산물이다.

1. 가상화란 ?
: 가상화는 컴퓨터 리소스의 물리적인 특징을 추상화하며, 사용자에게는 논리적 리소스를 제공한다. 그리고 이를 통하여 다양한 기술적/관리적 이점들을 제공하는 기술이 바로 가상화(Virtualize)이다. 가상화는 사용자와 물리적 리소스간의 Virtualize Layer 구현을 통하여, 컴퓨팅 리소스에 대한 접근 및 인프라 관리를 간소화하는 것을 목적으로 한다.
--> 가상화가 나온 이후로, 서버 자원을 효율적으로 단순히 관리하는 것 뿐만이 아니라, 가상화 기술을 활용해서 물리적 서버를 대여해주는 것이 아닌 가상화로 만들어낸 서버를 대여해주는 호스팅 서비스도 나오게 되었다.

2. 컨테이너란 ?
: 컨테이너는 애플리케이션을 실제 구동환경으로부터 추상화할 수 있는 논리 패키징 메커니즘을 제공한다. 이러한 격리를 통해 사설 데이터나 퍼블릭 클라우드, 심지어 개발자의 개인 노트북 컴퓨터에 이르기까지 어떤 환경으로든 컨테이너 기반 애플리케이션을 쉽게 지속적으로 배포할 수 있다. 또한 컨테이너화를 통해 업무영역을 깔끔하게 분리할 수 있다. 즉, 개발자는 애플리케이션의 로직과 종속 항목에 집중할 수 있고, IT부서는 특정 소프트웨어 버전과 개별 앱 구성과 관련한 세부 업무에 시간을 낭비하지 않고 배포 및 관리에 집중할 수 있다.
컨테이너를 사용하면 개발자와 IT 운영팀이 훨씬 작은 단위로 업무를 수행할 수 있으므로 그에 따른 이점도 훨씬 많다.[Google Cloud - Container정의]

Container를 사용해야 하는 이유

: 가상 머신은 하드웨어 스택을 가상화한다. 컨테이너는 이와 달리 운영체제 수준에서 가상화를 실시하여 다수의 컨테이너를 OS커널에서 직접 구동한다. 컨테이너는 훨씬 가볍고 운영체제 커널을 공유하며, 시작이 훨씬 빠르고 운영체제 전체 부팅보다 메모리를 훨씬 적게 차지한다. Docker는 널리 사용되는 오픈소스 컨테이너 형식으로 Google Cloud Platform과 Google Kubernetes Engine에서 지원된다.

Container와 Image의 차이는 ?

InfraStructure 관점으로 본다면 Image는 실행파일, Container는 프로세스

  • 이미지(Image)

    1. 서비스 운영에 필요한 서버 프로그램, 소스코드, 컴파일된 실행파일을 묶은 형태. 즉, 프로그램을 직접 구동시켜야 한다.
    2. 저장소에 올리고 받는 것은 이미지 : push & pull
    3. 이미지를 실행한 상태
  • 컨테이너(Container)

    1. 컨테이너는 이미지를 이미 실행한 상태
    2. 이미지(Docker에서는 베이스 컨테이너로 명명)로 여러개의 컨테이너를 만들 수 있다.
    3. 베이스 컨테이너로 여러개의 애플리케이션 컨테이너를 만들 수 있다.

[참고 블로그 - 1]
[참고 블로그 - 2]


Docker의 개념 및 다른 개념들을 완벽하게 이해하기 위해서는 조금 더 학습이 필요해 보인다.

  1. Container
  2. 격리
  3. 가상공간
  4. Kernel
  5. 운영체제
  6. 네트워크
profile
TIL record

0개의 댓글