Post

CH1. 도커란 무엇인가? [그림으로 배우는 도커 & 쿠버네티스]

CH1. 도커란 무엇인가? [그림으로 배우는 도커 & 쿠버네티스]

SECTION 1. 도커란 무엇인가?


1. 도커의 기능

도커는 ‘데이터 또는 프로그램을 격리시키는 기능’을 제공하는 소프트웨어다.

주로 서버에 사용되며, 다양한 프로그램과 데이터를 각각 독립된 환경에 격리하는 기능을 제공한다. 운영체제(비슷한 것) 통째로 격리하는 기능이다.

2. 컨테이너와 도커 엔진

2-1. 컨테이너

컴퓨터(서버) 상의 환경을 작게 분할한 공간

이렇게 나누어진 컨테이너에 데이터나 프로그램을 두어 격리한다. 이를 격리하는 기능을 제공하는 소프트웨어가 도커다. 도커는 도커 소프트웨어 본체인 도커 엔진을 설치해 사용한다. 이 도커 엔진을 사용하여 컨테이너를 생성하고 구동할 수 있다.

이미지

컨테이너를 만드는 데에는 도커 엔진 외에도 이미지가 필요하다

이미지는 컨테이너의 빵틀과도 같은 역할을 하는 것

이미지에는 많은 종류가 있다. 아파치 컨테이너를 만들려면 아파치 이미지를 사용하고, MySQL 컨테이너를 만들려면 MySQL 이미지를 사용한다.

용량이 허락하는 한, 하나의 도커에서 여러 개의 컨테이너를 만들 수 있다.

2-2. 도커의 작동

도커는 리눅스 상에서 동작한다.

Windows나 MacOS에서도 동작하지만 결국 내부적으로 리눅스가 개입한다. 또한, 컨테이너에서 동작시킨 프로그램도 리눅스용 프로그램이다.

3. 도커의 필요성

3-1. 격리의 필요성

프로그램은 단독으로 동작하지 않는다.

대부분의 프로그램은 어떤 실행 환경이나 라이브러리, 다른 프로그램을 이용해 동작한다. 예를 들어 PHP로 작성된 프로그램을 실행하는 데는 PHP 실행 환경이 필요할 것이고, python으로 작성된 프로그램은 다른 라이브러리를 사용하는 경우가 많다.

소프트웨어도 마찬가지로 여러 개의 프로그램으로 구성된 경우가 많다. 예를 들어 WordPress는 MySQL 데이터베이스를 따로 갖추지 않으면 사용할 수 없다. 다른 경우로는 프로그램들이 특정한 directory를 공유하거나 같은 경로에 성정을 저장하기도 한다.

이 때문에 하나의 프로그램 업데이트가 다른 프로그램들에 영향을 미치게 되는 경우가 발생한다. 또는, 서버를 구축할 때 이런 문제가 발생할 수 있다. 서버에서는 여러 프로그램이 함께 동작하게 된다. 이 때 설계 단계에서 나타나지 않은 문제가 발생하기도 한다. 이 경우 대부분 프로그램 간의 공유 때문에 발생한다.

3-2. 프로그램의 격리

도커 컨테이너는 완전히 독립된 환경이므로 여러 컨테이너에서 같은 프로그램을 실행할 수 있다. 일반적으로 한 컴퓨터에 한 벌의 소프트웨어만을 설치할 수 있다. 하지만 격리를 통해 다양한(혹은 같은) 버전의 소프트웨어를 설치할 수 있다.


SECTION 2. 서버와 도커


1. 서버

1-1. 두 가지 의미의 서버

기능적 의미의 서버는 어떤 기능을 제공하는 의미이다. 즉, 우베 기능을 제공하는 서버는 ‘웹 서버’이고, 메일 기능을 제공하는 서버는 ‘메일 서버’가 된다.

물리적 컴퓨터로의 서버는 데스크톱 컴퓨터와 마찬가지로 어딘가에 물리적으로 존재하는 컴퓨터이다.

개인용 컴퓨터는 개인이 사용하지만 서버는 여러 사람잉 원격으로 접근해 사용한다.

1-2. 서버의 기능

서버의 기능은 소프트웨어가 제공한다.

아파치 같은 웹 서버 소프트웨어를 설치하면 웹 서버 기능을 갖추며, Sendmail 같은 메일 서버 소프트웨어를 설치하면 메인 서버가 된다. 그리고 기능이 소프트웨어에서 나온다는 말은 “여러가지 소프트웨어를 한 컴퓨터에 설치할 수 있다“는 말이다. 그러므로 여러 기능적 의미의 서버가 하나의 물리적 컴퓨터에 함께 존재할 수 있다.

1-3. 자유로이 옮길 수 있는 컨테이너

도커를 이용하면 물리적 환경의 차이, 서버 구성의 차이를 무시할 수 있다.

컨테이너는 자유롭게 옮길 수 있다. 실제 컨테이너 자체를 옮긴다기 보다는 컨테이너의 정보를 내보내기한 다음, 다른 도커 엔진에서 복원하는 형태이다.

이런 특성을 통해 똑같은 상태로 튜닝한 컨테이너를 팀원 전원에게 배포해 모두가 돌일한 개발환경을 사용할 수 있다.

도커 VS. 가상화

가상화 기술

메인보드, CPU, RAM 등의 물리적인 부품을 소프트웨어로 구현하여 대체하는 것. 실질적으로 물리 서버와 동등한 것이므로 운영체제도 아무 것이나 설치할 수 있고, 그 위에 어떤 소프트웨어를 구동해도 무방하다.

도커

컨테이너에서 리눅스가 동작하는 것처럼 보이지만 실제 리눅스가 동작하는 것은 아니다. 운영체제의 기능 중 일부를 호스트 역할을 하는 물리 서버에 맡겨 부담을 덜어 둔 형태이다. 즉, 컨테이너는 운영체제의 일부 기능을 호스트 컴퓨터에 의존하기 때문에 물리 서버에도 리눅스 기능이 필요하며, 컨테이너의 내용도 리눅스 운영체제가 될 수 밖에 없다.

vm vs docker

This post is licensed under CC BY 4.0 by the author.