본문 바로가기

2-minutes lecture

(북리뷰) 그림과 실습으로 배우는 도커 & 쿠버네티스

 

그림과 실습으로 배우는 도커 & 쿠버네티스

  • 위키북스
  • 오가사와라 시게타카 지음
  • 심효섭 옮김

 

 


 
전통적인 서버관리만 경험해 본 사람, 아예 서버 관련된 업무를 해본 적이 없는 엔지니어, 또는 IT 관련 서비스 기획을 하는 사람에게도 쉽게 읽히도록 씌어진 책이라 생각됩니다.
 
우선 목차는 아래와 같습니다.
 

▣ 1장: 도커란 무엇인가?
01 도커란 무엇인가?
02 서버와 도커

▣ 2장: 도커의 동작 원리
01 도커의 동작 원리
02 도커 허브와 이미지, 그리고 컨테이너
03 도커 컨테이너의 생애주기와 데이터 저장
04 도커의 장점과 단점

▣ 3장: 도커를 사용해보자
01 도커를 사용하려면
02 도커 설치
03 도커의 조작 방법과 명령 프롬프트 및 터미널 실행

▣ 4장: 컨테이너를 실행해 보자
01 도커 엔진 시작하기/종료하기
02 컨테이너의 기본적인 사용 방법
03 컨테이너의 생성과 삭제, 실행, 정지
04 컨테이너의 통신
05 컨테이너 생성에 익숙해지기
06 이미지 삭제

▣ 5장: 여러 개의 컨테이너를 연동해 실행해보자
01 워드프레스 구축
02 워드프레스 및 MySQL 컨테이너 생성과 연동
03 명령어를 직접 작성하자
04 레드마인 및 MariaDB 컨테이너를 대상으로 연습하자

▣ 6장: 실전에 활용 가능한 컨테이너 사용법을 익히자
01 내게 필요한 지식이 무엇인지 정리하기
02 컨테이너와 호스트 간에 파일 복사하기
03 볼륨 마운트
04 컨테이너로 이미지 만들기
05 컨테이너 개조
06 도커 허브 등록 및 로그인

▣ 7장: 도커 컴포즈를 익히자
01 도커 컴포즈란?
02 도커 컴포즈의 설치와 사용법
03 도커 컴포즈 파일을 작성하는 법
04 도커 컴포즈 실행

▣ 8장: 쿠버네티스를 익히자
01 쿠버네티스란?
02 마스터 노드와 워커 노드
03 쿠버네티스의 구성과 관련 용어
04 쿠버네티스 설치 및 사용법
05 매니페스트 파일(정의 파일) 작성
06 쿠버네티스 명령어
07 쿠버네티스를 연습하자

▣ 부록
01 (윈도우용) 설치 관련 정보
02 (macOS용) 도커 데스크톱 설치 방법
03 (리눅스용) 도커 설치
04 VirtualBox의 포트 포워딩 설정
05 (리눅스용) nano 에디터의 사용법
06 (리눅스용) 쿠버네티스 설치
07 도커 데스크톱 콘솔의 사용법
08 도커 커맨드
09 VirtualBox를 이용한 실습 준비
10 AWS를 이용한 실습 준비

 


도커와 컨테이너, 쿠버네티스에 대한 기본적인 이해를 위해서는 1장, 2장, 3장, 8장 정도만 읽어도 충분합니다.

3장은 약간의 실습 내용이 있지만 실제 설치를 하지 않더라도 눈으로 따라 읽다보면 이해를 높일 수 있는 것 같습니다. 

이 글에서는 북리뷰 겸 제 나름대로 도커와 컨테이너, 쿠버네티스를 정리하려고 합니다.

 

기술적인 내용이나 용어는 최대한 배제하고 최대한 쉽고, 인문학적으로 개념이해를 위한 목적으로 작성했습니다.


 

