Docker는 무엇일까? 왜 사용해야 할까?
🐳 Docker ?
사전적 의미로는 항구에서 일하는 사람을 말한다.
그렇다면 왜 이런 단어를 사용했을까?
Docker를 이해하기 위해서는 먼저 그 등장 배경을 이해해야 한다.
과거의 개발자들은 협업을 하는데 어려움을 겪었다.
서로 다른 컴퓨터에서 작업하기 때문에 버전, OS 등이 다르기 때문에 발생하는 다양한 문제들이 있었기 때문이다.
이러한 문제를 해결하기 위해 등장한 것이 "가상 환경"이다.
가상 환경은 OS 수준의 추상화를 통해 한 개의 컴퓨터에서 여러 OS 를 실행할 수 있게 해주었다.
이를 통해 협업을 하려는 개발자들은 동일한 환경을 구축할 수 있게 되었다.
하지만 이러한 가상환경은 새로운 문제를 야기했다.
가상환경은 OS 수준의 가상화를 하기 때문에 무겁다는 단점이 있었다.
OS 자체가 무겁기 때문에 각각의 환경에서 OS를 사용한다는 것이 많은 리소스를 사용하는 것이었다.
이러한 문제를 해결하기 위해 Docker가 등장했다.
그렇다면 Docker는 이 문제를 어떻게 해결했을까?
이 질문에 답 하기에 앞서 Docker를 이해하는데 필요한 Container, Image, Docker Engine에 대해 알아보자
🐳 Image 란 ?
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.
- Docker 공식 홈페이지
즉 Container는 코드가 다른 환경에서도 쉽게 동작할 수 있도록 코드,의존성,버전정보,실행파일 등을 패키징 한 것을 의미한다.
하지만 이러한 패키지를 Container라고 하는 것이 아니다. 이러한 코드의 집합은 사실 Container Image( Image )라고 한다.
이러한 Image는 기존의 가상 환경에 비해 굉장히 가볍다.
🐳 Docker Engine 이란 ?
이러한 Image를 실제로 동작시켜주는 Engine을 Docker Engine 이라고 한다.
이 Docker Engine은 OS에 독립적이어서 Window / Linux 모두 동작한다.
( 사실 Container 개념 자체가 Linux OS 기반으로 하기 때문에 Window / macOS 의 경우 Linux 가상환경 위에서 Docker가 실행 되므로 성능 저하가 있습니다 )
🐳 Container 란 ?
Container images become containers at runtime and in the case of Docker containers – images become containers when they run on Docker Engine.
- Docker 공식 홈페이지
Image 들을 Docker Engine을 통해 실행시켰을 때 우리는 비로소 Container라고 한다.
이러한 Container 들은 각각 독립적인 환경을 가진다.
🐳 Docker 란?
즉 Docker란 소스코드, 의존성, 실행파일의 집합인 Image 들을 Docker Engine을 통해 Container로 동작시켜 주는 프로그램을 의미한다.
위의 사진을 통해 살펴 보면 우리는 하나의 OS 위에서 Docker ( Docker Engine ) 을 통해 컨테이너화 된 여러 App 들을 실행할 수 있게 된다.
그렇다면 우리는 더이상 가상환경을 사용할 필요가 없어 졌을까?
그렇지 않다. 가상환경과 컨테이너 개념은 서로 상충 되는 것이 아니라 서로 적절히 조화되어야 하는 개념인 것이다.
이 포스팅을 통해 Docker의 등장 배경과 사용 이유 그리고 개념을 이해하는데 조금이라도 도움 되었길 바랍니다.