Docker

augusstt·2023년 10월 24일
0

FE

목록 보기
32/33
post-thumbnail

Docker?

우리가 프론트/백엔드를 개발할때, 각각의 환경이 다 다를것이다. 각각의 운영체제, 개발언어, 버전등 고려해야 할것이 너무나도 많다. 한사람이 동일한 로컬에서 계속 개발/유지보수를 하면 상관없겠지만 사실상 그럴일은 없다고 봐도 무방하다.
그렇다면 각각의 개발환경을 저장해서 다운로드 하는것처럼 사용할순 없을까? 의 해답이 바로 docker이다.

Docker는 리눅스 컨테이너 기반의 오픈소스 가상화 플랫폼이다.
docker를 이해하는데 있어서 몇가지 필수적인 키워드들이 있는데 하나씩 살펴보며 docker가 뭔지 알아보자.

Image

Docker에서 말하는 이미지란 소프트웨어 실행에 필요한 코드, 라이브러리, 컴파일된 실행파일 등을 묶는 형태를 말한다.
예를들어 Python Image는 Python 실행에 필요한 모든 실행환경을 가지고 있고, Redis Image는 Redis 실행에 필요한 모든 실행환경을 가지고 있는 식이다.
만약 새로운 서버가 필요한 경우, 미리 만들어놓은 Image를 다운로드 받고 Container를 생성하기만 하면 된다.

하지만 소프트웨어 실행에 필요한 모든 파일을 저장하고 있다면 당연히 그 용량이 클 수 밖에 없다. 따라서 Docker는 Layer 저장방식 을 사용하고 있다.

Layer 저장방식

Layer

위의 그림처럼, 각각의 Image는 여러개의 Layer로 구성되어 있다.

가장 좌측의 우분투 이미지가 존재하는 상황에서 우분투 기반의 nginx 이미지를 생성한 이미지가 가운데 nginx 이미지이다. 기존에 우분투 이미지를 가지고 있기 때문에 새롭게 필요한 nginx Layer만 가져오면 되는 구조이다.

즉, 기존에 가지고 있던 Image / Layer는 새롭게 다시 가져오지 않고 추가적으로 필요한 Image / Layer 만 가져오면 된다. 또한 기존에 존재하는 Image와 Layer는 변하거나 영향을 받지 않는다.

Container

우리가 소프트웨어를 개발할때, 강제적으로 OS와 라이브러리 등에 의존성을 띌수 밖에 없다. 만약 하나의 컴퓨터에서 각기 다른 OS와 라이브러리를 실행환경으로 가지는 소프트웨어를 실행한다면, 에러가 발생 할 수도 있고, 각각의 소프트웨어에 대한 환경을 다루기 어렵다.

컨테이너는 소프트웨어 실행 환경을 독립적으로 운영할 수 있도록 하는 기술이다.
다양한 실행 환경과 프로그램을 규격화시켜 소프트웨어의 배포 / 관리를 용이하게 만들어 준다. 해당 소프트웨어의 코드와 실행환경을 모두 가지고 있기에 다른 환경에서도 해당 규격대로 빠르게 실행이 가능하다.

즉, 위에서 말한 Image들을 바탕으로 실제로 프로그램을 실행시키는 것이다.

정리하자면 도커는

소프트웨어의 실행환경을 Image라고 하는 개념으로 규격화 하여 실행한 컨테이너 기반 오픈소스 가상화 플랫폼이라고 할 수 있다.

profile
https://augusstt-note.gitbook.io/aug-note 로 블로그 이전했습니다!

0개의 댓글