소스 코드 파일은여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/docker-windows
윈도우 서버용으로 만든 서버 애플리케이션을 요즈음 유행하는 도커(Docker) 기반으로 윈도우 컨테이너 형태로 변환하기 위한 기술적인 방법과 노하우를 담고 있는 책이다. 도커를 사용하는 기본적인 방법을 포함해서 오래된 윈도우 서버 애플리케이션을 코드 수정 없이 클라우드 네이티브 기반으로 현대화할 수 있는 전략을 설명한다. 또한 프로덕션 환경에서 윈도우 컨테이너를 관리하기 위한 방안과, 데브옵스 개념을 처음 접하는 개발자들을 위한 워크플로우를 소개해 윈도우 컨테이너를 실무에 도입하는 것을 고민하는 사람들에게 비전을 제시하고 있다.
◆ 도커의 주요 개념인 이미지, 컨테이너, 레지스트리, 스웜 클러스터 이해하기
◆ 윈도우 10, 윈도우 서버 2019, 클라우드에서 도커 실행하기
◆ 여러 컨테이너에 걸쳐 분산된 솔루션 배포, 모니터링
◆ 도커 스웜에서 컨테이너를 실행해 항상 사용 가능한 상태를 유지하고 장애 상황을 자체적으로 해결할 수 있도록 구현하기
◆ 도커 플랫폼의 심층적 보안 완벽 이해와 애플리케이션 보안 강화
◆ 지속적 배포 파이프라인을 도커 안에서 젠킨스, Git으로 생성 및 실행하기
◆ Visual Studio를 사용해 Docker 컨테이너 안의 애플리케이션 디버깅하기
◆ 조직 안에서 도커 도입 계획 수립하기
기존 단일 애플리케이션을 다시 만들지 않고 현대화할 때, 배포를 프로덕션으로 원활하게 전환하거나 데브옵스 또는 클라우드로 이동할 때 도커가 큰 도움이 될 것이다. 이 책으로 도커 관련 견고한 지식과 기반을 얻을 수 있으며 필요한 모든 상황에 폭넓게 대입할 수 있을 것이다.
1장, ‘윈도우에서 Docker 시작하기’에서는 도커 런타임을 소개하고 윈도우 10 및 윈도우 서버 2019에서 도커를 실행해 애저 가상 컴퓨터에서 도커를 실행하는 방법을 알아본다.
2장, ‘Docker로 애플리케이션 컨테이너 이미지 만들고 실행하기’에서는 컨테이너 이미지 즉 컨테이너를 실행할 수 있는 모든 호스트에서 같은 방식으로 실행되는 모든 종속성 있는 패키지 애플리케이션에 초점을 맞춘다. 간단한 웹사이트의 Dockerfile로 컨테이너 이미지를 만든 후 윈도우에서 실행하는 방법을 확인해본다.
3장, ‘컨테이너로 .NET Framework 및 .NET Core 애플리케이션 개발하기’에서는 기존 .NET Framework 애플리케이션을 컨테이너로 만들어 윈도우 컨테이너에서 실행하는 방법을 알아보고 모든 운영체제에서 실행할 수 있는 새로운 .NET Core 애플리케이션을 같은 접근 방법으로 활용하는 방법을 알아본다. .NET Core 애플리케이션은 윈도우와 리눅스에서 모두 잘 실행되며 이식하기 쉬운 컨테이너로 애플리케이션을 옮길 때 이상적으로 적합한 기술이다.
4장, ‘Docker 레지스트리와 이미지 공유하기’에서는 제품팀의 공식 이미지, 공공 커뮤니티 이미지, 개인 저장소의 이미지 등 구축된 이미지를 공유할 수 있는 도커 허브를 다룬다. 개발 중인 이미지를 게시하는 방법, 내부 사용을 위해 사설 도커 레지스트리를 실행하는 방법 그리고 추가 기능이 있는 상업용 레지스트리 솔루션을 알아본다.
5장, ‘컨테이너 중심 솔루션 설계 채택하기’에서는 4장의 내용을 바탕으로 다양한 고품질 컨테이너 이미지를 사용해 기성품 이미지와 맞춤형 이미지를 혼합해 분산 솔루션을 설계하는 방법을 간단하게 보여준다. 윈도우 컨테이너에서 일래스틱서치와 키바나의 새로운 분석 기능과 함께 레거시 모놀리식 애플리케이션을 분해하고 홈페이지 구성 요소를 새로 대체하며 REST API를 추가하는 방법을 배운다.
6장, ‘Docker Compose를 사용한 분산 솔루션 구성하기’에서는 애드혹(Ad-hoc) 분산 솔루션을 Docker 네트워크와 함께 Docker Compose를 사용해 배포 가능한 패키지로 빌드하는 방법을 알아본다. 이로써 컨테이너가 DNS를 사용해 통신할 수 있으며 Docker Compose YML 파일 구조와 Docker Compose의 실행 방식을 설명한다. 또한 도커 네트워크의 개요로 컨테이너를 서로 연결하는 것이 얼마나 쉬운지도 알 수 있을 것이다.
7장, ‘Docker 스웜을 사용한 분산 솔루션 오케스트레이션’에서는 Docker 스웜을 사용한 프로덕션 준비 클러스터 구축 방법을 설명하며 도커에 들어 있는 새로운 클러스터링 기술에 중점을 둔다. 윈도우에서 실행되는 스웜 클러스터를 설정하고 라우팅 메시의 작동 방식을 알아보며 분산 애플리케이션을 스웜 서비스로 배포해 서비스 검색 기능을 사용하고 안정적으로 작동하게 만드는 방법을 배운다.
8장, ‘Docker 기반의 솔루션과 DTR의 관리 및 모니터링하기’에서는 분산 Docker 솔루션 관리 방법을 설명한다. 윈도우 컨테이너와 함께 기존 관리 도구를 사용할 수 있다. 또한 Docker 스웜에서 컨테이너를 시각화하기 위해 무료/상용 도구를 사용해 컨테이너화된 애플리케이션을 관리하는 새로운 방법을 알아보고 실행 중인 서비스의 순차 업데이트 방법을 배운다.
9장, ‘Docker의 보안 위험 및 이점 이해하기’에서는 도커 보안의 주요 특징 즉 하나인 노드에 여러 컨테이너가 실행될 때 발생할 수 있는 위험(즉, 공격자가 하나의 컨테이너를 망가뜨리고 다른 컨테이너에 접근할 수 있는 상황)을 알아보고 이러한 문제를 최소화하는 방법을 설명한다. Docker 허브와 신뢰할 수 있는 레지스트리에 들어 있는 이미지에 대한 보안 취약 요소 검색 기능으로 도커가 보안을 강화하는 방법을 배우고 이미지 내부의 소프트웨어가 내포한 보안 문제를 다룬다.
10장 ‘Docker로 만드는 지속적 배포 파이프라인 구축하기’에서는 모든 것이 자동화된 데브옵스 작업 흐름에서 도커를 다룬다. 소스 제어 및 빌드를 위해 컨테이너에서 Git 서버 및 젠킨스 자동화 서버를 실행하는 도커를 사용해 전체 배포 파이프라인을 구축한다. 파이프라인은 코드가 푸시될 때 새로운 컨테이너 이미지를 만들고 자동화된 테스트를 실행하며 테스트 환경에 배포한다.
11장, ‘애플리케이션 컨테이너 디버깅 및 메트릭 보기’에서는 컨테이너를 빌드하거나 실행하는 도중 발생하는 문제를 해결하는 방법을 알아본다. 다양한 버전의 Visual Studio에서 도커를 사용하는 방법과 애플리케이션 및 컨테이너의 메트릭을 확인해 현재 상태를 대시보드에 표시하는 방법을 알아본다. 또한 도커가 개발자의 버그 수정 작업 방식을 개선하는 방법도 알아본다.
12장, ‘잘 아는 것을 컨테이너화하기 - 도커 구현을 위한 지침’에서는 실제 사례에 초점을 맞춘다. 도커의 비즈니스 사례를 제시하고 비즈니스 사례가 충족되는지 확인하는 방법을 설명한다. 개념 증명에서 기존 소프트웨어 스택을 컨테이너화하는 방법과 도커에서 실행할 수 있는 애플리케이션에서 버티컬 슬라이스(기능 중 일부를 추출해 부분적으로 만들어보는 것)를 추출해 마이크로서비스 아키텍처로 이동하는 방법을 알아본다.부록 1, ‘원서 출간 이후 바뀐 내용의 업데이트’에서는 원서가 출간된 후 업데이트된 도커 및 관련 기술, 그중에서도 윈도우 컨테이너와 연관된 부분을 주로 소개하며 바뀐 내용에 맞춰 독자가 검토해야 할 내용을 담고 있다.
부록 2, ‘윈도우 컨테이너 개발 환경 구축하기’에서는 윈도우 컨테이너 개발 환경을 서버가 아닌 개발자 컴퓨터 환경에 구축할 수 있는 방법을 상세하게 설명한다.
컨테이너는 소프트웨어를 실행할 새로운 방법이다. 컨테이너는 효율적이고 보안성과 이식성이 뛰어나며 윈도우 애플리케이션을 도커에서 코드 변경 없이 실행할 수 있다. 도커는 매우 어려운 주제인 레거시 애플리케이션의 현대화, 애플리케이션 빌드, 클라우드로의 이동, 데브옵스 도입, 지속적 혁신과 같은 일을 이루게 도와줄 것이다.
이 책은 윈도우에서 도커를 사용할 때 필요한 모든 것을 기초부터 프로덕션에서 항상 사용 가능한 상태를 보장하기 위해 알아야 할 내용까지 모두 다룬다. 윈도우의 컨테이너에 있는 .NET Framework 및 .NET Core 애플리케이션의 주요 개념과 간단한 예제부터 시작해 도커로의 여정을 안내할 것이다. 그런 다음 도커를 사용해 기존 아키텍처를 어떻게 현대화하고 전통적인 ASP.NET과 SQL 서버 애플리케이션을 개발할 수 있는지를 배울 수 있다.
이러한 예제에서는 레거시 단일 애플리케이션을 분산된 애플리케이션으로 분할해 클라우드의 클러스터링된 환경에 배포하는 방법을 보여주며 로컬에서 실행할 때 사용하는 것과 같은 결과물을 사용한다. 그리고 도커를 사용해 애플리케이션을 컴파일, 패키지, 테스트, 배포하는 CI/CD 파이프라인을 구축하는 방법을 확인할 수 있다. 안심하고 프로덕션 환경으로 전환할 수 있도록 도커 보안, 관리, 지원 방법을 알아본다.
사내 소규모 애플리케이션부터 애저에서 실행되는 대규모 애플리케이션에 이르기까지 도커 구현의 실제 사례를 알아본다.
2010년부터 마이크로소프트 MVP로 활동했으며 2013년부터 Pluralsight에서 저자로 활동했다. Docker에 입사하기 전 15년 동안 컨설턴트로 일했고 윈도우, 도커, 애저에서 실행되는 .NET 기반으로 만들어진 대규모 성공적인 솔루션을 설계해 배포해왔다.
마이크로소프트 기술 스택의 새로운 진화를 매우 즐기고 있으며 기존 .NET Framework 애플리케이션을 도커와 함께 .NET Core를 사용해 윈도우와 리눅스 컨테이너로 현대화하는 것이 왜 필요한지 많은 사람이 이해하도록 도와주고 있다.
도커를 주제로 블로그 글을 쓰고 트위터로 소통하고 강의 및 발표를 자주 진행한다. 도커와 .NET 사용자 그룹에서 정기적으로 활동하며 DockerCon, NDC, DevSum, BuildStuff, WinOps, Techorama 등 전 세계 여러 콘퍼런스를 다니며 재미있는 발표를 하는 것을 즐긴다.
컨테이너 기반의 기술은 이제 업계에서 사실상의 표준이자 기본 기술이 됐다. 최신 기술을 다루거나, 최신 기술에 관심이 있는 사람이라면 누구나 기본적인 내용으로 학습하고 인지하는 기술이 됐다. 그리고 이런 컨테이너를 가장 활용하기 쉽고 편리하게 만들어주는 도구는 단연 도커라는 것을 부정하는 사람이 없다.
컨테이너 기술 덕분에, 그 결과 이전에는 찾아볼 수 없었던 수준의 강력함과 유연성을 이뤄내며, IT 업계에 새로운 가능성과 비전을 제시하고 있다. 한 서버에서 호스팅할 수 있는 애플리케이션의 수를 크게 늘려 더 많은 애플리케이션을 동시에 효율적이면서도 체계적으로 호스팅할 수 있도록 해주고, 동일 운영 비용 대비 더 많은 작업과 서비스를 가능하게 만들었다.
도커는 리눅스를 기반으로 개발돼 온 기술이다. 시대의 흐름에 맞춰 윈도우를 개발하는 마이크로소프트 역시 이런 도커의 흥미로운 움직임을 적극적으로 운영체제에 수용해 윈도우에서도 컨테이너 런타임의 이점을 충분히 누릴 수 있도록 새로운 기술 스택을 추가했고, 그것이 바로 이 책에서 다루는 윈도우 컨테이너 기술이며, 도커 역시 리눅스 컨테이너뿐 아니라 윈도우 컨테이너를 호스팅하거나 윈도우 컨테이너 이미지를 빌드할 수 있도록 기능을 제공하고 있다.
안타까운 점은, 도커가 리눅스에 국한된 기술이라고 굳게 믿게 할 만한 현실적인 제약 사항이 꽤 강력하게 작용한다는 것이다. 리눅스 컨테이너처럼 쉽게 개발자의 컴퓨터에 설치해서 쓸 수 없거나, 기대한 성능을 이끌어내기 위해 알아야 할 사전 조건이 까다로운 편이다. 그리고 윈도우의 상징처럼 여겨지는 GUI 애플리케이션을 컨테이너화할 수 없다는 것 때문에 금새 흥미를 잃는 경우도 많을 것이다. 그러나 이는 도커의 태생과 방향성을 생각해보면 당연한 것이며, 다른 한편으로 윈도우 기반 애플리케이션의 입장에서는 불공평한 면도 있다.
하지만 컨테이너 런타임을 들여와 얻을 수 있는 이점은 이런 불공평함을 가볍게 뛰어넘고도 남을 정도로 매력적이고 강력하다. 필자는 데브시스터즈에서 데브옵스 엔지니어로 일하면서, 윈도우 컨테이너를 지원하는 쿠버네티스로 개발 환경 전체를 효율화하고, 동시에 프로덕션 환경에서 윈도우 컨테이너로 게임 서비스를 구동할 수 있도록 인프라를 구축해서 성공적으로 게임 서비스를 호스팅하는 경험을 얻을 수 있었다.
컨테이너 런타임을 도입해서 관리할 수 있다면 설치와 배포 과정에서 발생하는 인적 오류를 원천 봉쇄할 수 있을 뿐 아니라, 문제가 발생할 경우에는 언제든 컨테이너를 다시 시작하거나 재배포하는 것만으로 빠르게 문제를 복구하고, 중단 시간을 최소화할 수 있는 방법을 제공한다. 그러면서도 기존 윈도우 서버 애플리케이션의 이점은 약간의 주의를 기울이는 것 만으로도 얼마든지 호환성을 맞춰 대응할 수 있으니 적극적으로 고려해 볼만한 매력적인 기술이라고 자신 있게 말할 수 있다.
실무에서 윈도우 컨테이너를 도입하기를 원하거나, 자세한 내용을 알기 원하는 모든 이에게 이 책은 좋은 시작점이 될 것이다. 하지만 윈도우 컨테이너를 도입하면서 익숙해지려면 실제로는 알아야 할 내용이 적지 않은 것 또한 사실이다. 그래서 원서에서는 자세히 다루지 않았으나, 필자가 실무에서 윈도우 컨테이너를 도입하면서 경험했던 실수하기 쉬운 내용들을 따로 담아 약간의 가이드를 추가했으니, 시작 단계에서 발걸음을 떼지 못한 독자는 꼭 읽어 보기를 권한다.
데브시스터즈에서 데브옵스 엔지니어로 일하고 있으며, 사내에서 개발되고 있는 윈도우 서버 애플리케이션 기반의 게임 서버를 클라우드 네이티브 기반의 인프라에서 실행할 수 있도록 기술 개발과 지원하는 일을 했다.
2009년부터 2022년까지 마이크로소프트 MVP로 활동하고 있으며, 닷넷 개발자들을 위한 커뮤니티인 닷넷데브, WSL 사용자들을 위한 커뮤니티인 한국 WSL 사용자 그룹 커뮤니티를 운영하고 있다.