저는 아주 오래전에 .net 기반으로 SI 프로젝트(웹기반)를 했습니다. SoA나 UML, 객체지향, CBD, 패턴 등 전통적인 워터폴 방식에서 벗어나려는 시도를 많이 하던 시기였습니다. 당시에는 몰랐는데 이제와서 보니 애자일, 데브옵스, 도커, 컨테이너 등등이 모두 비슷한 고민의 연장이라는 생각이 듭니다.

소프트웨어 엔지니어링은 기존의 하드웨어 기반의 스케일업이 아닌 아키텍쳐와 방법론에 의한 성능향상 또는 효율화가 주요사상이 아닌가 합니다. 과거에 속도가 느려지면 서버 증설하고 장애나면 하드웨어적 방식으로 성능향상(또는 안정화)를 추구했었는데 이는 언제나 한계에 부딪힙니다.

개인용 PC만 해도 메모리를 사서 어렵게 혼자 교체해봐도 어느 순간 되면 느려집니다. 그렇다보니 유튜브 보면서 한두번 메모리 교체를 했던 사람들도 결국은 소프트웨어적인 접근보다는 새로운 노트북이나 PC를 사는 하드웨어적인 방법으로 고도화를 추진합니다.

물론 운영체제에 매우 종속적일 수 밖에 없는 PC 성능 고도화를 개인이 한다는 것은 사실 어렵습니다. 휴지통비우고, 바로가기 삭제하는 수준, 아니면 포맷하고 다시 운영체제 설치하기가 전부일 겁니다.
 
어찌 되었든 이와 같은 고도화 또는 업그레이드는 개인과 회사가 접근하는 방식이 '거의'가 아니라 '완전히' 동일합니다.
 
왜 그럴까요?
 
왜냐하면 하드웨어적인 업그레이드가 경영진(나)을 이해시키기 쉽기 때문입니다.
이 쉽다는 단어는 여러가지 의미를 내포합니다.
먼저 하드웨어의 업그레이드는 숫자로 보여주기가 쉽습니다. 1G가 4G로 증설된다거나, 속도가 2배 더 빨라진다거나.
하지만 소프트웨어 공학적인 얘기는 지루할 뿐만 아니라 어렵고, 공부를 많이 해야 합니다.
 
도커와 컨테이너 리뷰인데 이런 얘기를 구구절절 하는 이유는 바로 앞 단락의 마지막 문장을 얘기하기 위함입니다.
즉, 사용자가 더 쉽고 편하게 소프트웨어 공학적인 방법론을 구현할 수 있게 하려는 다양한 노력의 일환으로 도커나 컨테이너와 같은 사상이 나온 게 아닌가 싶습니다.

하드웨어적인 효율화나 소프트웨어적인 효율화를 적당하게 버무린 어느 중간지점에서 나온 결과물이라 생각됩니다.
 
이제 도커, 컨테이너, 쿠버네티스 이야기로 진짜 넘어갑니다.
 


먼저 도커입니다.
 
Docker 의 원래 의미는 항구 노동자를 의미합니다.
 

  • docker 미국식 [│dɑːkə(r)]  영국식 [│dɒkə(r)] [명사] 부두[항만] 노동자
  • dock 미국식 [dɑːk]  영국식 [dɒk]  중요1. [명사] 부두, 선창 (→dry dock)

 
재밌는 건 이 도커(Docker)라는 단어가 이젠 구글이나 네이버에서 조회를 하면 저 의미보다는 IT 용어로서 훨씬 더 많이 검색결과가 나옵니다. 컨테이너도 마찬가지구요.
결론적으로 여기서 다뤄지는 도커와 컨테이너는 아래와 같은 구조로 생각해야 합니다.
 

