도커에서 윈도우 컨테이너 사용하기 2/e [윈도우 서버 애플리케이션을 클라우드 네이티브 환경으로 보내기 위한 준비]
- 원서명Docker on Windows: From 101 to production with Docker on Windows, 2nd Edition (ISBN 9781789617375)
- 지은이엘튼 스톤맨(Elton Stoneman)
- 옮긴이남정현
- ISBN : 9791161755762
- 40,000원
- 2021년 10월 27일 펴냄
- 페이퍼백 | 574쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 클라우드 컴퓨팅
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
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, ‘윈도우 컨테이너 개발 환경 구축하기’에서는 윈도우 컨테이너 개발 환경을 서버가 아닌 개발자 컴퓨터 환경에 구축할 수 있는 방법을 상세하게 설명한다.
목차
목차
- 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에 친화적으로 만들기
- 애플리케이션 구성 관리하기
- 볼륨에서 구성 파일 마운트하기
- 환경 변수 가져오기
- 애플리케이션 상태를 모니터링할 수 있는 컨테이너 이미지 만들기
- 인터넷 정보 서비스 애플리케이션을 Docker에서 실행하기
- 의존성 분리하기
- SQL 서버 데이터베이스를 위한 컨테이너 이미지 만들기
- SQL 서버 컨테이너를 위한 데이터베이스 파일 관리하기
- 컨테이너 안에서 데이터베이스 실행하기
- 애플리케이션 컨테이너에서 데이터베이스 컨테이너로 연결하기
- 모놀리식 애플리케이션 나누기
- 복잡한 구성 요소를 모놀리스에서 추출하기
- ASP.NET Core 애플리케이션에서 UI 구성 요소 호스팅하기
- 애플리케이션 컨테이너 연결하기
- 요약
- Docker에 최적화된 애플리케이션 만들기
- 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 지원
- Visual Studio 2017의 Docker 지원
- 컨테이너로 만든 애플리케이션의 메트릭 보기
- 프로메테우스를 사용한 메트릭 활용하기
- .NET 애플리케이션 메트릭을 프로메테우스에 공개하기
- 기존 애플리케이션과 함께 프로메테우스 내보내기 추가하기
- 윈도우 컨테이너에서 프로메테우스 서버 실행하기
- Grafana로 애플리케이션 대시보드 만들기
- Docker의 버그 수정 작업 흐름
- Docker 도입 이전의 버그 수정하기
- Docker 도입 이후의 버그 수정 작업 흐름
- 요약
- 12장. 잘 아는 것을 컨테이너화하기 - Docker 구현을 위한 지침
- 잘 아는 것을 Docker로 만들기
- 간단한 개념 증명 애플리케이션 선택하기
- Image2Docker로 초기 Dockerfile 만들기
- 다른 이해관계자의 참여
- Docker 도입을 위한 사례 연구
- 사례 연구 1 - 사내 웹 폼 애플리케이션
- 사례 연구 2 - 데이터베이스 통합 서비스
- 사례 연구 3 - 애저 IoT 애플리케이션
- 요약
- 잘 아는 것을 Docker로 만들기
- 부록. 독자 여러분을 위한 가이드
- 부록 1. 원서 출간 이후 바뀐 내용의 업데이트
- 윈도우 컨테이너용 SQL 서버 개발 중단
- 배경
- 영향 범위
- 대안
- Docker 엔터프라이즈 부문 매각에 따른 제품 구성 변화
- 배경
- 영향 범위
- 대안
- Docker 허브의 이미지 다운로드 전송량 제한
- 영향 범위
- 대안
- Docker 데스크톱(구 Docker 커뮤니티 에디션) 유료화
- 배경
- 영향 범위
- 대안
- 쿠버네티스에서 Docker 런타임 지원 제외
- 배경
- 영향 범위
- 고려할 사항
- 앙보이 윈도우 버전 정식 출시
- 배경
- 함께 보면 좋은 자료
- 윈도우 서버 2022 정식 출시와 출시 주기의 회귀
- 배경
- 영향 범위
- 고려할 사항
- 컨테이너 베이스 이미지와 호스트 OS의 버전 일치 제약 완화
- 배경
- 테스트 결과
- 정리
- 윈도우 컨테이너용 SQL 서버 개발 중단
- 부록 2. 윈도우 컨테이너 개발 환경 구축하기
- 윈도우 컨테이너 소개
- 윈도우 컨테이너 개요
- 컨테이너 이미지
- 베이스 이미지의 종류
- 컨테이너 격리 방식 이해하기
- 격리 방식의 차이점
- 알기 쉽게 정리한 격리 방식 적용 조건
- 실제 사례 살펴보기
- OS 릴리스 버전 이해하기
- 컨테이너 실행 환경의 선택과 관리
- 개발 환경과 CI
- 컨테이너 오케스트레이션
- 윈도우 컨테이너의 라이선스
- 윈도우 컨테이너 개발 환경 준비
- 가상화 또는 중첩 가상화 지원 여부 확인하기
- 데스크톱용 Docker 설치하기
- 윈도우 컨테이너 호스트로 전환하기
- 윈도우 서버에서 컨테이너 환경 구축하기
- 권장: 서버에 SSH 접속 활성화하기
- 오픈 SSH 서버 설치하고 구성하기
- 비대칭 키 인증 적용하기
- $HOME\.ssh\authorized_keys 파일 사용법
- administratorsauthorizedkeys 사용법
- 인증 키 정보를 담은 파일 권한 설정하기
- SSH 기본 셸 변경하기
- SSH 서비스 시작하기
- 안전한 파일 송·수신 기능 사용하기
- 권장: 클라이언트에서 SSH 접속 준비하기
- 윈도우 컨테이너와 Docker 엔터프라이즈 에디션 활성화하기
- 첫 윈도우 컨테이너 애플리케이션 만들기