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

신창호·2023년 11월 22일
0
post-thumbnail

  • 📝 책 실습 환경 정보 : 원도우 10, macOs(10.14), 우분투 20.04.1 환경
  • 📌 참고 링크 : https://wikibook.co.kr/dkkb/
  • 📚 읽은 내용
    • 챕터 1 "도커란 무엇인가?"
    • 챕터2 "도커의 동작원리"

🔍 책 후기

(앞의 챕터1,2 part부분만 읽고 느낀 책에 대한 후기 내용입니다.)

  • 앞부분 내용은 실습하기전, 딱! 개념에 대한 이야기만 언급이 된다. 도커가 무엇인지? 컨테이너가 무엇인지?
  • 도커를 설명하기 앞써, 격리된 환경이 무엇인지 설명하고, 자연스럽게 가상화기술의 차이점을 잘 풀어서 설명해주는점을 봤을때, 책있는 그대로 따라만가도 자연스럽게 도커가 무엇인지 이해하기 쉽게 설명이 잘되어 있다. 게다가 꼼꼼하고 상세하게 내용이 들어가있으면서 그림으로도 표현해줘 더욱더 이해하기 쉽다.
  • 이렇게 1장이 도커를 알기전 필요한 사전지식이였다면 2장은 도커의원리를 이야기한다.
    • 이렇게 도커에 대한 배경지식이 쌓이니, 도커를 직접 실습해보고 싶어졌다.

📎 개념정리

도커란 무엇인가?

  • 도커는 한마디로 데이터 또는 프로그램을 격리시키는 기능이다.
  • 이 기능은 주로 서버에 사용된다.
  • 흔히 말하는 도커는 "컨테이너기술"이라고 표현을 많이 하는데, 이것 역시 하나의 컴퓨터 내에서 여러가지 프로그램서버를 동시에 돌리기위한 독립된 환경을 격리하는 기술을 말한다. (4page 참고)

도커엔진

  • 이런 독립된 공간을 컨테이너라고 한다. 그리고 이 컨테이너를 다루는 기능을 제공하는 것이 도커이다.
  • 도커를 사용하려면 도커 엔진을 설치해야된다.
  • 그리고 그 도컨엔진이 컨테이너를 만들기 위해서 사용하는 것이 이미지이다.
  • 도커는 리눅스운영체제가 필요하다. macOS나 windows에서 사용할 수 있지만, 내부적으로는 리눅스가 사용된다.
  • 컨테이너에서 동작시킬 프로그램 역시 리눅스용 프로그램이다.

❓그럼 독립된 환경을 격리해야되는 이유는 무엇일까?

  • 프로그램을 실행하기 위해서는 그 프로그램의 실행환경이나 라이브러리가 필요하다.
    • 완전 환경이 똑같거나,아예 겹치는 환경이 없다면 크게 문제가 되지는 않을 수있어 보인다.
    • 하지만, 비슷한 환경에 버전차이가 난다거나, 충돌나는 환경이라면 어떤 것은 실행이되고, 어떤것은 실행이 되지않을 것이다.
  • 또, 서버A와 서버B가 어떤 특정 프로그램과 연동되는 상황이라면 문제가 더욱 발생할 수도 있다.
  • 즉, 문제의 원인은 대부분 프로그램 간 공유로 일어난다. 그래서 완전히 분리된 환경이 필요하다.

가상화 기술과 차이

  • virtual Box나 VMware같은 가상화 기술은 가상의 물리 서버를 만드는 것이다.
    • 즉, 메인보드나 CPU, 메모리등 물리적인 부분을 소프트웨어로 대체하여 구현함으로써, 실제 해당 운영체제 환경으로 가상화 기술한 것이다.
  • 이와 달리 도커는 컨테이너에서 리눅스가 동작하는 것처럼 보이지만, 실제 리눅스가 동작하는 것은 아니다. 운영체제의 기능 중 일부를 호스트역할을 하는 물리서버에 맡겨 부담을 덜어둔 현태이다.

⚙️ 도커의 동작원리

(책의 일부 이미지 캡처본)

운영체제가 하는 일

  • 먼저 간단하게 운영체제가 하는 일은 소프트웨어나 프로그램의 명령을 하드웨어에 전달하는 역할을 말한다.(참고 24page)

  • 즉, 도커엔진이 보내는 명령어를 리눅스 운영체제가 서버(하드웨어)가 이해할수 있게 번역하여 전달하는 것이다.

  • 운영체제는 크게 커널그외 주변부분으로 구성된다.

    • 여기서 주변 부분은 명령을 받고 전달하는 역할을 주로 한다.

