도커 정리 (이론편) 🐳
# DevOps/Docker

도커 정리 (이론편) 🐳

도커란 무엇인가

  • 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
  • 다양한 이유로 계속 바뀌는 서버 환경과 개발 환경 문제를 해결하기 위해 등장했다.
  • AWS, Azure, Google cloud 등 어떤 환경에서도 돌아간다.
  • 컨테이너 관리 도구 중 가장 유명한 것

백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화할 수 있다.

 

컨테이너의 장점

  • 하드웨어를 가상화하는 가상 머신과 달리 커널을 공유하는 방식이기 때문에 실행 속도가 빠르고, 성능 상의 손실이 거의 없음
  • 하나의 운영체제 안에서 커널을 공유하며,  CPU, 네트워크, 메모리와 같은 시스템 자원을 독자적으로 사용하도록 할당된 환경을 제공하는 격리된 공간 
  • 호스트 머신에게는 프로세스로 인식되지만, 컨테이너 관점에서는 독립적인 환경을 가진 가상머신 처럼 보임

 

도커의 장점

  • 확장성과 이식성이 좋다
    • 특정 회사나 서비스에 종속적이지 않고, 도커가 설치된 곳이라면 어디든 실행 가능
  • 도커 컨테이너라는 표준으로, 배포 과정을 통일시킬 수 있다.
  • VM은 OS를 포함해 무거운 반면, 도커는 컨테이너의 개념으로 컨테이너 엔진에 실려 가볍게 운용 가능함
  • 백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화
  • 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 함

 

 

도커의 동작 방식

 

 

도커의 3대 구성 요소(Docker File, Image, Container)

1. Docker File

  • 어플리케이션을 구동하기 위한 Dependency, 환경 변수, 스크립트 등을 포함할 수 있음.
  • 이미지 생성 방법을 정의하는 문서
  • DockerFile 명령어는 위에서 한 줄씩 차례대로 실행됨.

 

 

2. Image

Docker File을 이용해 Image를 만든다.

컨테이너를 실행하기 위한 압축파일

실행되고 있는 Application의 상태를 스냅샷으로 남긴다고 생각

만들어진 Image는 불변의 상태

 

 

3. Container

Image를 이용해서 Application이 동작하는 Container를 만든다.

이렇게 생성된 각각의 Container는 개별적으로 동작하고 Image에 영향을 끼치지 않는다.

 

 

 

도커 이미지를 배포하는 과정

1. 로컬 머신에서 Docker Image를 만든다.

2. Container Registry에 만든 이미지 파일을 업로드

3. Server에서 Docker Image를 받아와서 그대로 실행(Server에서는 Docker가 설치되어 있어야 함)

 

 

Container Registry 제공 업체

 

쿠버네티스와 도커(컨테이너) 관리

  • kubernetes
    • 다수의 서버와 다수의 서비스를 관리하기 쉽게하기 위한 컨테이너 관리 툴이다.
    • 쿠버네티스에서 여러개의 실행되고있는 도커를 관리한다고 생각하면 된다.
  • 스케줄링
    • 컨테이너를 적당한 서버에 배포해 주는 작업
    • 여러 대의 서버 중 가장 트래픽이 적은 서버에 배포하거나, 순차적으로 배포 또는 랜덤 배포 등 설정이 가능
    • 컨테이너 개수를 여러 개로 늘리면 적당히 나눠 배포하고, 서버가 죽으면 실행 중이던 컨테이너를 자동으로 다른 서버에 띄워줌
  • 클러스터링
    • 여러 개의 서버를 하나의 서버처럼 사용
    • 작게는 몇 개 안되는 서버부터 많게는 수천 대의 서버를 하나의 클러스터로
    • 여기저기 흩어져 있는 컨테이너도 가상 네트워크를 이용하여 마치 같은 서버에 있는 것처럼 쉽게 통신
  • 서비스 디스커버리
    • 서비스를 찾아주는 기능(서버끼리의 연결을 하려면 해당 서버가 어디 떠있는지 알아야 하고, 이를 도커 컨테이너 이름으로 손쉽게 찾아줌)
    • 클러스터 환경에서 컨테이너는 어느 서버에 생성될지 알 수 없고, 다른 서버로 이동 할 수도 있음
    • 따라서 컨테이너와 통신을 하기 위해서 어느 서버에서 실행중인지 알아야 하고, 컨테이너가 생성되고 중지될 때 어딘가에 IP와 Port 같은 정보를 업데이트 해줘야 함
    • key-value 스토리지에 정보를 저장할 수 있고, 내부 DNS 서버를 이용

 

 

Reference

1. https://www.youtube.com/watch?v=LXJhA3VWXFA 

2. https://wooody92.github.io/docker/Docker-%EB%8F%84%EC%BB%A4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80/

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

728x90