이 상품은 구매 후 지원 기기에서 예스24 eBook앱 설치 후 바로 이용 가능한 상품입니다.
|
옮긴이 머리말 xiii베타리더 후기 xiv시작하며 xvi감사의 글 xviiiCHAPTER 1 컨테이너와 도커 기초 11.1 컨테이너란? 1__1.1.1 컨테이너형 가상화 2 __1.1.2 컨테이너 사용 사례 3COLUMN 컨테이너의 단점 51.2 도커란? 5__1.2.1 도커와 Docker, Inc.의 역사 6 __1.2.2 애플리케이션 배포에 초점을 맞춘 도커 7__1.2.3 도커 접하기 8COLUMN Moby 프로젝트 111.3 컨테이너를 사용하는 이유 11__1.3.1 불변하는 애플리케이션과 실행 환경에 의한 재현성 확보 12COLUMN 클라우드의 IaC와 Immutable Infrastructure 15COLUMN 컨테이너 기술과 서버리스 플랫폼 16__1.3.2 애플리케이션 구성 관리의 용이성 16__1.3.3 환경과 상관없이 실행 가능한 높은 이식성 18__1.3.4 컨테이너 기반 개발의 효율성 201.4 로컬 컨테이너 실행 환경 구축 20__1.4.1 도커 데스크톱 설치 21COLUMN ARM 아키텍처 24__1.4.2 도커 데스크톱 설정 25__1.4.3 도커 데스크톱 트러블슈팅 30COLUMN Linux 환경 설치 32 COLUMN 도커의 구독 플랜 32CHAPTER 2 컨테이너 배포 332.1 컨테이너로 애플리케이션 실행하기 33__2.1.1 컨테이너 이미지와 컨테이너의 기초 342.2 간단한 애플리케이션과 컨테이너 이미지 만들기 37__2.2.1 Dockerfile의 인스트럭션 39COLUMN CMD 실행 시 덮어쓰기 40COLUMN ENTRYPOINT로 커맨드 실행하는 방법 알아보기 42COLUMN Dockerfile의 다른 인스트럭션 44 COLUMN CMD의 지정 방식 45__2.2.2 컨테이너 실행하기 45COLUMN 짧은 도커 커맨드 462.3 이미지 다루기 48__2.3.1 docker image build ― 이미지 빌드 50__2.3.2 docker search ― 이미지 검색 54__2.3.3 docker image pull ― 이미지 가져오기 56__2.3.4 docker image ls ― 이미지 리스트 57__2.3.5 docker image tag ― 이미지 태그 57__2.3.6 docker login ― 컨테이너 레지스트리 로그인 60__2.3.7 docker image push ― 이미지 공개 64COLUMN GHCR에 컨테이너 이미지 공개하기 672.4 컨테이너 다루기 67__2.4.1 컨테이너의 라이프 사이클 68__2.4.2 docker container run ― 컨테이너 생성과 실행 69COLUMN 커맨드 실행 시 자주 사용되는 옵션 71__2.4.3 docker container ls ― 컨테이너 리스트 72__2.4.4 docker container stop ― 컨테이너 중지 74__2.4.5 docker container rm ― 컨테이너 파기 74__2.4.6 docker container logs ― 로그(표준 스트림 출력) 확인하기 76__2.4.7 docker container exec ― 실행 중인 컨테이너에서 커맨드 실행 77__2.4.8 docker container cp ― 파일 복사 782.5 운영 관리를 위한 커맨드 79__2.5.1 prune ― 파기 79 __2.5.2 docker container stats ― 사용 상태 가져오기 802.6 도커 컴포즈 81__2.6.1 도커 컴포즈를 사용한 단일 컨테이너 실행 81__2.6.2 컴포즈를 사용해 여러 컨테이너 실행하기 84CHAPTER 3 실용적인 컨테이너의 구축과 배포 933.1 애플리케이션과 컨테이너의 구성 93__3.1.1 하나의 컨테이너 = 하나의 프로세스? 95 __3.1.2 하나의 컨테이너에 하나의 관심사 983.2 컨테이너의 이식성 100__3.2.1 커널 및 아키텍처와의 차이 100COLUMN Windows에서 동작하는 컨테이너 101__3.2.2 라이브러리, 동적 링크 1013.3 컨테이너 친화적인 애플리케이션 102__3.3.1 설정 파일을 포함하여 이미지 빌드하기 103__3.3.2 컨테이너 외부의 설정 파일 사용하기 103COLUMN 컨테이너 친화적인 프로덕트만 있는 것은 아니다. 1073.4 보안 정보를 다루는 방법 107__3.4.1 보안 정보를 받는 컨테이너 107__3.4.2 버전 관리 시스템과 보안 정보 관리의 어려움 108__3.4.3 시크릿을 사용한 보안 정보 관리 109COLUMN 소프트웨어 공급망 공격 111__3.4.4 완벽한 대책은 존재하지 않는다 1113.5 영속성 데이터의 사용 방법 112__3.5.1 Data Volume 112 __3.5.2 Data Volume 컨테이너 114CHAPTER 4 여러 컨테이너의 구성을 통한 애플리케이션 구축 1194.1 웹 애플리케이션 구성 119__4.1.1 애플리케이션 스펙 120 __4.1.2 아키텍처 1204.2 MySQL 구축 123__4.2.1 MySQL에 접속하는 유저의 비밀번호 생성하기 124__4.2.2 MySQL 컨테이너 추가 설정하기 125 __4.2.3 MySQL의 Dockerfile 126__4.2.4 MySQL 컨테이너의 구성 설정하기 1264.3 데이터베이스 마이그레이터 구축 128__4.3.1 golang-migrate로 데이터베이스 마이그레이션하기 128__4.3.2 마이그레이션 실행 스크립트 131__4.3.3 데이터베이스 마이그레이터의 Dockerfile 132COLUMN .dockerignore 파일 134__4.3.4 데이터베이스 마이그레이터 컨테이너의 구성 설정하기 1344.4 API 서버와 웹서버 구축 139__4.4.1 리포지터리 디렉터리 구성 140COLUMN 폴리레포와 모노레포 142__4.4.2 실행 파일과 커맨드 상세 142__4.4.3 API 서버의 구축 144 __4.4.4 웹서버 구축 1514.5 리버스 프록시 구축 158__4.5.1 nginx 컨테이너의 템플릿 구조 159COLUMN entrykit 163__4.5.2 Dockerfile 1634.6 여러 컨테이너를 구성하여 작업 관리 앱 실행하기 164__4.6.1 compose.yaml 164 __4.6.2 작업 관리 앱 실행하기 1704.7 Tilt로 여러 컨테이너 구성을 통한 개발 경험 향상 171__4.7.1 Tilt 실행 171 __4.7.2 Tilt의 강력한 기능 1724.8 컨테이너 오케스트레이션 기초 정리 176CHAPTER 5 쿠버네티스 입문 1775.1 쿠버네티스란? 178__5.1.1 도커의 번성과 쿠버네티스의 탄생 178 __5.1.2 쿠버네티스의 위상 1795.2 로컬 환경에서 쿠버네티스 실행하기 181__5.2.1 도커 데스크톱에서 로컬 쿠버네티스 환경 구축하기 181COLUMN 다른 쿠버네티스 구축 도구 1875.3 쿠버네티스 개요 1875.4 쿠버네티스 클러스터와 노드 188COLUMN 컨트롤 플레인을 구성하는 관리 컴포넌트 1905.5 네임스페이스 1915.6 파드 192__5.6.1 파드 생성하고 배포하기 193__5.6.2 파드 조작하기 195COLUMN 파드와 파드 내부 컨테이너의 주소 1975.7 레플리카셋 1975.8 디플로이먼트 199__5.8.1 레플리카셋 라이프 사이클 202 __5.8.2 롤백 실행하기 2045.9 서비스 205__5.9.1 레이블 셀렉터를 사용한 트래픽 라우팅 208COLUMN 서비스의 이름 분석 211__5.9.2 ClusterIP 서비스 211__5.9.3 Headless 서비스 211__5.9.4 NodePort 서비스 213 __5.9.5 LoadBalancer 서비스 214__5.9.6 ExternalName 서비스 2145.10 인그레스 215__5.10.1 인그레스 컨트롤러와 인그레스 클래스 215__5.10.2 인그레스를 통한 액세스 216COLUMN kubectl로 리소스 타입과 리소스명을 지정하는 방법 221COLUMN Tilt로 매니페스트 파일의 업데이트를 감지하고, 자동으로 리소스 업데이트하기 222COLUMN kk9s 223 COLUMN 쿠버네티스 API 224CHAPTER 6 쿠버네티스 배포와 클러스터 구축 2266.1 작업 관리 앱 구성 226__6.1.1 작업 관리 앱을 구성하는 쿠버네티스 리소스 2276.2 작업 관리 앱을 쿠버네티스에 배포하기 227__6.2.1 네임스페이스 228 __6.2.2 시크릿 228__6.2.3 MySQL 배포 232COLUMN 스테이트풀셋의 serviceName 237__6.2.4 데이터베이스 마이그레이터 배포 238__6.2.5 API 서버 배포 241 __6.2.6 웹서버 배포 2456.3 쿠버네티스 애플리케이션 온라인에 공개하기 251__6.3.1 Azure Kubernetes Service 배포 251COLUMN 자체 도메인과 HTTPS로 애플리케이션 공개하기 257 COLUMN kubectx 259CHAPTER 7 쿠버네티스 활용 2607.1 파드 배포 전략 260__7.1.1 RollingUpdate 261COLUMN 리소스의 일부를 업데이트하는 kubectl patch 커맨드 266__7.1.2 컨테이너 실행 시 상태 체크 설정하기 268COLUMN 안전하게 애플리케이션을 중지하고 파드 삭제하기 271__7.1.3 Blue-Green Deployment 272COLUMN 서비스 메시를 구현하는 프로덕트 2777.2 쿠버네티스에서 정기적인 배치 작업 실행하기 278__7.2.1 크론잡 278 __7.2.2 타임존을 고려한 크론잡 실행 284__7.2.3 크론잡에서 잡을 일회성으로 실행하기 2847.3 유저 관리와 Role-Based Access Control(RBAC) 285__7.3.1 RBAC를 사용해 권한 제어 구현하기 286__7.3.2 클러스터 롤 생성 288 __7.3.3 서비스 어카운트 생성 290__7.3.4 클러스터 롤 바인딩 생성 291 __7.3.5 일반 유저 294CHAPTER 8 쿠버네티스 애플리케이션 패키징 2998.1 Kustomize 300__8.1.1 기본적인 사용 방법 301COLUMN 권장하지 않는 commonLabels 309__8.1.2 재사용과 부분 오버레이 310 __8.1.3 Kustomize에서 시크릿 다루기 315__8.1.4 네트워크를 경유해서 매니페스트 생성하기 3218.2 Helm 323__8.2.1 Helm 설치 324 __8.2.2 Helm Chart와 리포지터리 325__8.2.3 Chart 설치하기 328__8.2.4 자체 Chart 생성하기 332COLUMN 쿠버네티스의 권장 레이블 347__8.2.5 Chart를 레지스트리에 등록하기 347COLUMN GHCR의 패키지와 리포지터리 연결하기 351COLUMN Open Container Initiative(OCI) 353CHAPTER 9 컨테이너 운영 3549.1 로그 운영 354__9.1.1 컨테이너 로그 354 __9.1.2 컨테이너 로그 운영 358__9.1.3 Elastic Stack에 의한 로그 수집, 관리 구성의 구축 360COLUMN 안정화된 Elasticsearch 선택하기 384 COLUMN 클라우드의 자체 로그 관리 385__9.1.4 stern 3859.2 가용성이 높은 쿠버네티스 운영 387__9.2.1 노드 장애 시 쿠버네티스 동작 387__9.2.2 Pod AntiAffinity를 통해 장애 저항성이 뛰어난 파드 배포 전략 388__9.2.3 CPU를 많이 사용하는 파드를 Node Affinity로 분리하기 394__9.2.4 Horizontal Pod Autoscaler를 사용한 파드의 오토스케일 399__9.2.5 Cluster Autoscaler를 사용한 노드의 오토 스케일 401COLUMN 쿠버네티스 클러스터와 노드 운영을 가볍게 하는 구조 402CHAPTER 10 최적의 컨테이너 이미지 생성과 운영 40310.1 운영에 최적인 컨테이너 이미지란? 403__10.1.1 이미지 사이즈 증가로 인해 발생하는 문제 40410.2 경량 베이스 이미지 404__10.2.1 scratch 405 __10.2.2 BusyBox 411__10.2.3 Alpine Linux 415COLUMN Alpine Linux 베이스 이미지의 사용 여부 417__10.2.4 Distroless 41810.3 경량 컨테이너 이미지 생성하기 423__10.3.1 배포하는 애플리케이션의 사이즈 줄이기 423__10.3.2 컨테이너 이미지의 레이어 구조 의식하기 42410.4 Multi-stage builds 428__10.4.1 빌드 컨테이너와 실행 컨테이너 나누기 429COLUMN 외부 이미지를 스테이지로 사용하기 43210.5 BuildKit 433__10.5.1 BuildKit이란? 433 __10.5.2 컨테이너의 멀티 플랫폼 대응 433__10.5.3 BuildKit으로 멀티 플랫폼에 대응하는 이미지 빌드하기 435COLUMN QEMU 436 COLUMN 멀티 플랫폼 이미지는 어디까지 대응해야 할까? 44110.6 안전한 컨테이너 이미지의 사용과 생성 441__10.6.1 컨테이너 이미지를 최소한으로 구성하기 442__10.6.2 권한 모드로 실행 피하기 442 __10.6.3 root 유저로 실행 피하기 442__10.6.4 신뢰할 수 있는 컨테이너 이미지와 도구 사용하기 446__10.6.5 Trivy로 컨테이너 이미지 취약성 체크하기 44810.7 CI 도구로 컨테이너 이미지 빌드하기 451__10.7.1 GitHub Actions 452 __10.7.2 템플릿에서 리포지터리 생성하기 453__10.7.3 워크플로 설정 455__10.7.4 워크플로 실행 460COLUMN 운영에서는 latest 이미지 태그 피하기 464CHAPTER 11 컨테이너의 지속적 전달 46511.1 지속적 전달이란? 465__11.1.1 다듬어지지 않은 배포 프로세스가 일으키는 문제 465__11.1.2 소프트웨어 전달의 중요성과 CI/CD 구분 466__11.1.3 GitOps 방식의 지속적 전달 46711.2 Flux 469__11.2.1 Flux 설치 469__11.2.2 애플리케이션 배포 47011.3 Argo CD 475__11.3.1 Argo CD 설치 475__11.3.2 애플리케이션 배포 47811.4 PipeCD 484__11.4.1 PipeCD의 특징 484__11.4.2 퀵 스타트 환경 구축 485__11.4.3 애플리케이션 배포 489COLUMN PipeCD에서 Control Plane과 Piped를 각각 구축하는 이유 49311.5 소프트웨어 전달의 완전 자동화 495__11.5.1 매니페스트로 정의하는 컨테이너 이미지 태그를 자동 업데이트하기 495COLUMN GitOps에 승인 프로세스 넣기 507CHAPTER 12 컨테이너의 다양한 활용 방법 50812.1 팀 개발에서 개발 환경을 통일하고 공유하기 508__12.1.1 사용하는 소프트웨어와 도구 통일하기 508__12.1.2 개발 환경과 집단 지성 510COLUMN 컨테이너가 Vagrant를 대체할 수 있을까? 51112.2 커맨드 라인 도구를 컨테이너에서 사용하기 512__12.2.1 Trivy를 컨테이너에서 실행하기 512__12.2.2 셸 스크립트를 컨테이너에서 실행하기 51512.3 부하 테스트 517__12.3.1 Locust 개요 517__12.3.2 쿠버네티스에서 애플리케이션의 부하 테스트 518COLUMN k6에서 부하 테스트 실행 526APPENDIX A 개발 도구 셋업 528A.1 WSL2 528__A.1.1 WSL2의 조건 529 __A.1.2 WSL2의 설치 529__A.1.3 WSL2로 사용할 수 있는 배포판 530__A.1.4 make 설치 531COLUMN WSL2를 사용하는 개발 스타일 정착 532A.2 asdf 532__A.2.1 asdf란? 533 __A.2.2 asdf 설치 533__A.2.3 도구 설치 534 __A.2.4 사용하는 버전 설정 534A.3 kind 535__A.3.1 kind 설치 536__A.3.2 멀티 노드의 쿠버네티스 클러스터를 로컬 환경에 구축하기 536COLUMN Docker in Docker / Container in Container 538A.4 Rancher Desktop 538APPENDIX B 다양한 컨테이너 오케스트레이션 환경 542B.1 Google Kubernetes Engine 542__B.1.1 GKE 클러스터의 구축 준비 543 __B.1.2 GKE 클러스터 구축 545B.2 Amazon Elastic Kubernetes Service 548__B.2.1 EKS 클러스터 구축 준비 548__B.2.2 eksctl을 사용해 EKS 클러스터 구축 550COLUMN EKS on Fargate 555B.3 Azure Kubernetes Service 556__B.3.1 AKS 클러스터의 구축 준비 557 __B.3.2 AKS 클러스터 구축 559__B.3.3 AKS 클러스터 조작 560B.4 온프레미스 환경에서 쿠버네티스 클러스터 구축 561__B.4.1 온프레미스 클러스터 구축 준비 561__B.4.2 kubespray를 사용해 EKS 클러스터 구축 563B.5 Amazon Elastic Container Service 566__B.5.1 CDK로 ECS 클러스터 생성과 컨테이너 배포 정의하기 567__B.5.2 CDK로 ECS 클러스터를 생성하고 컨테이너 배포하기 569COLUMN Amazon ECS Anywhere 571APPENDIX C 컨테이너 개발과 운영 팁 572C.1 컨테이너 런타임 572__C.1.1 containerd 573COLUMN 쿠버네티스의 도커 deprecated 소동 574C.1.2 nerdctl 574C.2 쿠버네티스 팁 575__C.2.1 이페머럴 컨테이너를 통한 기존 파드 디버깅 575__C.2.2 Pod Security Admission을 사용한 보안 강화 578COLUMN Open Policy Agent 581C.3 컨테이너 개발, 배포 팁 581__C.3.1 Compose Watch로 컨테이너 자동 업데이트하기 581__C.3.2 Tilt로 쿠버네티스 애플리케이션 다루기 583C.4 생성형 AI를 활용한 컨테이너 개발 효율화 585__C.4.1 ChatGPT 활용하기 586 __C.4.2 GitHub Copilot 활용하기 587C.5 Alpine Linux 패키지 매니저 apk 589__C.5.1 패키지 매니저 apk 조작하기 589 __C.5.2 alpine-sdk 패키지 592참고 문헌 593찾아보기 595
|
やまだあきのり,山田 明憲
야마다 아키노리의 다른 상품
이춘혁의 다른 상품
|
따라 하며 익히는 컨테이너 기술 실전 입문서날마다 바뀌는 소프트웨어 개발 환경 속에서 컨테이너 기술은 선택이 아닌 필수 기술로 자리 잡았으며, 도커와 쿠버네티스는 이제 개발자라면 누구나 이해해야 할 핵심 도구다. 프런트엔드와 백엔드, 인프라, DevOps를 아우르는 전방위적 수요는 모든 개발자에게 컨테이너 기술을 요구하고 있다.이 책은 도커와 쿠버네티스를 중심으로 컨테이너 기술을 단계적으로 익힐 수 있도록 구성되어 있다. 단순한 개념 나열이 아닌, 실습 중심의 예제와 구성으로 초보자도 실제 업무에 곧바로 적용할 수 있는 실전 감각을 기를 수 있다. 이미지 빌드, 다중 컨테이너 구성, 쿠버네티스를 통한 오케스트레이션 전략까지, 실무에 꼭 필요한 기술들을 풍부하게 담았다.이번 개정신판은 변화한 최신 생태계를 반영하여 내용을 전면 수정·보완하였으며, 저자의 실무 경험과 기술적 통찰이 더해져 더욱 깊이 있고 실용적인 지침서를 완성했다. 개념 학습을 넘어 개발과 운영에 필요한 사고방식을 형성하고, 실무에 컨테이너 기술을 적용할 수 있을 것이다.초보자부터 실무자까지, 컨테이너 기술을 제대로 배우고 싶은 모든 개발자를 위한 친절하고도 실질적인 가이드다. 이 책과 함께 컨테이너 기술 여정의 첫걸음을 내디뎌보자!주요 내용● 컨테이너와 도커의 개념, 구조, 실행 원리● 도커 이미지 빌드와 실행, 포트포워딩 실습● 컴포즈를 이용한 다중 컨테이너 구성 및 실행● 컨테이너 간 네트워크 연동과 마운트, 시크릿 관리● 도커 기반 웹 애플리케이션과 API 서버 구축● 실전 MySQL 데이터 스토어와 마이그레이터 컨테이너 설정● 쿠버네티스를 통한 고가용성 운영 및 스케일링 전략● 운영 환경에서의 보안 설정, 볼륨, 로그 수집 등 실무 기술
|