23페이지, 그림 2-1-1

 
다른 많은 그림을 구글에서 찾을 수 있지만 저는 이 책의 그림이 가장 이해하기 쉬운 것 같습니다.
하나씩 설명해보겠습니다.
 

  • 도커라는 것은 컴퓨터(서버라 생각해도 되고, 개인 컴퓨터라 생각해도 됩니다.)안에 운영체제가 있어야만 돌아갑니다.
  • 그리고 리눅스가 반드시 필요합니다. 윈도우나 맥에서 돌아가지 않습니다.
  • 도커 엔진이라는 용어에서 "엔진"은 그냥 하나의 프로그램이라고 생각하면 됩니다. 예를 들어 컴퓨터로 어떤 쇼핑사이트에 접근하려면 브라우저가 있어야 하는데, 이 브라우저가 바로 쇼핑몰(컨테이너)를 사용하기 위한 엔진인 것입니다.
  • 그리고 이 도커엔진 위에 그림에서 보듯이 여러개의 컨테이너가 존재합니다.

 
이해를 돕기 위해 예를 들어보겠습니다.
운영하는 쇼핑몰이 이벤트를 할 때마다 가끔 시스템이 느려지거나, 아파치서버가 응답을 하지 않는 등의 장애가 발생한다고 할 때 운영자 입장에서 가장 먼저 고민하는 방법이 아마 서버 증설일 것입니다.
 
그런데 서버는 최신사양으로 매우 충분한 스펙이고, 또 CPU 사용율이나 메모리 사용량을 보면 40%도 채 사용하지 않고 있는 경우라면 어떻게 해야할까요. 응답을 하지 않는 경우도 다른 때와 비교할 때 사용자가 폭등하는 것도 아니라면 이와 같이 높은 스펙의 서버를 증설하는 게 맞는 접근일까요?
 
물론 이같은 상황은 SQL 튜닝이나 테이블의 인덱스, 또는 프로그램 상의 다양한 최적화도 해결책이 될 수 있습니다.
어플리케이션이나 프로그램 측면에서 뾰족한 해결책을 찾지 못한다면 운영자는 다시 서버 증설로 결론을 내기 쉽습니다.
 


하지만 도커와 컨테이너를 사용하여 여러대의 서버를 운영하는 것처럼 시스템을 구성한다면 어떨까요?
 

책 37페이지, 그림 2-2-11

 
먼저 앞 그림을 살펴보면 좌측 그림은 도커에 컨테이너가 하나 올라가 있고, 컨테이너 하나에 모든 프로그램이 설치되어 있습니다.
현재 우리가 사용하는 쇼핑몰이 서버 한대로 운영되고 있다면 이와 비슷한 형태일 것입니다.

어쩔 수 없이 하나의 소프트웨어가 다른 소프트웨어와 Tight하게 또는 느슨하게 연결되어 있을 것입니다. 그리고 CPU나 메모리의 상황이 직간접적으로 영향을 미칠 것입니다.
 
그렇다면 오른쪽처럼 구성하면 어떨까요?
즉, 서버 3대처럼 운영하려는 것인데, 각 서버별로 DB(MySQL)서버, 웹 어플리케이셔 서버(아파치), 사용자 프로그램(워드프레스)용 서버를 운영하는 것입니다. 훨씬 독립적으로 운영을 할 수 있을 것이고, 서로간의 영향도 덜 받을 수 있습니다.
하지만 이와 같은 구성을 위해 기존 방식과는 달리 컨테이너간 무언가를 해줘야 하는 구조적인 수정이 필요합니다.
 
다른 방법으로는 아래와 같은 방법이 있을 것 같습니다.

그림 2-2-11 편집

 
즉, 하나의 도커에 3개의 컨테이너를 운영하는 것은 그림 2-2-11의 오른쪽과 동일하지만,
하나의 컨테이너 안에 DB, 미들웨어(아파치), 사용자프로그램을 모두 넣는 것입니다.
 
