작성자는 도커를 실제 업무에 사용해본 경험이 없다. 공부하면서 알게된거지만 도커는 생각보다 많은 개발자들이 업무에 활용하고 사용하고 있었다.. (난 왜 항상 뒤쳐지는가..) 물론 이번에 개발하게된 서비스가 도커를 사용하여 서비스가 관리가 되고 있었기에 관심을 가지게 되었다. 도커를 사용하여 서비스를 관리하는 방법에 대하여 알아보자
구글에 도커란 이라고 검색만 해도 도커에 대한 개념을 알 수 있지만 내가 보고, 읽은 개념중 재밌고, 또 실무에 적용될만한 개념만 적어보도록 하겠다.
먼저 도커에 어원이 재밌다. 도커는 컨테이너 기반의 가상화 플랫폼이다. 부두에서 컨테이너를 옮기고 관리하는 직업인 docker에서 따 온 이름에 걸맞게 컨테이너를 잘 다룰 수 있게 도와 주는 도구 라고 한다. 나중엔 java, spring 등 다양한 어원을 알아봐야겠다..
그림을 보게되면 OS(Host Operationg System)위에 Docker가 있고, 그 위에는 다수의 애플리케이션 서비스가 올라가 있는 형식을 볼 수 있다. 대~충 감이 오지 않나.
도커는 애플리케이션을 컨테이너라는 개념으로 환경을 격리시켜 실행하고 관리하게 해주는 엔진이라고 한다.
도커를 사용하게 되면 크게 네 가지 정도의 장점이 있는거 같다.
도커는 앞서 말한것처럼 컨테이너라는 개념으로 환경을 격리시켜 애플리케이션을 실행하므로, 컨테이너 내의 환경 (운영체제, 라이브러리, 패키지 등)은 항상 동일하다. 또한 컨테이너 내부에서 애플리케이션이 읽고 쓰는 파일 시스템이나 환경 변수가 격리되어 있어, 호스트 시스템이나 다른 컨테이너와 충돌하지 않는다.
애플리케이션과 그에 필요한 모든 것을 하나의 컨테이너 이미지라는 개념으로 묶어서 배포할 수 있다.
컨테이너는 리소스(메모리, CPU 등)를 효율적으로 사용하며, 여러 컨테이너가 동일한 호스트 운영체제에서 독립적으로 실행될 수 있다. 로 격리된 환경을 제공하면서도 경량화되어 있어 가상 머신에 비해 더 적은 리소스를 사용한다.
가상머신에 비교는 밑에서 따로 설명하겠다.
개발자는 Docker로 로컬에서 다양한 환경을 쉽게 재현할 수 있다. 예를 들어, 특정 운영체제나 데이터베이스, 애플리케이션 서버가 필요한 경우에도 Docker를 사용해 몇 줄의 명령어로 해당 환경을 설정할 수 있다고 하는데..
이건 못해봄..ㅋ
출처: https://www.linkedin.com/pulse/docker-containers-virtual-machines-explained-mesut-oezdil-shsfe
[도커는 아파트 단지를 상상해보자. 이 단지 내에서 Docker 컨테이너는 아파트와 같다. 즉, 거주자(=애플리케이션)에게 필요한 모든 것을 제공하는 독립형 생활 공간이다 다만 동일한 배관 및 전기 시스템(호스트 OS 및 하드웨어)을 공유한다.]
[VM은 도커 컨테이너가 단지 내의 아파트라면, 가상 머신은 각각 독립적인 시설과 시스템을 갖춘 주택과 같다.]
나름대로 이해하기 쉽게 정리하여 보았다. 도커를 사용함으로써 많은 이점이 있다는걸 알 수 있었다. 도커를 왜 많은 개발자들이 사용하는지 이해가 간다..