목표
도커(Docker)의 개념에 대해서 이해하는 시간을 갖도록 하겠습니다.
개요
이번 학기에 캡스톤 디자인을 수강하는데, 개발 과정에서 도커를 활용해야하는 상황입니다.
도커와 더불어 쿠버네티스(Kubernetes)가 요즘 핫한 분위기입니다. 왜 인기가 많은지 학습과 실습을 통해 몸으로 느껴보겠습니다.
도커(Docker)란?
도커란 무엇일까요? Docker의 말 그대로 보면 Dock + er 인데요. Dock이란 말은 부두, 선창, 부두에 대다란 뜻입니다. 아무튼 배와 관련이 되어 있어보이네요.
한 번 인천항을 상상해봅시다. 바다에 떠있는 큰 배들은 등에 본인이 필요한 큰 컨테이너를 싣고 어딘가로 떠나고 있습니다.
바로 이 부분에서 "도커"의 개념이 나온 것입니다.
우리는 기존에 웹을 개발할 때, 본인이 사용하는 운영체제(Window, MacOS 등) 위에서 Visual Studio와 같은 IDE(통합개발환경)을 설치하고 거기에 여러가지 라이브러리를 설치하여 개발을 진행했습니다.
제가 웹개발을 할 때는 대략적으로 다음과 같은 과정을 거쳤습니다.
윈도우 운영체제 → 파이썬 설치 → VSC(Visual Studio Code) 설치 → 프레임워크 Django 설치 →
다른 웹사이트의 정보를 크롤링을 위한 BeutifulSoup 라이브러리 설치 → DB 설치 및 연동
만약 이걸 다른 노트북에서 마저 개발하고 싶다면 어떡할까요?
깃허브나 다양한 방법을 통해서 코드를 옮기고, 또 Django를 설치하고, BeutifulSoup를 또 설치할 것입니다. 각각의 환경이 모두 다르기 때문입니다.
이렇게 개발환경이 다르기 때문에 생기는 불편함을 해소하기 위해 VMWare와 같은 가상머신(Virtual Machine)이 존재합니다. 가상 머신 위에 환경을 구성하고 이미지를 설치하여 똑같은 환경에서 개발을 이어갈 수 있습니다.
그럼에도 불구하고 도커가 핫한 이유는 무엇일까요?
가상 머신의 경우 컴퓨터 안에 가상의 컴퓨터 환경을 만들기 때문에 OS(운영체제)를 또 설치해야하는 부담이 있습니다. 그만큼 속도는 저하되고 리소스는 많이 사용하게 됩니다.
반면, 도커는 격리된 공간에 필요한 라이브러리, 실행파일만 담아놓고 사용하기 때문에 부담이 줄어듭니다. 이 또한 리눅스OS의 기술이지만, 운영체제의 모든 파일을 담아놓는 것이 아닌 실행파일만 갖고 있기 때문에 비교적 리소스가 줄고 속도는 향상됩니다. 이런 차이점이 있기 때문에 모두가 도커를 찾는 것입니다.
뿐만 아니라, 도커는 컨테이너 생성 및 관리가 매우 용이하기 때문에 더욱 인기가 많습니다.
위 사진에서 가장 큰 틀을 호스트(Host)라고 칭하고, DB나 Web Server를 담고 있는 빨간색 네모칸을 컨테이너(Container)라고 칭합니다. 컨테이너 안에 담겨있는 프로그램들을 이미지(Image)라고 합니다.
위 사진처럼 각각 필요한 부분들만 똑 떼서 컨테이너에 담아놓고 필요한 것만 뽑아 쓰는 것이 도커입니다. 그냥 봐도 경량화가 잘 되어 있는 것을 알 수 있습니다.
생활코딩 강의에서 아주 좋은 예시를 들어주셨습니다.
우리는 다들 스마트폰을 사용하고 있습니다. 앱스토어(구글 플레이 스토어)에서 필요한 프로그램을 다운 받는데요. 우리가 게임을 하기 위해서, 앱스토어에서 게임을 다운받습니다. 이 게임을 실행하면 프로세스가 이를 처리하게 되는데요. 도커도 마찬가지입니다. 도커 허브에서 필요한 이미지를 다운(pull)받고 컨테이너가 이를 실행합니다.
엄연히 말하면 조금은 다를 수 있지만, 이런 느낌으로 이해하면 후에 정확히 이해하기 용이할 것입니다.
앱스토어 ≒ 도커 허브 / 게임 ≒ 이미지 / 프로세스 ≒ 컨테이너
참고+ : 어쨌든 리눅스앱이기 때문에 리눅스에서 사용해야합니다. 호스트 컴퓨터에 리눅스를 설치해서 사용해야합니다.
그럼 컨테이너에 리눅스를 설치해서 사용하는 가상머신과 다를게 없지 않나?라고 의문을 가질 수 있지만,
필요한 실행파일만 가져와서 사용하기 때문에 더욱 경량화되어 있습니다. 또한, 아래의 이점을 갖습니다.
도커의 장점
도커는 컨테이너를 가벼운 모듈식(경량화) 가상 머신처럼 사용할 수 있다는 특징이 있습니다. 컨테이너를 구축하고 배포하는 것을 비교적 쉽게 할 수 있기 때문에 어플리케이션을 클라우드에 최적화할 수 있도록 지원합니다.
여러 프로세스와 어플리케이션을 따로따로 실행해서 인프라를 더욱 효율적으로 활용하고 기존처럼 한 환경에서 어플리케이션을 실행할 때와 동일한 보안을 유지할 수 있습니다.
후에 도커 홈페이지에 들어가서 확인해보면 알 수 있지만, 다양한 프로그램이 담긴 이미지를 받아서 사용할 수 있습니다.
모듈성
여러 개의 컨테이너로 나눠서 접근하는 방식은 전체 어플리케이션을 분해하지 않고 필요한 부분만 똑 떼서 업데이트하거나 복구할 수 있습니다. 그만큼 이벤트관리가 용이하다는 것을 알 수 있습니다. 또한, 사용자는 마이크로서비스 기반 접근 방식 외에도 SOA(Serveice-oriented Architecture)의 작동 방식과 동일하게 여러 개의 어플리케이션 사이에서 프로세스를 공유할 수 있습니다.
(SOA 작동방식은 서비스 중심의 아키텍처로, 통신 시 여러가지 서비스에 전사적으로 접근할 수 있는 것을 뜻합니다.)
참고 - SOA란?
계층 및 이미지 버전 제어
각 도커의 이미지 파일은 일련의 계층으로 이루어져 있습니다. 이 계층들은 단일 이미지로 결합됩니다.
이미지가 변경되거나 실행, 복사와 같은 명령을 사용할 때마다 새로운 계층이 생성됩니다.
도커는 새로운 컨테이너를 생성할 때 만들어져 있는 계층을 재사용하기 때문에 프로세스가 훨씬 더 빨라집니다. 위에서 언급한 단일 이미지 사이에서 변경 사항이 공유되기 때문에 효율성이 개선됩니다.
새로운 변경사항이 생기면 내장 변경 로그가 기본적으로 적용되기 때문에 컨테이너의 이미지를 완전히 제어할 수 있습니다. 물론 이전 버전으로 롤백하는 기능도 제공합니다.
다음은 "docker image history" 명령어를 통한 이미지 계층을 확인한 사진입니다.
정리
도커의 개념에 대해서 간단하게 알아보았습니다. 도커에서 생성한 컨테이너를 관리하는 "쿠버네티스"라는 것도 도커에 익숙해지면 다뤄보도록 하겠습니다.
유튜브 생활코딩 도커 강의를 참고했습니다.
주소 : https://www.youtube.com/watch?v=Ps8HDIAyPD0&list=PLuHgQVnccGMDeMJsGq2O-55Ymtx0IdKWf
Red Hat 게시글을 참고했습니다.
주소 : https://www.redhat.com/ko/topics/containers/what-is-docker
'DevOps > Docker' 카테고리의 다른 글
[Docker] 도커 에러 "Error response from daemon: manifest for ..." 해결법 (0) | 2021.09.04 |
---|---|
[Docker] 도커의 기본적인 사용 방법 - 도커 설치 및 기본 명령어 모음 (0) | 2021.09.03 |