도커에서 윈도우 컨테이너 사용하기 (윈도우 서버 애플리케이션을 클라우드 네이티브 환경으로 보내기 위한 준비 | 2 판)

도커에서 윈도우 컨테이너 사용하기 (윈도우 서버 애플리케이션을 클라우드 네이티브 환경으로 보내기 위한 준비 | 2 판)

$40.78
Description
윈도우 서버용으로 만든 서버 애플리케이션을 요즈음 유행하는 도커(Docker) 기반으로 윈도우 컨테이너 형태로 변환하기 위한 기술적인 방법과 노하우를 담고 있는 책이다. 도커를 사용하는 기본적인 방법을 포함해서 오래된 윈도우 서버 애플리케이션을 코드 수정 없이 클라우드 네이티브 기반으로 현대화할 수 있는 전략을 설명한다. 또한 프로덕션 환경에서 윈도우 컨테이너를 관리하기 위한 방안과, 데브옵스 개념을 처음 접하는 개발자들을 위한 워크플로우를 소개해 윈도우 컨테이너를 실무에 도입하는 것을 고민하는 사람들에게 비전을 제시하고 있다.
저자

엘튼스톤맨

EltonStoneman
2010년부터마이크로소프트MVP로활동했으며2013년부터Pluralsight에서저자로활동했다.Docker에입사하기전15년동안컨설턴트로일했고윈도우,도커,애저에서실행되는.NET기반으로만들어진대규모성공적인솔루션을설계해배포해왔다.
마이크로소프트기술스택의새로운진화를매우즐기고있으며기존.NETFramework애플리케이션을도커와함께.NETCore를사용해윈도우와리눅스컨테이너로현대화하는것이왜필요한지많은사람이이해하도록도와주고있다.
도커를주제로블로그글을쓰고트위터로소통하고강의및발표를자주진행한다.도커와.NET사용자그룹에서정기적으로활동하며DockerCon,NDC,DevSum,BuildStuff,WinOps,Techorama등전세계여러콘퍼런스를다니며재미있는발표를하는것을즐긴다.

목차

1부.Docker와윈도우컨테이너이해하기
1장.윈도우에서Docker시작하기
__실습에필요한준비
__Docker와윈도우컨테이너
____윈도우버전
____윈도우라이선스취득
__Docker의중요개념이해하기
____Docker엔진과DockerCLI
____컨테이너이미지
____이미지레지스트리
____컨테이너
____Docker스웜
______쿠버네티스소개
__윈도우에서Docker실행하기
____윈도우용Docker데스크톱
____Docker엔진
____애저가상컴퓨터안에서Docker실행하기
__이책으로Docker배우기
__요약

2장.Docker로애플리케이션컨테이너이미지만들고실행하기
__실습에필요한준비
__이미지로부터컨테이너실행하기
____태스크컨테이너에서한가지만실행하기
____대화형컨테이너에연결하기
____백그라운드컨테이너안에서프로세스를계속실행하도록유지하기
__컨테이너이미지빌드하기
____Dockerfile이해하기
____Dockerfile에서이미지빌드하기
____Docker가이미지를어떻게만드는지확인하기
__애플리케이션이미지만들기
____빌드도중애플리케이션컴파일하기
____빌드전에애플리케이션컴파일하기
____다단계빌드로컴파일하기
____주요Dockerfile지시어사용하기
____임시컨테이너와이미지상태이해하기
__컨테이너이미지와컨테이너안에서데이터다루기
____레이어안의데이터와가상C:드라이브
____컨테이너간에볼륨으로데이터공유하기
____컨테이너와호스트간에볼륨으로데이터공유하기
______호스트디렉터리로부터볼륨마운트하기
____구성과상태관리를위해볼륨사용하기
__기존ASP.NET웹애플리케이션을컨테이너이미지로만들기
____NerdDinner를위한Dockerfile만들기
__요약

