공부/web

Docker란 무엇인가?

해니0 2021. 3. 31. 10:35

1. Docker란?

  • Docker
    리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트로 2013년 3월 출시되었습니다. LXC(리눅스 컨테이너)라는 커널 컨테이너 기술을 이용하여 만든 컨테이너 기술 중 하나로
    클라우드 플랫폼 어디서나 빠르게 배포하고 실행 할 수 있는 리눅스 기반 경량화 컨테이너를 의미합니다.
  • 출시 배경
    서버 시장이 물리 서버에서 클라우드 환경으로 급성장하면서 가상 서버를 사용하게 되었고,
    가상 서버 설치와 배포에 대한 어려움이 생기게 되었습니다.
    대안 방안 중 하나인 셸 스크립트를 이용한 설치와 자동화 구현도
    중앙 관리 기능이나 복잡한 기능은 구현하기 어려운 한계가 발생하였습니다.

    - Immutable Infrastructure 패러다임 등장
    이런 환경 속에서 Immutable Infrastructure라는 패러다임이 나오게 되었습니다.
    Immutable Infrastructure는 호스트 OS와 서비스 운영 환경을 분리하고, 한 번 설정한 운영 환경은 변하지 않는다는 개념입니다.
    서비스가 업데이트 된 경우 호스트 OS는 손대지 않고 서비스 운영 환경을 이미지로 생성하여 배포합니다.
    - Immutable Infrastructure 장점

편리한 관리 : 이미지만 관리하면 되며 이미지를 중앙 관리하여 체계적인 배포와 관리 가능. 이미지 생성 설정 또한 파일로 구성되어 버전 관리 시스템 활용 가능
확장 : 이미지 하나로 여러개의 서버를 생성할 수 있어 클라우드 플랫폼의 자동 확장(Auto Scaling) 기능과 연동하여 손쉽게 확장 가능
테스트 : 이미지를 실행하면 서비스 운영 환경과 동일한 환경이 구성되기 떄문에 태스트 용이
가벼움 : 운영체제와 서비스 환경 분리로 가볍고(Lightweight) 어디서든 실행 가능(Portable)한 환경 제공
Immutable Infrastructure 패러다임을 구현한 프로그램이 바로 Docker입니다.


  • Docker 로고 의미
    로고에서도 Docker의 상징적 의미를 담고 있습니다.
    고래가 컨테이너를 운반하는 모습의 로고에서 고래는 서버, 컨테이너는 이미지를 의미합니다.
    즉, Docker를 이용하면 하나의 서버에서 여러 개의 이미지를 생성, 실행뿐만 아니라 저장과 배포(운반)도 가능함을 의미합니다.
    컨테이너에 다양한 물건을 담을 수 있는 것처럼
    Docker 컨테이너에도 다양한 요소를 담을 수 있는데 오픈 소스 소프트웨어는 물론 직접 만든 프로그램도 가능합니다.

 

2. 가상 머신과 Docker의 차이점

가상 머신과 Docker 컨테이너의 차이점에 대해 알아보겠습니다.

1) 가상 머신

<이미지 출처 : https://www.docker.com/resources/what-container>

컴퓨터 환경을 소프트웨어로 구현한 것으로 VMware, Microsoft Hyper-V(Virtual PC), Xen, 리눅스 KVM 등이 있습니다.

가상 머신에 리눅스 설치 후 각종 서버 프로그램, DB 설치 후 개발한 애플리케이션 및 웹사이트를 설치하여 실행할 수 있습니다. 

이때 가산 머신 구축할 서버를 독자적으로 운영하거나 Amazon Web Services, Microsoft Azure, Google Cloud Platform등 서비스 형태로 제공되는 가상 머신을 이용할 수 있습니다.
유지 및 관리가 편리한 장점을 가지고 있지만 단점으로는 리소스의 분할로 물리 머신에 비해선 성능이 좋지 못하며
가상 머신이라고는 하지만 완전한 컴퓨터라 게스트 OS를 설치해야하며 OS가 포함되기 떄문에 이미지 용량이 커지게 됩니다.

현재는 전가상화(Full Virtualization : CPU의 가상화 자원을 이용한 전가상화)의 느린 속도 개선을 위해 반가상화(Paravirtualization : Xen) 방식이 많이 쓰이고 있습니다.



2) Docker

<이미지 출처 : https://www.docker.com/resources/what-container>

반가상화보다 경량화된 방식으로 Docker 이미지에 서버 운영을 위한 프로그램과 라이브러리만 격리해 설치가 가능합니다.

OS 자원을 호스트와 공유하기 때문에 이미지 용량을 줄일 수 있습니다.

하드웨어를 가상화하는 계층이 없기 때문에 메모리 접근, 파일시스템, 네트워크 속도가 가상 머신에 비해 빠릅니다.

가상 머신과 달리 이미지 생성과 배포에 특화된 기능을 제공하며 Git과 같이 이미지 버전 관리 기능이 있습니다.
중앙 관리를 위해 저장소에 이미지 push / pull이 가능하고 Docker Hub를 제공하여 Docker 이미지 공유가 가능합니다. 

 

3. Docker 이미지와 컨테이너

Docker를 구성하는 이미지와 컨테이너에 대해 알아보겠습니다.

1) 이미지

컨테이너 실행에 필요한 값들을 가지고 있으며 변하지 않습니다.

베이스 이미지는 리눅스 배포판의 유저랜드만 설치된 파일로 보통 리눅스 배포판 이름으로 존재합니다.

리눅스 배포판 유저랜드에 Redis나 Nginx 등이 설치된 베이스 이미지도 존재하여 사용자가 원하는 베이스 이미지를 선택하여 설치 할 수 있습니다.

이미지를 생성하면 이미지 아이디가 자동으로 생성되는데 16진수로 된 ID로 구분하고 각 이미지는 독립적입니다.

Docker는 Layer 방식을 채택하고 있기 때문에 이미지가 변경되어도 바뀐 부분만 생성한 뒤 부모 이미지를 계속 참조하는 방식으로 동작합니다.

저장소에 올릴 땐 자식 이미지와 부모 이미지를 함께 올리고 받을때도 함께 받음

이후 내용이 바뀐 이미지만 주고 받음


2) 컨테이너

이미지를 실행한 상태입니다.

하나의 이미지를 이용하여 여러 개의 컨테이너를 만들 수 있고 이미 실행된 컨테이너에서 변경된 부분을 이미지로 생성 가능하여 다수의 서버에 설치, 배포가 편리합니다. 

운영체제 관점에서 생각하면 이미지는 실행 파일, 컨테이너는 프로세스라고 할 수 있습니다.

 

4. 인용 및 참고 자료

가장 빨리 만나는 Docker, 이재홍 지음

www.docker.com/resources/what-container

 

이상 Docker 개념에 대해 간략하게 알아보았습니다.

다음 포스팅에서는 자주 사용하는 Docker 명령어와 Docker 이미지 생성, 컨테이너 실행 등 실제 실습을 통해 Docker를 정리해보겠습니다.

'공부 > web' 카테고리의 다른 글

MacOS에서 Kubernetes 환경 셋팅하기  (0) 2021.05.28
MacOS에서 Docker 사용해보기  (0) 2021.04.30