도커의 구성

  • 도커엔진 아래에도 리눅스 운영체제가 있지만, 컨테이너 속에도 리눅스 운영체제 비슷한 것이 있다.
  • 이것은 리눅스의 주변부분, 즉 전달하는 역할을 하는 것들로 구성되어 있는 것이다.
    • 이부분을 운영체제에서 빌려쓰는 형태이기에 도커의 가장 큰 특징인 가벼움을 얻을 수 있다.

결국 도커는 리눅스 환경에서만 동작한다는 것이다. 그렇기에, 윈도우나 macOS에서 도커를 구동하려면 리눅스환경을 조성할 필요가 생기는 것이다.

윈도우의 경우

  • WSL2: 윈도우에서 리눅스를 사용하게 해주는 기능 프로그램
    • 위 환경을 설치한 후 도커엔진을 설치해야된다.

macOS의 경우

  • Virtual 박스 설치
    • 가상머신으로 리눅스 운영체제를 설치하고 그위에 도커를 실행

하지만, 공식 홈페이지에서 해당 OS 전용 도커 데스크톱 MacOS/윈도우 전용으로 설치하면된다.

도커 데스크톱 설치링크 : https://docs.docker.com/engine/install/


🖼️ 도커 허브와 이미지

이미지와 컨테이너

  • 도커를 제대로 사용하기 위해선, 이미지와 컨테이너 부터 의미를 알고 있어야한다.
  • 실제 사용하는 것은 컨테이너이며, 이미지는 그대로 사용하는 일은 없다.
    • 왜냐면, 이미지는 금형과 같은 역할을 하기때문에, 보통 개발환경이 세팅된 상태를 말한다.
  • 반대로 컨테이너를 이미지 형태로 만들수도 있다.

도커 허브

  • 이러한 수많은 이미지들을 보관하고 공개된 곳이 도커 허브이다.
  • 여기에 공개된 이미지종류는 매우 다양하지만 크게 묶어서 표현하자면
    • 운영체제만 있는 이미지
    • 운영체제 + 소프트웨어가 포함된 이미지
    • 운영체제 + 다량의 소프트웨어 이미지
  • 예를 들어 웹서버 아파치와 DBMS서버 MySQL이 포함된 이미지라고 해도 아파치 버전과 MySQL버전이 다양하여, 여러가지 이미지가 나올 수 있따.
    • Apache2.4 + MySQL5.7
    • Apache2.4 + MySQL8.0
    • Apache2.2 + MySQL5.7
    • Apache2.2 + MySQL8.0

안전한 컨테이너 이미지 고르는 법

  • 도커허브는 누구나 자유롭게 이미지를 등록할 수 있기 때문에 안전하지 못한 이미지가 있을 수 있다.
  1. 공식이미지를 사용한다.
  2. 커스텀 이미지를 직접 만들어 사용한다.

🕐 도커 컨테이너의 생애주기

  • 쓰고 버리는 일회용품 같은 것!
  • 만들고, 실행하고, 종료하고, 폐기

데이터 저장

  • 폐기했다면 컨테이너안에 들어있던 데이터는 어떻게 될까?
  • 컨테이너 안에서 편집했던 파일들은 폐기시 사라지는게 당연하다. 만약 버전업뒤에 필요한 데이터라면 매우 곤란한 상황이 된다.
  • 이런일을 방지하기 위해 도커가 설치된 물리적 서버(호스트) 디스크를 마운트해 이 디스크에 저장한다.
    • 쉽게 말해, 컨테이너 외부에 데이터를 저장하는 것이고 이걸 위해 마운트한다는 것이다.

🚦 도커의 장점과 단점

  • 독립된 환경
  • 이미지 만들수 있다.
  • 컨테이너에 커널을 포함시킬 필요가 없다.

장점

  • 한대의 물리서버에 여러대의 서버를 띄울 수 있다.
  • 서버관리가 용이
  • 쉽게 다룰 수 있다.

단점

  • 물리 서버 한대에 여러서버를 다루기에, 호스트서버에 문제가 생기면 모든 컨테이너에 영향이 간다.
  • 서버 하나만 사용할 경우, 도커는 오버헤드, 오버 스팩일 뿐

주 용도

  • 팀원 모두에게 동일한 개발환경 제공
  • 새로운 버전의 테스트
  • 동일한 서버가 여러대 필요한 경우(스케일링)
profile
한단계씩 올라가는 개발자

0개의 댓글