3장.컨테이너로.NETFramework및.NETCore애플리케이션개발하기
__Docker에최적화된애플리케이션만들기
____인터넷정보서비스애플리케이션을Docker에서실행하기
______IIS의로그설정을Docker에친화적으로만들기
____애플리케이션구성관리하기
______볼륨에서구성파일마운트하기
______환경변수가져오기
____애플리케이션상태를모니터링할수있는컨테이너이미지만들기
__의존성분리하기
____SQL서버데이터베이스를위한컨테이너이미지만들기
____SQL서버컨테이너를위한데이터베이스파일관리하기
______컨테이너안에서데이터베이스실행하기
____애플리케이션컨테이너에서데이터베이스컨테이너로연결하기
__모놀리식애플리케이션나누기
____복잡한구성요소를모놀리스에서추출하기
____ASP.NETCore애플리케이션에서UI구성요소호스팅하기
____애플리케이션컨테이너연결하기
__요약

4장.Docker레지스트리와이미지공유하기
__레지스트리와리포지터리이해하기
____이미지리포지터리이름파악하기
____이미지를빌드하고태그를붙이고버전을관리하는방법
____레지스트리로이미지푸시하기
__로컬이미지레지스트리실행하기
____레지스트리이미지빌드하기
____레지스트리컨테이너실행하기
____로컬레지스트리에이미지푸시하고풀하기
__Docker로안전하지않은레지스트리접속허용하기
____윈도우이미지레이어를로컬레지스트리에저장하기
____상용레지스트리사용하기
__Docker허브
____신뢰할수있는Docker레지스트리
____다른레지스트리
____요약


2부.컨테이너화된솔루션설계하고만들기
5장.컨테이너중심솔루션설계채택하기
__실습에필요한준비
__NerdDinner의설계목표정하기
____NerdDinner구성을Docker에친화적으로만들기
____만찬일정예약기능나누기
____.NET콘솔애플리케이션을Docker로포장하기
__Docker에서메시지큐실행하기
__여러컨테이너로구성된솔루션시작하기
__레거시애플리케이션현대화하기
____RESTAPI를추가해데이터공개하기
____컨테이너간HTTP요청을리버스프록시로라우팅하기
______컨테이너의트래픽을Traefik으로프록시화하기
__컨테이너에새로운기능추가하기
____엘라스틱서치를Docker와.NET과함께사용하기
____.NETFramework와.NETCore가혼합된솔루션을Docker에서빌드하기
______복잡한NerdDinner솔루션컴파일하기
______.NETCore콘솔애플리케이션을컨테이너이미지로만들기
____키바나에분석기능추가하기
__모놀리식에서분산솔루션으로이동하기
____빌드와배포의존성관리하기
__요약

6장.DockerCompose를사용한분산솔루션구성하기
__실습에필요한준비
__DockerCompose로애플리케이션정의하기
____서비스정의만들기
____인프라서비스정의하기
______엘라스틱서치
______Traefik
______키바나
____애플리케이션서비스구성하기
____애플리케이션리소스지정하기
__DockerCompose로애플리케이션관리하기
____애플리케이션실행하기
____애플리케이션서비스스케일링하기
____애플리케이션서비스중지하고시작하기
____애플리케이션서비스업그레이드하기
____애플리케이션컨테이너모니터링하기
____애플리케이션이미지관리하기
__애플리케이션환경구성하기
____외부리소스지정하기
____DockerCompose재정의사용하기
__요약

7장.Docker스웜을사용한분산솔루션오케스트레이션
__실습에필요한준비
__스웜클러스터만들고노드관리하기
____스웜클러스터초기화하기
____워커노드를스웜클러스터에추가하기
____스웜노드의승격과제거
____Docker스웜을클라우드에서실행하기
______Docker인증인프라
__스웜모드안에서서비스만들어관리하기
____여러컨테이너에걸쳐서비스실행하기
____글로벌서비스
____스웜모드의로드밸런싱과확장
__Docker스웜에서애플리케이션구성관리하기
____Docker구성개체로구성저장하기
____Docker구성개체를스웜서비스에서사용하기
____Docker시크릿으로민감한데이터저장하기
__Docker스웜으로스택배포하기
____DockerCompose파일을사용해스택정의하기
____스웜리소스를DockerCompose파일에정의하기
____스웜스택을DockerCompose파일로부터배포하기
__무중단으로업데이트배포하기
____애플리케이션서비스업데이트하기
____서비스업데이트롤백하기
____업데이트동작구성하기
____스웜노드업데이트하기
____하이브리드스웜에서호스트혼합하기
__요약


