Docker 학습 (Section1 - 도커기본과 동작원리)

Blockmonkey·2021년 5월 30일
0
post-thumbnail
post-custom-banner

잡설

팀 프로젝트로 Team Blog프로젝트를 진행하며, 막바지에 다달은 지금 배포에대해 관심이 생겼다.
이전에는 Nodejs+Pug 로 웹사이트를 제작하거나, 혹은 React를 통해 웹사이트를 만들었기에 Heroku를 통한 배포, AWS EC2를 이용한 배포, Firebase서비스를 통해 강좌에서 알려주는대로 배포를 했다.

물론, 이전과 같이 EC2를 이용해 또 설명서를 찾아가며 배포하면 보다 편리하겠지만 최근 핫하다고하는 CI 테스트와 Docker를 경험해보고자 Docker에 대한 공부를 시작했다. 괜찮은 자료를 찾던 중, Inflearn에서 JhonAhn님의 강의를 통해 도커 공부를 시작했다.

개인적으로 이전에 MERN Stack으로 "영화사이트", "유튜브", "쇼핑몰"만들기 등을 수강했을 때 MERN Stack을 통해 가장 실전에 가깝게 학습시켜주는 강사님인것 같아 선택하게 되었다. 강좌를 1회독 쭉 따라하며 실습해보았는데 역시나 어렵다. 그래서 주요 내용을 정리하며 2회독을 하려한다. 내용 중 정확히 이해하지 못하는 내용이 있을 수 있으므로 참고 해주시면 좋겟다.

본론

❓ 도커 사용목적과 개념

  1. 프로그램 다운로드를 쉽게 해준다. (예를들어, 인스톨러로 어떤 프로그램을 다운로드 받는다고 가정하자, 그러면 버전문제, 운영체제에서 지원을 안한다는 이유 등 다양한 이유로 오류가 생길 수 있으나 도커는 해당 문제를 줄여줄 수 있다.)

  2. 도커는 "컨테이너"를 활용해 응용프로그램을 보다 쉽게 제작&배포&실행&관리 할 수 있도록 설계된 도구로써 존재한다.

즉, 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼(생태계)라고 정의한다.

❓이미지 & 컨테이너

도커를 배우다보면 가장 먼저나오는 개념이 "이미지"라는 개념과 "컨테이너"라는 개념이다. 실제로 도커 홈페이지에 접속하더라도 가장 먼저 나오는 개념이 "컨테이너"이므로 둘을 먼저 간단하게 알고 넘어가자.

1.이미지란? 프로그램을 실행시키는데 필요한 종속성을 포함한 모든 것을 가지고 있는 것.(코드, 런타임, 시스템도구, 라이브러리, 실행 명령어 등등)
2. 컨테이너란? 이미지를 활용해 만든 인스턴스로 각각 부분에 대한 "실행기"라고 이해한다.
(추가설명 : 이미지가 MERN Stack Team_Blog App을 가지고 있다면, 컨테이너는 MERN stack App 에서 프론트부분 React 컨테이너, 백엔드 Node, Express 컨테이너, MongoDB 컨테이너 등 세개로 쪼개질 수 있고 컨테이너는 이를 각각 실행하는 역할을 한다. 아래그림참조)

❓이미지 실행방법 & 동작흐름 & DockerHub

사용자는 https://www.docker.com/ 사이트에서 회원가입을 하고 도커를 다운로드 받을 수 있다.
그리고, 터미널을 켜서 docker --version 명령어를 통해 도커 설치를 확인할 수 있다.
필자는 쳐보니 아래처럼 출력된다.

도커로 hello-world라는 가장 간단한 이미지를 한번 실행해보자.
터미널에 아래 명령어를 입력하면 된다.

docker run hello-world

그럼 잠시 기다리면 아래와 같은 결과화면을 볼 수 있다.
필자는 이미 hello-world이미지를 보유하고 있기에 바로 출력되지만, 처음하시는 분들께서는 이미지가 존재하지 않는다고 하고 pulling을 할거라는 내용을 볼 수 있을 것이다.

그럼 이런 과정이 어떻게 진행되는지 한번 그림을 통해 살펴보겠다.


그림을 보면 사용자가 docker run hello-world 명령어를 터미널에 입력하면 도커 Client에서 이를 받고 도커 서버로 넘긴다. 그럼 도커서버는 컴퓨터 캐시 내에 "hello-world"이미지가 있는지 확인한다. 하지만 없기에 Docker Hub라는 곳에서 이미지를 탐색하고, 이미지가 존재한다면 풀링해오고 실행한다.
도커허브는 무엇일까?
도커허브는 github와 비슷한 코드 공공재(?)처럼 이미지를 공공재로 활용할 수 있게 사용자들이 올려놓은 사이트라고 이해했다. 어떤 이미지들이 있는지 살펴볼 수 있는 곳은 https://hub.docker.com/search?q=&type=image 이곳에서 확인할 수 있다.

❓도커의 동작원리를 조금 더 깊게!

앞서 살펴본 내용을 정리하자면, "도커 이미지"는 해당 파일 실행에 모든 것을 담고있고, "도커 컨테이너"는 이미지를 부분별로 쪼개서 담아둔 뒤 실행하는 역할을 한다. 이번에는 그것을 조금 더 세분화해 살펴보겠다.

우선 위 도표를 살펴보면 도커 이미지에는 "실행명령어", "파일 스냅샷"을 포함한다. 그리고 컨테이너로 분리되는데 각 컨테이너는 (기존리눅스기술) C-Group이라는 기술을 통해 자원을 할당 받는다. CPU는 1Core만, Ram은 4Mb만 등등 그리고 각 컨테이너에 있는 하드디스크에 "파일 스냅샷"을 저장한다. 그럼 컨테이너는 실행명령어와, 파일스냅샷을 통해 각각의 컨테이너를 실행한다. 단, 기존 VM에서는 "하이퍼바이저"인지 뭔지하는 기술을 통해 각각의 VM(Virtual Machine)에 각각 다른 Guest OS를 넣고 실행하는데 반해, 도커컨테이너는 도커 자체의 (Linux) OS환경을 이용해 사용하므로 커널을 서로 공유할 수 있다는 장점을 가진다. 하지만 SPOF(Single Point Of Failur)문제를 해결하고자 이 또한 (기존리눅스기술) "네임스페이스"를 통해 각각의 컨테이너를 격리한다.

자, 정리해보면!~

1. 도커는 각각의 Guest OS를 필요로하지 않음으로 보다 가볍고,
2. "네임스페이스" 기술을 통한 격리로 Single Point Of Failure문제를 해결했으며,
3. "C-Group" 기술을 활용해 컴퓨팅 자원의 오버헤드(자원낭비)를 줄일 수 있다.

다음 포스팅에서는 "도커 기본 명령어" 와 "이미지만드는 법"에 대해 포스팅을 이어갈 예정이다.

post-custom-banner

0개의 댓글