도커를 사용하면 개발 환경을 이미지화 시키고 해당 이미지를 통해 개발 및 배포 환경을 쉽게 컨테이너화 시켜 구축할 수 있다. 이런 도커를 사용하는 이유에 대해 간단히 알아보자.
개발을 하다보면 팀원들과 언어나 프레임워크의 버전이 달라 오류가 나는 경우가 있을 수 있다. 필자의 경우 프로젝트를 할 때 팀원들과 파이썬 버전이 달라서 이슈를 겪었던 적이 있다.
도커를 사용하면 이런 문제를 쉽게 해결할 수 있다. 도커 이미지에 언어나 프레임워크 버전을 미리 모두 정해놓을 수 있고 해당 이미지를 컨테이너화 시키면 그 컨테이너는 로컬 환경의 간섭 없이 독립적으로 구동하기 때문에 위와 같은 걱정을 할 필요가 싹 사라진다.
또한 Dockerfile을 사용하면 설치할 언어, 프레임워크, 패키지 등을 미리 코드 형태로 명시하고 어느 컴퓨터에서든 쉽게 자동으로 설치할 수 있다.
서버 컴퓨터또한 쉽게 내 개발 환경과 같은 환경으로 만들 수 있다. 그렇지만 더 큰 장점은 서버를 옮기거나 늘릴 때 발휘된다.
만약 내가 서버에서 배포하고 있던 서비스의 인기가 많아져 서버를 늘리거나 더 좋은 서버로 이사를 가야한다고 가정해보자. 이 때 새로운 서버에 하나 하나 전 서버에서 쓰던 언어와 프레임워크를 설치하게 되면 매우 귀찮은 일이 될 것이다.
이 때 도커를 사용하게 되면 이미지만을 가져와 새로운 서버에 컨테이너를 만들어 쉽게 동일환 환경을 구축할 수 있다.
또한 하나의 물리 서버에서 여러 도커 컨테이너를 돌려 여러 서비스를 배포하는 것도 가능하다(AWS EC2나 구름IDE 같은 서비스도 이런 원리).
이 때 각 서비스마다 같은 언어와 프레임워크를 사용해도 필요한 버전이 다를 수 있는데 도커 컨테이너는 각각 독립적으로 구동되기 때문에 버전 차이에서 오는 이슈를 걱정할 필요가 사라진다.
도커의 경우 다른 가상 환경 기술에 비해 가볍고 빠른 실행 속도를 가진다. 이유가 무엇인지 간단하게 예를 들어보겠다.
큰 건물이 있고 그 건물에 여러 사무실이 입주해 있다고 생각해보자. 각 사무실은 전기와 물을 사용해야 한다. 만약 사무실마다 이를 위한 발전소와 물탱크를 설치한다면 어떨까? 듣기만 해도 매우 귀찮은 일이다. 그렇게 하지 않고 건물에 있는 커다란 발전소와 물탱크를 각 사무실이 유동적으로 나눠쓰면 훨~씬 효율적일 것이다.
이 때 후자와 같은 방식이 도커가 효율적으로 동작하는 방식이다.
기존의 가상화 방식은 각 가상 환경마다 독립된 커널 OS가 존재하여 매우 무겁고 느릴 수 밖에 없었다. 또한 각 환경마다 쓸 수 있는 자원이 고정으로 정해져 있기 때문에 컴퓨터의 성능과 환경이 제한된다. 성능 환경이 중요한 서버에선 더더욱 곤란할 것이다.
그러나 도커의 가상화 방식은 새롭게 커널 OS를 생성하지 않고 기존의 커널 OS 자원을 계승하여 사용한다. 또한 각 환경마다 사용할 수 있는 자원이 고정으로 정해져 있지 않아 유동적으로 변할 수 있다. 이러한 이유로 기존의 가상화 방식보다 훨씬 자원적, 성능적으로 뛰어날 수 밖에 없다.
도커를 사용하면 기존에 개발자들이 환경 설정으로부터 겪던 고충을 말끔히 해결시켜 준다. 사실상 업계 표준이 되어가고 있으니 사용법을 꼭 익히면 좋을 것이다.
WSL의 경우 기존에는 도커를 Native하게 지원하지 않았는데 WSL2로 업데이트 되면서 지원하기 시작했다. 또한 Vscode에서 도커 익스텐션을 깔면 도커 환경에서도 Vscode를 사용할 수 있다!!
또한 여러 도커 컨테이너들을 함께 관리해주는 '쿠버네티스'라는 기술을 보통 함께 사용되는데 이것또한 후에 알아보도록 하자.