이미 소장하고 있다면 판매해 보세요.
|
1부. Docker와 윈도우 컨테이너 이해하기
1장. 윈도우에서 Docker 시작하기 __실습에 필요한 준비 __Docker와 윈도우 컨테이너 ____윈도우 버전 ____윈도우 라이선스 취득 __Docker의 중요 개념 이해하기 ____Docker 엔진과 Docker CLI ____컨테이너 이미지 ____이미지 레지스트리 ____컨테이너 ____Docker 스웜 ______쿠버네티스 소개 __윈도우에서 Docker 실행하기 ____윈도우용 Docker 데스크톱 ____Docker 엔진 ____애저 가상 컴퓨터 안에서 Docker 실행하기 __이 책으로 Docker 배우기 __요약 2장. Docker로 애플리케이션 컨테이너 이미지 만들고 실행하기 __실습에 필요한 준비 __이미지로부터 컨테이너 실행하기 ____태스크 컨테이너에서 한 가지만 실행하기 ____대화형 컨테이너에 연결하기 ____백그라운드 컨테이너 안에서 프로세스를 계속 실행하도록 유지하기 __컨테이너 이미지 빌드하기 ____Dockerfile 이해하기 ____Dockerfile에서 이미지 빌드하기 ____Docker가 이미지를 어떻게 만드는지 확인하기 __애플리케이션 이미지 만들기 ____빌드 도중 애플리케이션 컴파일하기 ____빌드 전에 애플리케이션 컴파일하기 ____다단계 빌드로 컴파일하기 ____주요 Dockerfile 지시어 사용하기 ____임시 컨테이너와 이미지 상태 이해하기 __컨테이너 이미지와 컨테이너 안에서 데이터 다루기 ____레이어 안의 데이터와 가상 C: 드라이브 ____컨테이너 간에 볼륨으로 데이터 공유하기 ____컨테이너와 호스트 간에 볼륨으로 데이터 공유하기 ______호스트 디렉터리로부터 볼륨 마운트하기 ____구성과 상태 관리를 위해 볼륨 사용하기 __기존 ASP.NET 웹 애플리케이션을 컨테이너 이미지로 만들기 ____NerdDinner를 위한 Dockerfile 만들기 __요약 3장. 컨테이너로 .NET Framework 및 .NET Core 애플리케이션 개발하기 __Docker에 최적화된 애플리케이션 만들기 ____인터넷 정보 서비스 애플리케이션을 Docker에서 실행하기 ______IIS의 로그 설정을 Docker에 친화적으로 만들기 ____애플리케이션 구성 관리하기 ______볼륨에서 구성 파일 마운트하기 ______환경 변수 가져오기 ____애플리케이션 상태를 모니터링할 수 있는 컨테이너 이미지 만들기 __의존성 분리하기 ____SQL 서버 데이터베이스를 위한 컨테이너 이미지 만들기 ____SQL 서버 컨테이너를 위한 데이터베이스 파일 관리하기 ______컨테이너 안에서 데이터베이스 실행하기 ____애플리케이션 컨테이너에서 데이터베이스 컨테이너로 연결하기 __모놀리식 애플리케이션 나누기 ____복잡한 구성 요소를 모놀리스에서 추출하기 ____ASP.NET Core 애플리케이션에서 UI 구성 요소 호스팅하기 ____애플리케이션 컨테이너 연결하기 __요약 4장. Docker 레지스트리와 이미지 공유하기 __레지스트리와 리포지터리 이해하기 ____이미지 리포지터리 이름 파악하기 ____이미지를 빌드하고 태그를 붙이고 버전을 관리하는 방법 ____레지스트리로 이미지 푸시하기 __로컬 이미지 레지스트리 실행하기 ____레지스트리 이미지 빌드하기 ____레지스트리 컨테이너 실행하기 ____로컬 레지스트리에 이미지 푸시하고 풀하기 __Docker로 안전하지 않은 레지스트리 접속 허용하기 ____윈도우 이미지 레이어를 로컬 레지스트리에 저장하기 ____상용 레지스트리 사용하기 __Docker 허브 ____신뢰할 수 있는 Docker 레지스트리 ____다른 레지스트리 ____요약 2부. 컨테이너화된 솔루션 설계하고 만들기 5장. 컨테이너 중심 솔루션 설계 채택하기 __실습에 필요한 준비 __NerdDinner의 설계 목표 정하기 ____NerdDinner 구성을 Docker에 친화적으로 만들기 ____만찬 일정 예약 기능 나누기 ____.NET 콘솔 애플리케이션을 Docker로 포장하기 __Docker에서 메시지 큐 실행하기 __여러 컨테이너로 구성된 솔루션 시작하기 __레거시 애플리케이션 현대화하기 ____REST API를 추가해 데이터 공개하기 ____컨테이너 간 HTTP 요청을 리버스 프록시로 라우팅하기 ______컨테이너의 트래픽을 Traefik으로 프록시화하기 __컨테이너에 새로운 기능 추가하기 ____엘라스틱 서치를 Docker와 .NET과 함께 사용하기 ____.NET Framework와 .NET Core가 혼합된 솔루션을 Docker에서 빌드하기 ______복잡한 NerdDinner 솔루션 컴파일하기 ______.NET Core 콘솔 애플리케이션을 컨테이너 이미지로 만들기 ____키바나에 분석 기능 추가하기 __모놀리식에서 분산 솔루션으로 이동하기 ____빌드와 배포 의존성 관리하기 __요약 6장. Docker Compose를 사용한 분산 솔루션 구성하기 __실습에 필요한 준비 __Docker Compose로 애플리케이션 정의하기 ____서비스 정의 만들기 ____인프라 서비스 정의하기 ______엘라스틱 서치 ______Traefik ______키바나 ____애플리케이션 서비스 구성하기 ____애플리케이션 리소스 지정하기 __Docker Compose로 애플리케이션 관리하기 ____애플리케이션 실행하기 ____애플리케이션 서비스 스케일링하기 ____애플리케이션 서비스 중지하고 시작하기 ____애플리케이션 서비스 업그레이드하기 ____애플리케이션 컨테이너 모니터링하기 ____애플리케이션 이미지 관리하기 __애플리케이션 환경 구성하기 ____외부 리소스 지정하기 ____Docker Compose 재정의 사용하기 __요약 7장. Docker 스웜을 사용한 분산 솔루션 오케스트레이션 __실습에 필요한 준비 __스웜 클러스터 만들고 노드 관리하기 ____스웜 클러스터 초기화하기 ____워커 노드를 스웜 클러스터에 추가하기 ____스웜 노드의 승격과 제거 ____Docker 스웜을 클라우드에서 실행하기 ______Docker 인증 인프라 __스웜 모드 안에서 서비스 만들어 관리하기 ____여러 컨테이너에 걸쳐 서비스 실행하기 ____글로벌 서비스 ____스웜 모드의 로드 밸런싱과 확장 __Docker 스웜에서 애플리케이션 구성 관리하기 ____Docker 구성 개체로 구성 저장하기 ____Docker 구성 개체를 스웜 서비스에서 사용하기 ____Docker 시크릿으로 민감한 데이터 저장하기 __Docker 스웜으로 스택 배포하기 ____Docker Compose 파일을 사용해 스택 정의하기 ____스웜 리소스를 Docker Compose 파일에 정의하기 ____스웜 스택을 Docker Compose 파일로부터 배포하기 __무중단으로 업데이트 배포하기 ____애플리케이션 서비스 업데이트하기 ____서비스 업데이트 롤백하기 ____업데이트 동작 구성하기 ____스웜 노드 업데이트하기 ____하이브리드 스웜에서 호스트 혼합하기 __요약 3부. Docker 프로덕션 환경 준비하기 8장. Docker 기반의 솔루션과 DTR의 관리 및 모니터링하기 __실습에 필요한 준비 __윈도우 도구로 컨테이너 관리하기 ____IIS 관리자 ____SSMS ____이벤트 로그 ____서버 관리자 __Docker 도구로 컨테이너 관리하기 ____Docker 시각화 도구 ____포테이너 __Docker 엔터프라이즈로 CaaS 기능 이용하기 ____유니버설 제어 플레인 이해하기 ____UCP UI 탐색하기 ____노드 관리하기 ____볼륨 ____이미지 ____네트워크 ____스택 배포하기 ____서비스 만들기 ____서비스 모니터링하기 ____RBAC __요약 9장. Docker의 보안 위험 및 이점 이해하기 __컨테이너 보안 이해하기 ____컨테이너 프로세스 ____컨테이너 사용자 계정과 접근 제어 목록 ____리소스 제약 사항과 함께 컨테이너 실행하기 ____제한된 용량으로 컨테이너 실행하기 ____윈도우 컨테이너와 액티브 디렉터리 ____Hyper-V 컨테이너 격리하기 __안전한 컨테이너 이미지로 애플리케이션 보안 강화하기 ____최소한의 이미지 만들기 ____컨테이너 이미지 취약점 검사하기 ____윈도우 업데이트 관리하기 __DTR로 소프트웨어 공급망 보호하기 ____리포지터리와 사용자 ____조직과 팀 ____DTR의 이미지 프로모션 정책 ____이미지 서명과 콘텐츠 트러스트 ____골든 이미지 __스웜 모드의 보안 이해하기 ____노드와 참가 토큰 ____암호화와 시크릿 ____노드 라벨과 외부 접근 ____컨테이너 보안 기술과 연동하기 __요약 10장. Docker로 지속적 배포 파이프라인 구축하기 __실습에 필요한 준비 __Docker로 CI/CD 설계하기 __Docker에서 공유 개발 서비스 실행하기 ____Git 서버를 윈도우 컨테이너 이미지로 만들기 ____Docker에서 Gogs Git 서버 실행하기 ____CI 서버를 윈도우 컨테이너 이미지로 만들기 ____Docker에서 젠킨스 자동화 서버 실행하기 ____만들어진 컨테이너에서 이미지에 반영할 변경 사항 추출하기 __Docker에서 젠킨스를 사용해 CI/CD 구성하기 ____젠킨스 자격 증명 설정하기 ____젠킨스 CI 작업 구성하기 ____젠킨스에서 Docker를 사용해 솔루션 빌드하기 ____솔루션 실행 및 확인하기 ____Docker에서 엔드 투 엔드 테스트 실행하기 ____젠킨스에서 컨테이너 이미지에 태그 지정하고 푸시하기 __젠킨스를 사용해 원격 Docker 스웜에 배포하기 __요약 4부. 컨테이너로 떠나는 여행 11장. 애플리케이션 컨테이너 디버깅 및 메트릭 보기 __실습에 필요한 준비 __Docker를 통합 개발 환경에서 함께 사용하는 방법 ____Visual Studio 2017의 Docker 지원 ______Docker Compose로 Visual Studio 2017에서 디버깅하기 ____Visual Studio 2015의 Docker 지원 ____Visual Studio Code의 Docker 지원 __컨테이너로 만든 애플리케이션의 메트릭 보기 ____프로메테우스를 사용한 메트릭 활용하기 ____.NET 애플리케이션 메트릭을 프로메테우스에 공개하기 ____기존 애플리케이션과 함께 프로메테우스 내보내기 추가하기 ____윈도우 컨테이너에서 프로메테우스 서버 실행하기 ____Grafana로 애플리케이션 대시보드 만들기 __Docker의 버그 수정 작업 흐름 ____Docker 도입 이전의 버그 수정하기 ____Docker 도입 이후의 버그 수정 작업 흐름 __요약 12장. 잘 아는 것을 컨테이너화하기 - Docker 구현을 위한 지침 __잘 아는 것을 Docker로 만들기 ____간단한 개념 증명 애플리케이션 선택하기 ____Image2Docker로 초기 Dockerfile 만들기 ____다른 이해관계자의 참여 __Docker 도입을 위한 사례 연구 ____사례 연구 1 - 사내 웹 폼 애플리케이션 ____사례 연구 2 - 데이터베이스 통합 서비스 ____사례 연구 3 - 애저 IoT 애플리케이션 __요약 부록. 독자 여러분을 위한 가이드 부록 1. 원서 출간 이후 바뀐 내용의 업데이트 __윈도우 컨테이너용 SQL 서버 개발 중단 ____배경 ____영향 범위 ____대안 __Docker 엔터프라이즈 부문 매각에 따른 제품 구성 변화 ____배경 ____영향 범위 ____대안 __Docker 허브의 이미지 다운로드 전송량 제한 ____영향 범위 ____대안 __Docker 데스크톱(구 Docker 커뮤니티 에디션) 유료화 ____배경 ____영향 범위 ____대안 __쿠버네티스에서 Docker 런타임 지원 제외 ____배경 ____영향 범위 ____고려할 사항 __앙보이 윈도우 버전 정식 출시 ____배경 ____함께 보면 좋은 자료 __윈도우 서버 2022 정식 출시와 출시 주기의 회귀 ____배경 ____영향 범위 ____고려할 사항 __컨테이너 베이스 이미지와 호스트 OS의 버전 일치 제약 완화 ____배경 ____테스트 결과 ____정리 부록 2. 윈도우 컨테이너 개발 환경 구축하기 __윈도우 컨테이너 소개 __윈도우 컨테이너 개요 __컨테이너 이미지 __베이스 이미지의 종류 __컨테이너 격리 방식 이해하기 __격리 방식의 차이점 __알기 쉽게 정리한 격리 방식 적용 조건 __실제 사례 살펴보기 __OS 릴리스 버전 이해하기 __컨테이너 실행 환경의 선택과 관리 ____개발 환경과 CI ____컨테이너 오케스트레이션 ____윈도우 컨테이너의 라이선스 ____윈도우 컨테이너 개발 환경 준비 __가상화 또는 중첩 가상화 지원 여부 확인하기 __데스크톱용 Docker 설치하기 ____윈도우 컨테이너 호스트로 전환하기 __윈도우 서버에서 컨테이너 환경 구축하기 __권장: 서버에 SSH 접속 활성화하기 __오픈 SSH 서버 설치하고 구성하기 __비대칭 키 인증 적용하기 __$HOME\.ssh\authorized_keys 파일 사용법 __administrators_authorized_keys 사용법 __인증 키 정보를 담은 파일 권한 설정하기 __SSH 기본 셸 변경하기 __SSH 서비스 시작하기 __안전한 파일 송·수신 기능 사용하기 __권장: 클라이언트에서 SSH 접속 준비하기 __윈도우 컨테이너와 Docker 엔터프라이즈 에디션 활성화하기 __첫 윈도우 컨테이너 애플리케이션 만들기 |
Elton Stoneman
남정현의 다른 상품
|
이 책에서 다루는 내용
- 도커의 주요 개념인 이미지, 컨테이너, 레지스트리, 스웜 클러스터 이해하기 - 윈도우 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 파이프라인을 구축하는 방법을 확인할 수 있다. 안심하고 프로덕션 환경으로 전환할 수 있도록 도커 보안, 관리, 지원 방법을 알아본다. 사내 소규모 애플리케이션부터 애저에서 실행되는 대규모 애플리케이션에 이르기까지 도커 구현의 실제 사례를 알아본다. 옮긴이의 말 컨테이너 기반의 기술은 이제 업계에서 사실상의 표준이자 기본 기술이 됐다. 최신 기술을 다루거나, 최신 기술에 관심이 있는 사람이라면 누구나 기본적인 내용으로 학습하고 인지하는 기술이 됐다. 그리고 이런 컨테이너를 가장 활용하기 쉽고 편리하게 만들어주는 도구는 단연 도커라는 것을 부정하는 사람이 없다. 컨테이너 기술 덕분에, 그 결과 이전에는 찾아볼 수 없었던 수준의 강력함과 유연성을 이뤄내며, IT 업계에 새로운 가능성과 비전을 제시하고 있다. 한 서버에서 호스팅할 수 있는 애플리케이션의 수를 크게 늘려 더 많은 애플리케이션을 동시에 효율적이면서도 체계적으로 호스팅할 수 있도록 해주고, 동일 운영 비용 대비 더 많은 작업과 서비스를 가능하게 만들었다. 도커는 리눅스를 기반으로 개발돼 온 기술이다. 시대의 흐름에 맞춰 윈도우를 개발하는 마이크로소프트 역시 이런 도커의 흥미로운 움직임을 적극적으로 운영체제에 수용해 윈도우에서도 컨테이너 런타임의 이점을 충분히 누릴 수 있도록 새로운 기술 스택을 추가했고, 그것이 바로 이 책에서 다루는 윈도우 컨테이너 기술이며, 도커 역시 리눅스 컨테이너뿐 아니라 윈도우 컨테이너를 호스팅하거나 윈도우 컨테이너 이미지를 빌드할 수 있도록 기능을 제공하고 있다. 안타까운 점은, 도커가 리눅스에 국한된 기술이라고 굳게 믿게 할 만한 현실적인 제약 사항이 꽤 강력하게 작용한다는 것이다. 리눅스 컨테이너처럼 쉽게 개발자의 컴퓨터에 설치해서 쓸 수 없거나, 기대한 성능을 이끌어내기 위해 알아야 할 사전 조건이 까다로운 편이다. 그리고 윈도우의 상징처럼 여겨지는 GUI 애플리케이션을 컨테이너화할 수 없다는 것 때문에 금새 흥미를 잃는 경우도 많을 것이다. 그러나 이는 도커의 태생과 방향성을 생각해보면 당연한 것이며, 다른 한편으로 윈도우 기반 애플리케이션의 입장에서는 불공평한 면도 있다. 하지만 컨테이너 런타임을 들여와 얻을 수 있는 이점은 이런 불공평함을 가볍게 뛰어넘고도 남을 정도로 매력적이고 강력하다. 필자는 데브시스터즈에서 데브옵스 엔지니어로 일하면서, 윈도우 컨테이너를 지원하는 쿠버네티스로 개발 환경 전체를 효율화하고, 동시에 프로덕션 환경에서 윈도우 컨테이너로 게임 서비스를 구동할 수 있도록 인프라를 구축해서 성공적으로 게임 서비스를 호스팅하는 경험을 얻을 수 있었다. 컨테이너 런타임을 도입해서 관리할 수 있다면 설치와 배포 과정에서 발생하는 인적 오류를 원천 봉쇄할 수 있을 뿐 아니라, 문제가 발생할 경우에는 언제든 컨테이너를 다시 시작하거나 재배포하는 것만으로 빠르게 문제를 복구하고, 중단 시간을 최소화할 수 있는 방법을 제공한다. 그러면서도 기존 윈도우 서버 애플리케이션의 이점은 약간의 주의를 기울이는 것 만으로도 얼마든지 호환성을 맞춰 대응할 수 있으니 적극적으로 고려해 볼만한 매력적인 기술이라고 자신 있게 말할 수 있다. 실무에서 윈도우 컨테이너를 도입하기를 원하거나, 자세한 내용을 알기 원하는 모든 이에게 이 책은 좋은 시작점이 될 것이다. 하지만 윈도우 컨테이너를 도입하면서 익숙해지려면 실제로는 알아야 할 내용이 적지 않은 것 또한 사실이다. 그래서 원서에서는 자세히 다루지 않았으나, 필자가 실무에서 윈도우 컨테이너를 도입하면서 경험했던 실수하기 쉬운 내용들을 따로 담아 약간의 가이드를 추가했으니, 시작 단계에서 발걸음을 떼지 못한 독자는 꼭 읽어 보기를 권한다. |