본문 바로가기
TIL

[Docker] Basic - Docker 기본 정리

by qbinee 2022. 7. 3.
본 글은 <그림과 실습으로 배우는 도커&쿠버네티스> 를 읽고 정리한 글입니다

도커에 대한 의문점, 이미지, 컨테이너, 왜 쓰이는지를 정리한 글입니다.

0.  도커를 시작하며

본래는 개인용 컴퓨터나 서버에는 여러가지 프로그램들이 동시에 돌아간다. 우리가 컴퓨터를 쓸때 카카오톡, 웹서핑, 게임 등등,, 프로그램들을 컴퓨터의 리소스(자원)을 이용하여 돌린다. 따라서 1컴퓨터 = 1서버 라고 볼 수'도' 있다.

근데.. 만약 내가 쓰는 기능이 내가 가진 컴퓨터의 성능에 비하여 보잘것 없는데 그 프로그램만 쓴다면 너무 손해이지 않을까?

그래서 하나의 좋은 기능을 가진 컴퓨터의 리소스(자원)을 프로그램이 서로 문제 없이 나눠서 쓴다면 얼마나 좋을까?

1. 왜 있을까?

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

이 기능으로 인하여 개발을 해본 사람이라면 아는 버전관리나 각 환경설정을 맞추는 과정에서 편하게 진행할 수 있게한다.

만약 각 프로그램의 ( MySQL, PHP ) 등등,, 을 한 서버 (컴퓨터) 에서 동시에 사용한다고했을때, 만약 php가 업데이트되었는데 기존에 mysql에 호환되던 기능이 안된다면 크나큰 문제가 생길것이다.

그리고 사실 개발할때는 외부 라이브러리를 많이 사용한다.. 이거는 버전에 영향을 크게 받게 되어서 페어 프로그래밍을 한다면 필수적으로 버젼관리를 해야한다.

이런 문제를 발생하지 않게 하기 위하여  도커의 컨테이너 & 이미지 를 이용한다.

 

2. 서버란

어떤 서비스(프로그램)(기능)을 제공(serve)하는 것.

이때 물리적 서버와 기능적 서버가 있는데

물리적 서버는 우리가 보통 슈퍼컴퓨터를 생각하면 떠오르는 하단의 이미지를 의미하고

슈퍼컴퓨터

기능적 서버는

데이터베이스 서버, 파일서버 등

데이터 베이스 서버

해당 기능을 제공하는 서버를 의미한다.

즉 기능적서버는

웹 서버용 소프트웨어를 설치 -> 웹 서버

메일 서버용 소프트웨어를 설치 -> 메일 서버

 

3. 컨테이너와 도커 엔진

컨테이너는 위에서 설명한 각 프로그램들의 충돌을 막기위하여 각 프로그램들을 격리시킨다.

-시스템A - 프로그램의 a 버젼

-시스템B - 프로그램의 b 버젼 

만약 이렇게만 지원한다고 했을때 원래는 2대의 컴퓨터(서버)가 필요했을 것을  컨테이너로 묶어서 하나의 컴퓨터의 자원을 이용하여 컨테이너 내에서 실행시키는 것이다.

1 물리적 서버 = n 기능적 서버를 가능케 한다고 본면 된다.

3.1 . 도커의 구조

도커의 구조

오른쪽(Docker): 운영체제(Operation System) 위에 도커엔진(Docker Engine) 그리고 그 위에서 컨테이너가 동작한다.

왼쪽:  가상화

 

이 두 차이점은  guest os 에있다.

 

일단 도커의 컨테이너 내부에는 Bins / Libs 가 있다.

책에서는 운영체제 비슷한것 이라고 한다. 즉 , 일단 완전한 운영체제는 아닌것이다커널이 빠졌다.

컨테이너 내부에는 커널이 빠짐으로 경량화가 가능한 것이다. 

 

컨테이너 내부의 운영체제 비슷한 것이 진짜 운영체제에 ( 서버 리소스 ) 에 컨테이너 내부의 프로그램내용'만'을 전달한다.

 

원래의 운영체제는 전달받고, 하드웨어에 받은 내용을 정리하여 전달한다, 

정리하는 과정이 빠진것이다.

 

즉, 컨테이너는 리소스만 진짜 서버것을 사용하고 ,

내부에서 각자 따로 프로그램을 가지고 있다.

 

4. 이미지

이는 컨테이너를 만들어내는 빵틀이다.

즉, 컨테이너의 설계도 같은 역할

그러나 컨테이너로 이미지를 만들 수 도 있다.

내가 만약 로봇이 있으면 이 로봇을 기반으로 새로운 로봇틀을 만들수 있듯, 더 나은 컨테이너를 만들기 위해 있는걸로 이미지를 만들고 더욱 성능을 향상된  이미지를 만들어 더 좋은 컨테이너를 만들 수 있다.

 

5.  번외

1. 기본적으로 리눅스에서만 돌아간다

2. 여기서 말하는 소프트웨어는 워드, 엑셀.. 이런것이 아니다. *이거는 mac os , window 운영체제이다*

1에서 설명하는 리눅스 환경이기 때문에 리눅스용 프로그램  MySQL 같은 것들만 올릴 수 있다. 착각하지 말 것