3부.Docker프로덕션환경준비하기
8장.Docker기반의솔루션과DTR의관리및모니터링하기
__실습에필요한준비
__윈도우도구로컨테이너관리하기
____IIS관리자
____SSMS
____이벤트로그
____서버관리자
__Docker도구로컨테이너관리하기
____Docker시각화도구
____포테이너
__Docker엔터프라이즈로CaaS기능이용하기
____유니버설제어플레인이해하기
____UCPUI탐색하기
____노드관리하기
____볼륨
____이미지
____네트워크
____스택배포하기
____서비스만들기
____서비스모니터링하기
____RBAC
__요약

9장.Docker의보안위험및이점이해하기
__컨테이너보안이해하기
____컨테이너프로세스
____컨테이너사용자계정과접근제어목록
____리소스제약사항과함께컨테이너실행하기
____제한된용량으로컨테이너실행하기
____윈도우컨테이너와액티브디렉터리
____Hyper-V컨테이너격리하기
__안전한컨테이너이미지로애플리케이션보안강화하기
____최소한의이미지만들기
____컨테이너이미지취약점검사하기
____윈도우업데이트관리하기
__DTR로소프트웨어공급망보호하기
____리포지터리와사용자
____조직과팀
____DTR의이미지프로모션정책
____이미지서명과콘텐츠트러스트
____골든이미지
__스웜모드의보안이해하기
____노드와참가토큰
____암호화와시크릿
____노드라벨과외부접근
____컨테이너보안기술과연동하기
__요약

10장.Docker로지속적배포파이프라인구축하기
__실습에필요한준비
__Docker로CI/CD설계하기
__Docker에서공유개발서비스실행하기
____Git서버를윈도우컨테이너이미지로만들기
____Docker에서GogsGit서버실행하기
____CI서버를윈도우컨테이너이미지로만들기
____Docker에서젠킨스자동화서버실행하기
____만들어진컨테이너에서이미지에반영할변경사항추출하기
__Docker에서젠킨스를사용해CI/CD구성하기
____젠킨스자격증명설정하기
____젠킨스CI작업구성하기
____젠킨스에서Docker를사용해솔루션빌드하기
____솔루션실행및확인하기
____Docker에서엔드투엔드테스트실행하기
____젠킨스에서컨테이너이미지에태그지정하고푸시하기
__젠킨스를사용해원격Docker스웜에배포하기
__요약


4부.컨테이너로떠나는여행
11장.애플리케이션컨테이너디버깅및메트릭보기
__실습에필요한준비
__Docker를통합개발환경에서함께사용하는방법
____VisualStudio2017의Docker지원
______DockerCompose로VisualStudio2017에서디버깅하기
____VisualStudio2015의Docker지원
____VisualStudioCode의Docker지원

출판사 서평

◈이책에서다루는내용◈

◆도커의주요개념인이미지,컨테이너,레지스트리,스웜클러스터이해하기
◆윈도우10,윈도우서버2019,클라우드에서도커실행하기
◆여러컨테이너에걸쳐분산된솔루션배포,모니터링
◆도커스웜에서컨테이너를실행해항상사용가능한상태를유지하고장애상황을자체적으로해결할수있도록구현하기
◆도커플랫폼의심층적보안완벽이해와애플리케이션보안강화
◆지속적배포파이프라인을도커안에서젠킨스,Git으로생성및실행하기
◆VisualStudio를사용해Docker컨테이너안의애플리케이션디버깅하기
◆조직안에서도커도입계획수립하기

◈이책의대상독자◈

