Flux 7은 단순화된 구성, 코드 파이프라인 관리, 향상된 개발 효율성, 격리된 애플리케이션, 통합 서버, 디버깅 기능, 다중 테넌트 환경, 빠른 개발 등 8가지 일반적으로 사용되는 Docker 사용 사례를 소개합니다. 우리는 도커에 대해, 어떻게 사용하는지, 어떤 경우에 사용하는지에 대해 이야기해왔습니다. 이 글이 도움이 될 수도 있습니다. 전달할 내용이 있으면 댓글을 통해 소통하실 수 있습니다.
몇 주 전, 우리는 도커콘(DockerCon)에 참석했는데, 이는 최초의 도커 중심 기술 컨퍼런스였습니다. 이 플랫폼은 자신의 노트북에서 실행되든 데이터 센터 내 가상 머신이든 Docker 오픈 플랫폼에서 분산 애플리케이션을 구축, 배포, 실행하는 데 관심 있는 개발자와 실무자를 대상으로 합니다. 우리는 컨퍼런스에 참석했고, Flux7은 Docker Foundations의 시스템 통합 파트너이자 초청 연사입니다.
우리 CEO인 아터 술레만이 고객 중 한 명과 대화를 나누었습니다. DockerCon은 매우 재미있었지만, 컨퍼런스가 도커의 구체적인 내용에만 너무 집중하고 도커의 사용 사례를 간과한 느낌이 들었습니다. 그래서 이 글에서는 Docker의 실용적인 사용 사례를 소개하고 공유하고자 합니다.
도커의 사용 사례를 논의하기 전에, 도커가 왜 특별한지 살펴보겠습니다.
Docker는 거의 추가 오버헤드 없이 가상화를 가볍게 제공하는데, 이 점이 꽤 멋집니다.
첫째, 가상화 성능을 즐기면서 추가 오버헤드 걱정은 하지 않아도 됩니다. 둘째, 같은 머신 내에서 가상 머신보다 더 많은 수의 컨테이너를 만들 수 있습니다.
도커의 또 다른 장점은 컨테이너를 몇 초 만에 시작하고 멈출 수 있다는 점입니다. 도커의 창립자인 솔로몬 하이크스는 한때 도커가 LXC 위에 무엇을 했는지 이야기한 적이 있는데, 직접 확인해 보실 수 있습니다.
다음은 Docker의 장점을 활용해 일관된 환경에서 낮은 오버헤드를 만드는 방법을 보여주는 제 Docker 사용 사례들을 소개합니다.
1. 단순화된 구성
이것이 바로 Docker 회사가 광고하는 Docker의 주요 사용 사례입니다. 가상 머신의 가장 큰 장점은 하드웨어 시설에서 다양한 플랫폼(소프트웨어, 시스템)을 실행할 수 있다는 점이며, Docker는 추가 오버헤드를 줄이면서 동일한 기능을 제공합니다. 런타임과 구성을 코드로 입력한 후 배포할 수 있고, 동일한 도커 구성을 다른 환경에서 사용할 수 있어 하드웨어 요구사항과 애플리케이션 환경 간의 결합을 줄일 수 있습니다.
2. 코드 파이프라인 관리
앞서 말한 시나리오는 코드 파이프라인 관리에 큰 도움이 됩니다. 코드는 개발자의 컴퓨터에서 최종 프로덕션 환경에 배포될 때까지 여러 중간 환경을 거칩니다. 각 중간 환경마다 작은 차이가 있으며, Docker는 개발부터 출시까지 일관된 환경을 제공하여 코드 파이프라인을 훨씬 쉽게 만듭니다.
3. 개발 효율성 향상
이로 인해 추가적인 이점이 있습니다: Docker는 개발자의 생산성을 높입니다. 더 자세한 예시를 보고 싶으시다면, 2014년 DevOpsDays Austin이나 DockerCon에서 Aater의 강연을 참고하실 수 있습니다.
서로 다른 개발 환경에서 우리는 모두 두 가지를 잘 해내고 싶어 합니다. 첫째, 개발 환경을 생산 환경에 최대한 가깝게 만들고 싶고, 둘째, 개발 환경을 빠르게 구축하고자 합니다.
이상적으로는 첫 번째 목표를 달성하기 위해 각 서비스를 별도의 가상 머신에서 실행하여 운영 환경에서 서비스의 상태를 모니터링해야 합니다. 하지만 매번 네트워크 연결이 필요하면 되고, 재컴파일할 때마다 원격으로 연결하는 것이 특히 번거롭습니다. 이 점이 특히 Docker가 잘하는 부분입니다. 개발 환경의 머신들은 보통 비교적 작은 메모리를 가지고 있고, 가상 환경을 사용할 때는 종종 메모리를 추가해야 하지만, 이제 Docker는 수십 개의 서비스를 쉽게 Docker에서 실행할 수 있게 합니다.
4. 응용 분야 분리
앞서 언급한 시나리오처럼 개발 효율성을 높이기 위해 여러 애플리케이션을 한 기기에서 실행하는 이유가 많습니다.
우리는 종종 비용 절감을 위해 서버 통합을 고려해야 하며, 단일 애플리케이션의 느슨한 결합 서비스로 분할하는 것도 필요합니다. 느슨한 결합 앱이 왜 중요한지 이해하고 싶다면, Steve Yege가 작성한 구글과 아마존을 비교한 논문을 참고하세요.
5. 서버 통합
여러 애플리케이션이 가상 머신을 통해 통합되는 것처럼, Docker가 애플리케이션을 분리하는 능력 덕분에 Docker는 여러 서버를 통합하여 비용을 줄일 수 있습니다. 여러 운영체제에서 메모리 사용량이 없고 여러 인스턴스에서 사용하지 않는 메모리를 공유할 수 있는 기능으로, Docker는 가상 머신보다 더 나은 서버 통합 솔루션을 제공할 수 있습니다.
6. 디버깅 기능
도커는 컨테이너에만 국한된 것이 아니라 컨테이너용으로도 작동하는 다양한 도구를 제공합니다. 컨테이너 체크포인트 설정, 버전 설정, 두 컨테이너 간 차이 확인 등 다양한 기능을 제공하여 버그 디버깅에 도움이 됩니다. 이 예시는 Docker Save the World 기사에서 확인할 수 있습니다.
7. 다중 임차인 환경
도커의 또 다른 흥미로운 사용 사례는 다중 테넌트 애플리케이션으로, 중요한 애플리케이션을 다시 작성하는 것을 피할 수 있습니다. 이 시나리오의 한 가지 구체적인 예는 IoT 애플리케이션을 위한 빠르고 사용하기 쉬운 다중 테넌트 환경 개발입니다. 이 다중 테넌시 기본 코드는 복잡하고 다루기 어렵기 때문에, 애플리케이션을 재계획하는 것은 시간과 비용 낭비입니다.
Docker를 사용하면 각 테넌트의 애플리케이션 계층에 대해 여러 인스턴스를 분리한 환경을 쉽게 만들고 저렴하게 만들 수 있는데, 이는 Docker 환경의 빠른 속도와 효율적인 diff 명령어 덕분입니다.
이 상황에 대해 더 알아보실 수 있습니다.
8. 신속한 배치
가상 머신이 등장하기 전에는 새로운 하드웨어 자원을 도입하는 데 며칠이 걸립니다. 도커의 가상화 기술은 이 시간을 몇 분으로 단축시키며, 도커는 운영체제를 시작하지 않고도 컨테이너 프로세스를 생성하는 데 몇 초가 걸립니다. 이것이 바로 구글과 페이스북이 중요하게 여기는 점입니다.
재시작 시 오버헤드 걱정 없이 데이터 센터에서 파괴 리소스를 만들 수 있습니다. 일반적으로 데이터 센터는 자원 사용률이 30%에 불과하며, Docker와 효율적인 자원 할당을 통해 자원 활용도를 향상시킬 수 있습니다. |