방법은 이 외에도 여러가지가 있습니다. 이와 같은 작업을 아키텍처 설계라고 할 수 있는데, 이 아키텍처 설계는 정답이 없습니다. 그래서 앞서 얘기한 것처럼 소프트웨어 엔지니어링 측면의 개선은 말하는 사람도 듣는 사람도 이해하기가 어렵습니다.

왜 서로 이해하기 어려운 지는 맨 마지막에 마무리하면서 덧붙이기로 하고 도커와 컨테이너에 대해 몇가지만 더 언급하고 넘어가겠습니다.
 


이처럼 도커엔진은 하나의 기계(물리적인 서버)에 여러 대의 기계를 운영하는 효과를 냅니다.
그런데 IT 관련된 업무를 하는 분들은 어디선가 들어본 것 같은 소리일 겁니다.
즉, 가상화라는 것과 비슷한 느낌이 듭니다.
맞습니다. 개념상으로는 비슷한데 두가지 큰 차이가 있습니다.
 
하나는 가상화기술은 OS까지 가상화를 하지만, 도커는 아닙니다.
두번째, 가상화기술은 메인보드, CPU, 메모리 등 물리적인 부품을 소프트웨어로 구현하는 것이지만, 도커는 아닙니다.
 
부연하면, 가상화기술은 모든 OS를 가상화하지만 도커는 리눅스기반에서만 작동합니다.
그리고, 도커의 컨테이너에는 자신이 몸담고 있는 리눅스서버와 통신하기 위해 리눅스스러운 요소가 들어있긴 하지만 컨테이너 하나가 독립적인 OS 기능을 제공하는 것은 아닙니다.
 


이제 쿠버네티스를 잠깐 짚고 넘어가겠습니다.
책 제목에 비해 쿠버네티스는 8장에 와서야 설명이 시작됩니다.
 
원래 사전적 의미를 확인하기 위해 네이버 사전에서 검색하니 제대로 된 결과가 나오지 않아 위키피디아를 찾아보니 아래와 같이 나옵니다.

  • The name Kubernetes originates from Greek, meaning 'helmsman' or 'pilot'. 

 
쿠버네티스는 여러 대의 서버에 여러 개의 도커엔진을 올려, 여러 개의 컨테이너를 운영하는 경우 필요한 도구입니다.
전통적인 서버관리자 역시 할 일이 매우 많습니다. 그러니 새로운 개념으로 이와 같은 서버/도커/컨테이너 관리를 하려면 이 새로운 기술에 맞는 도구가 필요할 것입니다.
 
예를 들면 홈페이지 로고가 바뀐다거나, 테이블의 칼럼이 추가될 때 해야 하는 그 수많은 배포와 테이블 변경작업 등등을 도커, 컨테이너를 도입했다고 해서 하지 않아도 되는 게 아닙니다. 그렇다면 기존의 운영업무를 포괄하면서 이 도커와 컨테이너를 잘 관리하려면 그에 맞는 도구가 필요한 것입니다.
 
아래와 같은 형태의 아키텍처에서 필요할 것이고, 대부분 회사는 아래보다 훨씬 더 복잡하고 많은 복수의 서버를 운영하고 있을 것입니다.

책 258페이지, 그림 8-1-3

 
 
쿠버네티스는 종류가 많습니다.
즉, 쿠버네티스는 하나의 표준인데, 구글에서 개발한 후 오픈소스가 되면서 다양한 회사에서 다양한 기능을 가진 쿠버네티스 도구를 제공합니다. 워낙 많은 쿠버네티가 존재하기도 하고, 쿠버네티스는 앞선 도커와 컨테이너의 이해도를 높이고, 복수의 서버에서 복수의 도커를 사용하는 경우에 해당되므로 이정도에서 마치겠습니다.
 


책 자체가 다른 책에 비해 쉽게 쓰여진 건 맞는 것 같습니다.
이미 실무에서 도커를 사용하는 사람에게 큰 도움이 될 것 같진 않지만 저처럼 전통적인 IT 경험을 가지고 있고, 전체적인 그림을 이해하는데는 좋은 것 같습니다.
 