기존단일애플리케이션을다시만들지않고현대화할때,배포를프로덕션으로원활하게전환하거나데브옵스또는클라우드로이동할때도커가큰도움이될것이다.이책으로도커관련견고한지식과기반을얻을수있으며필요한모든상황에폭넓게대입할수있을것이다.

◈이책의구성◈

1장,‘윈도우에서Docker시작하기’에서는도커런타임을소개하고윈도우10및윈도우서버2019에서도커를실행해애저가상컴퓨터에서도커를실행하는방법을알아본다.
2장,‘Docker로애플리케이션컨테이너이미지만들고실행하기’에서는컨테이너이미지즉컨테이너를실행할수있는모든호스트에서같은방식으로실행되는모든종속성있는패키지애플리케이션에초점을맞춘다.간단한웹사이트의Dockerfile로컨테이너이미지를만든후윈도우에서실행하는방법을확인해본다.
3장,‘컨테이너로.NETFramework및.NETCore애플리케이션개발하기’에서는기존.NETFramework애플리케이션을컨테이너로만들어윈도우컨테이너에서실행하는방법을알아보고모든운영체제에서실행할수있는새로운.NETCore애플리케이션을같은접근방법으로활용하는방법을알아본다..NETCore애플리케이션은윈도우와리눅스에서모두잘실행되며이식하기쉬운컨테이너로애플리케이션을옮길때이상적으로적합한기술이다.
4장,‘Docker레지스트리와이미지공유하기’에서는제품팀의공식이미지,공공커뮤니티이미지,개인저장소의이미지등구축된이미지를공유할수있는도커허브를다룬다.개발중인이미지를게시하는방법,내부사용을위해사설도커레지스트리를실행하는방법그리고추가기능이있는상업용레지스트리솔루션을알아본다.
5장,‘컨테이너중심솔루션설계채택하기’에서는4장의내용을바탕으로다양한고품질컨테이너이미지를사용해기성품이미지와맞춤형이미지를혼합해분산솔루션을설계하는방법을간단하게보여준다.윈도우컨테이너에서일래스틱서치와키바나의새로운분석기능과함께레거시모놀리식애플리케이션을분해하고홈페이지구성요소를새로대체하며RESTAPI를추가하는방법을배운다.
6장,‘DockerCompose를사용한분산솔루션구성하기’에서는애드혹(Ad-hoc)분산솔루션을Docker네트워크와함께DockerCompose를사용해배포가능한패키지로빌드하는방법을알아본다.이로써컨테이너가DNS를사용해통신할수있으며DockerComposeYML파일구조와DockerCompose의실행방식을설명한다.또한도커네트워크의개요로컨테이너를서로연결하는것이얼마나쉬운지도알수있을것이다.
7장,‘Docker스웜을사용한분산솔루션오케스트레이션’에서는Docker스웜을사용한프로덕션준비클러스터구축방법을설명하며도커에들어있는새로운클러스터링기술에중점을둔다.윈도우에서실행되는스웜클러스터를설정하고라우팅메시의작동방식을알아보며분산애플리케이션을스웜서비스로배포해서비스검색기능을사용하고안정적으로작동하게만드는방법을배운다.
8장,‘Docker기반의솔루션과DTR의관리및모니터링하기’에서는분산Docker솔루션관리방법을설명한다.윈도우컨테이너와함께기존관리도구를사용할수있다.또한Docker스웜에서컨테이너를시각화하기위해무료/상용도구를사용해컨테이너화된애플리케이션을관리하는새로운방법을알아보고실행중인서비스의순차업데이트방법을배운다.
9장,‘Docker의보안위험및이점이해하기’에서는도커보안의주요특징즉하나인노드에여러컨테이너가실행될때발생할수있는위험(즉,공격자가하나의컨테이너를망가뜨리고다른컨테이너에접근할수있는상황)을알아보고이러한문제를최소화하는방법을설명한다.Docker허브와신뢰할수있는레지스트리에들어있는이미지에대한보안취약요소검색기능으로도커가보안을강화하는방법을배우고이미지내부의소프트웨어가내포한보안문제를다룬다.
10장‘Docker로만드는지속적배포파이프라인구축하기’에서는모든것이자동화된데브옵스작업흐름에서도커를다룬다.소스제어및빌드를위해컨테이너에서Git서버및젠킨스자동화서버를실행하는도커를사용해전체배포파이프라인을구축한다.파이프라인은코드가푸시될때새로운컨테이너이미지를만들고자동화된테스트를실행하며테스트환경에배포한다.
11장,‘애플리케이션컨테이너디버깅및메트릭보기’에서는컨테이너를빌드하거나실행하는도중발생하는문제를해결하는방법을알아본다.다양한버전의VisualStudio에서도커를사용하는방법과애플리케이션및컨테이너의메트릭을확인해현재상태를대시보드에표시하는방법을알아본다.또한도커가개발자의버그수정작업방식을개선하는방법도알아본다.
12장,‘잘아는것을컨테이너화하기-도커구현을위한지침’에서는실제사례에초점을맞춘다.도커의비즈니스사례를제시하고비즈니스사례가충족되는지확인하는방법을설명한다.개념증명에서기존소프트웨어스택을컨테이너화하는방법과도커에서실행할수있는애플리케이션에서버티컬슬라이스(기능중일부를추출해부분적으로만들어보는것)를추출해마이크로서비스아키텍처로이동하는방법을알아본다.
부록1,‘원서출간이후바뀐내용의업데이트’에서는원서가출간된후업데이트된도커및관련기술,그중에서도윈도우컨테이너와연관된부분을주로소개하며바뀐내용에맞춰독자가검토해야할내용을담고있다.
부록2,‘윈도우컨테이너개발환경구축하기’에서는윈도우컨테이너개발환경을서버가아닌개발자컴퓨터환경에구축할수있는방법을상세하게설명한다.


