3줄 요약
컨테이너 = 서버
도커 = 컨테이너를 관리해주는 전문가
쿠버네티스 = 도커를 이용해 컨테이너를 오케스트레이션 하는 도구
서버(server)와 가상 머신 이해를 바탕으로 컨테이너(Container), 도커(Docker) 그리고 쿠버네티스(Kubernetes)에 대해서 알아보겠습니다.
서버란?
서버는 프로그램과 소프트웨어가 실행되는 하드웨어를 의미합니다. 조금 더 구체적으로 설명하자면
'클라이언트의 요청을 받으면 서비스, 데이터를 제공하는 컴퓨터 혹은 프로그램'입니다.
보통 개인 PC에서는 메모장이나 인터넷 등 다양한 프로그램을 한번에 실행합니다. 그 중 한 프로그램이 에러가 발생하여 꺼진다면 다시 실행하면 큰 문제가 되지 않습니다.
하지만, IT 서비스로 제공되는 소프트웨어의 경우에는 주의해야합니다. 예를 들어, 한 회사의 서버가 다운되면 서비스의 장애로 이어져 큰 문제가 발생할 수 있습니다.
그렇기 때문에 하나의 서버에서는 하나의 소프트웨어만 사용하는 것이 안전합니다.
그러면 64기가 바이트 컴퓨터에서 4기가 바이트 소프트웨어를 하나만 실행하면 나머지 공간이 낭비됩니다. 그래서 가상화 기술을 사용해서 하나의 컴퓨터에서 여러 개의 소프트웨어를 실행하게 됩니다.
가상화란 무엇일까?
가상화는 소프트웨어를 사용하여 프로세서,메모리, 스토리지 등과 같은 단일 컴퓨터의 하드웨어 요소를 일반적으로 가상 머신(VM)이라고 하는 다수의 가상 컴퓨터로 분할할 수 있또록 해주는 컴퓨터 하드웨어 상의 추상화 계층을 구축합니다.
즉, 실제 컴퓨터 1대의 하드웨어에서 각각의 VM은 자체 운영체제(OS)를 실행하며 마치 독립적인 컴퓨터인 것처럼 작동합니다.
그렇다면 컨테이너란?
컨테이너란 컴퓨터에서 프로그램을 실행하기 위한 가상화 기술입니다. 컨테이너 가상화를 사용하면 한대의 서버에서 여러개의 프로그램을 안전하게 사용할 수 있습니다.
즉, 컨테이너를 만들어 다양한 어플리케이션을 설치하고 하나의 서버처럼 사용할 수 있는 패키지입니다.
쉽게 생각하면 프로그램을 구동하는데 필요한 환경을 격리시켜서 여러 프로그램을 구동하더라도 서로 간섭하는 문제가 생기지 않도록 하는 도구입니다.
추가 설명(출처: https://velog.io/@trendsetter/컨테이너-VS-가상화-무엇이-다를까)
코드뿐만 아니라, 부수적인 디펜던시들을 패키징해서 제공하는 소프트웨어의 표준단위입니다.
따라서 사용자들은 부가적인 설치없이 컨테이너로 어플리에키션을 빠르고 안정적으로 실행시킬 수 있습니다.
이 부분은 Docker 공식 사이트에서 발췌
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another
정리하자면 가상화란 물리적 자원인 하드웨어를 효율적으로 활요하기 위해서 하드웨어 공간 위에 가상의 머신을 만드는 기술이고, 컨테이너란 컨테이너가 실행되고 있는 호스트 OS의 기능을 그대로 사용하면서 프로세스를 격리해 독립된 환경을 만드는 기술입니다.
컨테이너를 사용하는 이유는?
개발을 하기 위해 하나의 환경을 구축하는 것은 굉장히 많은 노력이 필요합니다.
우선 서버가 있어야 되고, OS 구축 그리고 네트워크 통신 포트 구성 등 많은 설정이 필요합니다.
그러므로, 이런 반복적이고 힘든 세팅을 미리 해놓으면 편리할 것입니다.
그래서 컨테이너를 사용하여 환경을 구축한 뒤, 다른 서버로 배포하면 이런 번거로운 부분을 최소화할 수 있습니다.
도커(Dokcer)란 무엇인가?
도커는 컨테이너 기반의 가상화 플랫폼입니다. 컨테이너를 쉽게 다룰 수 있게 도와주는 도구라고 할 수 있습니다.
도커를 이용하면 이미지를 실행시켜 컨테이너로 만들고, 생성된 컨테이너를 관리하고 그리고 컨테이너를 다시 이미지로 만드는 작업 등을 손쉽게 진행할 수 있습니다.
더 자세하게 설명을 하자면 도커는 "app을 packaging 할 수 있는 툴"입니다. 예를 들어, 환경 설정 등 필요한 요소들을 Packaging 하는 것을 도와주는 것이 도커입니다.
도커는 개발과정에서 라이브러리 충돌을 방지하기 위해 격리된 환경이 필요하거나, 완성된 서비스를 배포할 때 그리고 배포 중인 서비스를 가져와서 실행할 때 등의 상황에서 굉장히 유용합니다.
특히나 배포 과정에서 도커를 사용해서 각종 파일들을 이미지로 만들면 종속성 이슈에서 벗어나고 배포하는 것이 편리합니다.
왜냐하면, 서비스를 받아서 실행해볼 때, 필요한 파일들을 다운로드 받고 , 필요한 라이브러리르 설치하는 등의 많은 사전 작업들이 필요합니다. 하지만 도커를 사용하면 같은 이미지를 실행해서 컨테이너로 만들고 실행하면 되기 때문에 굉장히 편리합니다.
이렇게만 보시면 이해하기 어려우실꺼 같아 아래에 설명을 덧붙이겠습니다.(출처 : https://tech.cloudmt.co.kr/2022/06/29/도커와-컨테이너의-이해-1-3-컨테이너-사용법/)
도커 이미지란?
도커 이미지는 컨테이너를 만드는데 사용되는 읽기 전용 템플릿입니다.
컨테이너에 실행에 필요한 파일과 설정값 등을 포함하고 있는 도커 파일을 만든 후 Dockerfile을 빌드하여 이미지를 만듭니다.
즉, 도커 이미지는 도커에서 필요한 서버 프로그램 + 소스 코드 + 실행 파일로 프래그램을 구동하기 위한 것입니다.
도커 컨테이너란?
도커 이미지를 실행한 상태입니다. 패키징된 도커 이미지를 격리된 공간에서 동작시키는 것(기술)을 의미합니다.
이미지로 컨테이너를 생성하면 이미지의 목적에 맞는 파일이 들어있는 파일 시스템과 격리된 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 생섭됩니다.
이것을 도커 컨테이너라고합니다.
그렇다면 도커가 많아지면 관리하는 것이 힘들어집니다. 그래서 도커들을 관리해주기 위한 쿠버네티스라는 것이 등장합니다.
쿠버네티스란?
쿠버네티스란 컨테이너 오케스트레이션의 툴의 한 종류로 다수의 컨테이너 실행을 관리 및 조율하는 역할을 합니다.
즉, 한개의 컨테이너를 이용할 땐 도커를 사용하고, 컨테이너의 수가 많아지고 관리할 필요가 있을 때는 쿠버네티스를 사용합니다.
감사합니다.
해당 블로그는 학습을 위한 목적으로 글을 작성하고 있습니다.
틀린 내용이 지적해주시면 즉각 수정하겠습니다.
출처:
https://www.youtube.com/watch?v=eRfHp16qJq8
https://nearhome.tistory.com/83
https://www.ibm.com/kr-ko/topics/virtualization
https://joyfuls.tistory.com/48
https://kk-7790.tistory.com/135#article-1--컨테이너란?
https://velog.io/@trendsetter/컨테이너-VS-가상화-무엇이-다를까
https://velog.io/@markany/도커에-대한-어떤-것-1.-도커란-무엇인가
https://velog.io/@gkrry2723/원리-공부-Docker란-도커-동작-원리-도커-개념
'CS 전공 지식' 카테고리의 다른 글
[네트워크] REST, REST API 그리고 RESTful이란 무엇인가? (0) | 2024.02.25 |
---|