저희 회사도 도커 도입을 고려하고 있는데, 다들 이해도 하지 못한 상태로 진행을 하려하니 많이 힘들어하고 있어 어떤 교재로 스터디하면 좋을까해서 이 책, 저 책 보다가 눈에 들어온 책입니다.
 
개념을 잡고픈 분들에게 추천하고 싶은 책이고, 앞서 말씀드렸듯이 개념만 잡으시려면 1,2,3,8장, 실습을 해보고 싶으신 분들은 나머지 장을 보시면 됩니다.
리눅스에 대한 이해나 리눅스 코맨드 경험이 조금이라도 있는 분들은 나머지 장 보실 때 훨씬 수월할 겁니다. 기본적인 바탕이 리눅스이다 보니 사용하는 명령어나 터미널을 사용하는 등의 내용은 윈도우만 사용한 분들보다 훨씬 쉽게 읽힙니다.
 


 
도커가 만능해결책은 아닙니다. 2000년대 초반 국내에 객체지향이나 컴포넌트 방법론, 애자일 등등의 바람이 불었지만, 금융권등 전통적인 회사는 여전히 워터폴스러운 방법론으로 개발을 하고 있고, 유지보수 방식 역시 별로 달라진 게 없는 것 같습니다.
 
특히 CI&CD 나 DevOps는 기술이나 실행 이전에 사상과 철학, 그리고 공감대가 먼저 형성이 되어야 할텐데 프로젝트나 고도화가 성과를 내보이기 가장 좋은 수단인 국내 IT 현실에서는 솔직히 가능한 건가라는 생각과 함께, 굳이 저처럼 심각하게 접근할 필요가 있나라는 생각이 동시에 듭니다.
 
객체지향, 애자일 메니페스토 등등이 이미 수십년 전 나온 개념이지만 여전히 제대로 구현된 사이트가 없고, 특히 레거시와의 공생이라는 건 거의 불가능한 걸 보면 이 큰 흐름에 몸을 실어 약간은 마음을 내려놔야 하는 것 게 아닌가 싶습니다.
 
다시 한번 교재 추천 드리고, 새로운 기술이 세상과 시스템을 한 방에 바꿔주진 않지만 끊임없이 탐구하는 게 이쪽에서 일하는 사람들의 숙명이니 모두 열공하세요

 

 


윈도우에서 도커 설치

 

1. 다운로드

https://docs.docker.com/desktop/install/windows-install/

 

2. 다운로드 파일 실행

 

3. 재시작

 

4. 윈도우버전이 낮은 경우

 

5. 동의

 

6. 간단한 설문조사

 

 

7. 기본 메뉴얼

 

8. 드디어 시작, 실행문을 복사

 

9. 커맨드 창 열고 실행

 

10. 도커 시작 + 컨테이서 하나 실행

 

11. 컨테이너 확인

 

 

12. 내 로컬호스트 확인 : 위 그림에서 80:80 부분 클릭하면 아래화면 뜸

 

코맨드 창에서 아래와 같이 쳐서 포트 확인 후 브라우저에 직접 쳐도 됨

포트가 80이므로 브라우저에 http://localhost:80

 

 


 

 

이게 뭔가 할 수도 있지만 이렇게만 하면 내 컴퓨터가 하나의 서버가 되는 것임

 

1. 확인하는 방법은 먼저 내 노트북 아이피를 확인하고

2. 브라우저 하나 열어서 아이피를 넣고 엔터

 

 

과거에 서버설정 등등을 해본 경험이 있어야 우와~~가 나올 것 같습니다.

그 시절 이렇게 클릭만 해도 서버가 설정되는 날이 올 줄은 아무도 몰랐고,

거기다 이런 서버 설정을 하루에 열개 스무개도 가능하게 된 것입니다.

 

머..그렇습니다. 끝~