옮긴이의말
컨테이너기반의기술은이제업계에서사실상의표준이자기본기술이됐다.최신기술을다루거나,최신기술에관심이있는사람이라면누구나기본적인내용으로학습하고인지하는기술이됐다.그리고이런컨테이너를가장활용하기쉽고편리하게만들어주는도구는단연도커라는것을부정하는사람이없다.
컨테이너기술덕분에,그결과이전에는찾아볼수없었던수준의강력함과유연성을이뤄내며,IT업계에새로운가능성과비전을제시하고있다.한서버에서호스팅할수있는애플리케이션의수를크게늘려더많은애플리케이션을동시에효율적이면서도체계적으로호스팅할수있도록해주고,동일운영비용대비더많은작업과서비스를가능하게만들었다.
도커는리눅스를기반으로개발돼온기술이다.시대의흐름에맞춰윈도우를개발하는마이크로소프트역시이런도커의흥미로운움직임을적극적으로운영체제에수용해윈도우에서도컨테이너런타임의이점을충분히누릴수있도록새로운기술스택을추가했고,그것이바로이책에서다루는윈도우컨테이너기술이며,도커역시리눅스컨테이너뿐아니라윈도우컨테이너를호스팅하거나윈도우컨테이너이미지를빌드할수있도록기능을제공하고있다.
안타까운점은,도커가리눅스에국한된기술이라고굳게믿게할만한현실적인제약사항이꽤강력하게작용한다는것이다.리눅스컨테이너처럼쉽게개발자의컴퓨터에설치해서쓸수없거나,기대한성능을이끌어내기위해알아야할사전조건이까다로운편이다.그리고윈도우의상징처럼여겨지는GUI애플리케이션을컨테이너화할수없다는것때문에금새흥미를잃는경우도많을것이다.그러나이는도커의태생과방향성을생각해보면당연한것이며,다른한편으로윈도우기반애플리케이션의입장에서는불공평한면도있다.
하지만컨테이너런타임을들여와얻을수있는이점은이런불공평함을가볍게뛰어넘고도남을정도로매력적이고강력하다.필자는데브시스터즈에서데브옵스엔지니어로일하면서,윈도우컨테이너를지원하는쿠버네티스로개발환경전체를효율화하고,동시에프로덕션환경에서윈도우컨테이너로게임서비스를구동할수있도록인프라를구축해서성공적으로게임서비스를호스팅하는경험을얻을수있었다.
컨테이너런타임을도입해서관리할수있다면설치와배포과정에서발생하는인적오류를원천봉쇄할수있을뿐아니라,문제가발생할경우에는언제든컨테이너를다시시작하거나재배포하는것만으로빠르게문제를복구하고,중단시간을최소화할수있는방법을제공한다.그러면서도기존윈도우서버애플리케이션의이점은약간의주의를기울이는것만으로도얼마든지호환성을맞춰대응할수있으니적극적으로고려해볼만한매력적인기술이라고자신있게말할수있다.
실무에서윈도우컨테이너를도입하기를원하거나,자세한내용을알기원하는모든이에게이책은좋은시작점이될것이다.하지만윈도우컨테이너를도입하면서익숙해지려면실제로는알아야할내용이적지않은것또한사실이다.그래서원서에서는자세히다루지않았으나,필자가실무에서윈도우컨테이너를도입하면서경험했던실수하기쉬운내용들을따로담아약간의가이드를추가했으니,시작단계에서발걸음을떼지못한독자는꼭읽어보기를권한다.

