항상 도커가 좋다라는 말을 들었는데 선뜻 왜 좋아라고 물었을때 또박또박 설명할 만큼의 지식은 부족하다고 느껴서 이번을 계기로 한번 되짚고 가려고 한다.
Docker는 컨테이너 기술을 이용한 오픈 소스 플랫폼으로, 어플리케이션의 배포와 실행을 위한 표준화된 방법으로
기존 운영체제 가상화와 달리 컨테이너는 운영체제 레벨의 가상화를 이용하여 격리된 환경에서 어플리케이션을 실행할 수 있도록 합니다.
어플리케이션의 실행 환경을 격리된 컨테이너라는 단위로 패키징하는 것을 말합니다. 이를 통해, 어플리케이션의 실행에 필요한 모든 것(라이브러리, 의존성 등)을 포함하여 하나의 독립적인 단위로 만들어, 어플리케이션을 쉽게 이식하고 배포할 수 있게 됩니다.
컨테이너는 호스트 운영체제 위에서 동작하며, 이를 이용하여 다른 어플리케이션과 격리된 환경에서 동작할 수 있습니다. 따라서, 컨테이너화된 어플리케이션은 호스트 운영체제와는 독립적으로 실행될 수 있으며, 호스트 운영체제와의 호환성 문제를 해결할 수 있습니다.
기존 가상화방식은 가상화된 운영체제 위에 hypervisor엔진과 여러개의 독립된 운영체제가 또 올라가기떄문에 매우 무겁고 느릴 수 밖에 없다. 또한 자원이 제한적이라 컴퓨터 성능과 환경이 제한된다.
반면 도커는 새로운 운영체제를(guest OS) 생성하지 않고 Docker Engine 위에서 컨테이너로 각각 격리시켜 동작이 이루어지며 가상운영체제의 자원을 공유하기 때문에 자원이 유동적으로 , 기존 가상화 방식보다 훨씬 자원적, 성능적 뛰어날 수 밖에 없다 .
예를 들어 , 팀프로젝트를 시작하게 됐을때 팀원끼리 언어나 프레임워크의 버전이 달라 오류가 나는 이슈가 있다. 이러한 문제점을 도커로 해결 할 수 있다.
도커 이미지에 언어나 프레임워크를 미리 모두 정해두고 컨테이너화 시키면 그 컨테이너는 로컬환경의 간섭없이 독립적으로 구동하기 때문에 위와 같은 이슈를 해결 할 수 있습니다.
또한 도커파일을 사용하면 설치할 언어, 프레임워크, 패키지 등을 미리 코드형태로 명시하고 어느 컴퓨터에서든 쉽게 자동으로 설치 할수 있다.
서버 컴퓨터 또한 쉽게 내 개발환경과 같은 환경으로 만들 수 있다. 그리고 가장 큰 장점으로는 서버를 이사하거나 늘릴때이다.
만약에 내가 서버에서 배포하고 있던 서비스가 인기 많아져서 , 서버를 이사하거나 , 서버를 늘려야 할경우 기존에 쓰던 언어, 프레임워크 등을 처음부터 설치해야되는 복잡한일이 생긴다.
이때 도커를 사용하게 되면 이미지만 가져와서 새로운 서버환경에 컨테이너를 생성하여 동일한 환경을 구축할 수 있다.
또한 하나의 물리서버에서 여러개의 도커컨테이너를 돌려 여러 서비스를 배포하는것도 가능하다.
이떄 각 서비스마다 같은 언어나 프레임워크를 사용해도 필요한 버전이 다를 수 있는데 도커 컨테이너는 각각 독립적으로 구동되기 때문에 버전차이에서 오는 이슈를 걱정할 필요가 사라진다.
도커를 이용하여 신속하게 구축 할수 있다는 것은 위와 같이 개발환경을 이미지를 저장해뒀다가 가져와 필요한 서버에 컨테이너를 생성하면 동일한 환경을 만들 수 있어서 이고,
이미지를 컨테이너화시키면 그 컨테이너는 로컬환경에 간섭없이 독립적 구동이 가능하여 , 각각의 로컬환경이 달라 생기는 이슈 , 버전 이슈 등을 해결 해준다.
또한 기존 가상화 방식과는 달리 운영체제의 자원을 공유하여 사용함으로 성능적으로 뛰어나다.