◈옮긴이의말◈

컨테이너기반의기술은이제업계에서사실상의표준이자기본기술이됐다.최신기술을다루거나,최신기술에관심이있는사람이라면누구나기본적인내용으로학습하고인지하는기술이됐다.그리고이런컨테이너를가장활용하기쉽고편리하게만들어주는도구는단연도커라는것을부정하는사람이없다.
컨테이너기술덕분에,그결과이전에는찾아볼수없었던수준의강력함과유연성을이뤄내며,IT업계에새로운가능성과비전을제시하고있다.한서버에서호스팅할수있는애플리케이션의수를크게늘려더많은애플리케이션을동시에효율적이면서도체계적으로호스팅할수있도록해주고,동일운영비용대비더많은작업과서비스를가능하게만들었다.
도커는리눅스를기반으로개발돼온기술이다.시대의흐름에맞춰윈도우를개발하는마이크로소프트역시이런도커의흥미로운움직임을적극적으로운영체제에수용해윈도우에서도컨테이너런타임의이점을충분히누릴수있도록새로운기술스택을추가했고,그것이바로이책에서다루는윈도우컨테이너기술이며,도커역시리눅스컨테이너뿐아니라윈도우컨테이너를호스팅하거나윈도우컨테이너이미지를빌드할수있도록기능을제공하고있다.
안타까운점은,도커가리눅스에국한된기술이라고굳게믿게할만한현실적인제약사항이꽤강력하게작용한다는것이다.리눅스컨테이너처럼쉽게개발자의컴퓨터에설치해서쓸수없거나,기대한성능을이끌어내기위해알아야할사전조건이까다로운편이다.그리고윈도우의상징처럼여겨지는GUI애플리케이션을컨테이너화할수없다는것때문에금새흥미를잃는경우도많을것이다.그러나이는도커의태생과방향성을생각해보면당연한것이며,다른한편으로윈도우기반애플리케이션의입장에서는불공평한면도있다.
하지만컨테이너런타임을들여와얻을수있는이점은이런불공평함을가볍게뛰어넘고도남을정도로매력적이고강력하다.필자는데브시스터즈에서데브옵스엔지니어로일하면서,윈도우컨테이너를지원하는쿠버네티스로개발환경전체를효율화하고,동시에프로덕션환경에서윈도우컨테이너로게임서비스를구동할수있도록인프라를구축해서성공적으로게임서비스를호스팅하는경험을얻을수있었다.
컨테이너런타임을도입해서관리할수있다면설치와배포과정에서발생하는인적오류를원천봉쇄할수있을뿐아니라,문제가발생할경우에는언제든컨테이너를다시시작하거나재배포하는것만으로빠르게문제를복구