Top

트러블슈팅 도커 [도커의 활용과 문제 해결 방법]

  • 원서명Troubleshooting Docker: Strategically design, troubleshoot, and automate Docker containers from development to deployment (ISBN 9781783552344)
  • 지은이바이브하브 콜리(Vaibhav Kohli), 라즈딥 두아(Rajdeep Dua), 존 우튼(John Wooten)
  • 옮긴이남기혁
  • ISBN : 9791161751887
  • 30,000원
  • 2018년 08월 22일 펴냄
  • 페이퍼백 | 348쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 오픈소스 프로그래밍

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.

요약

도커의 설치와 기본 관리 기능부터, 네트워킹, 쿠버네티스, 공용 클라우드에서 활용하는 방법에 이르기까지, 전반적인 도커 활용법과 이 과정에서 발생할 수 있는 다양한 문제를 해결하는 기법을 설명한다. 또한 문제를 사전에 방지하기 위한 팁과 도커 기반의 워크플로우를 구성하는 방법도 소개한다.

이 책에서 다루는 내용

■ 도커 관련 도구를 비롯해 서비스, 마이크로서비스, N티어 애플리케이션을 설치하는 방법
■ 자동화 도구를 통해 재사용 가능하고 이식성 높은 컨테이너를 생성하는 방법
■ 컨테이너끼리 연결하거나 네트워킹하는 방법
■ 컨테이너에 볼륨을 안전하게 붙이는 방법
■ 도커 API 사용 및 문제 해결 방법
■ 공용 클라우드에 도커를 배치하는 과정에서 발생하는 문제의 해결 방법
■ 쿠버네티스(Kubernetes)를 통해 컨테이너를 쉽게 관리하는 방법

이 책의 대상 독자

숙련된 솔루션 아키텍트와 개발자, 프로그래머, 시스템 엔지니어, 관리자들이 도커 컨테이너화와 관련해 흔히 발생하는 문제를 해결할 때 도움 받을 수 있는 책이다. 자동화된 배치를 제공하는 프로덕션 수준의 도커 컨테이너를 구축하려면 도커의 기본 기능뿐만 아니라 고급 기능에 관련된 문제 해결 방법을 갖춰야 한다. 이 책의 내용은 리눅스 커맨드라인 문법, 단위 테스트, 도커 레지스트리, 깃허브뿐만 아니라 최신 컨테이너 호스팅 플랫폼과 클라우드 서비스 프로바이더(CSP)에 대해서도 깊이 있게 이해하고 있다는 가정하에 구성됐다. 또한 이 책을 통해 애초에 문제가 발생할 여지를 없애기 위한 여러 가지 방법과 도구도 소개한다.

이 책의 구성

1장. ‘컨테이너 및 도커 개요’에서는 컨테이너화의 기본 개념에 대해 애플리케이션 및 OS 기반 컨테이너 예시를 토대로 소개한다. 도커 기술의 특징과 장점, 도커 컨테이너의 라이프사이클에 대해 살펴본다.
2장. ‘도커 설치 방법’에서는 우분투, CoreOS, CentOS, 레드햇 리눅스, 페도라, 수세 리눅스(SUSE Linux) 등의 여러 리눅스 배포판에서 도커를 설치하는 방법을 단계별로 소개한다.
3장. ‘베이스 및 레이어드 이미지 빌드 방법’에서는 프로덕션 수준의 애플리케이션 컨테이너화에서 가장 핵심적인 작업인 이미지 빌드 방법을 소개한다. 이 과정에서 처음부터 직접 수작업으로 이미지를 빌드하는 방법도 소개한다. 그런 다음, 도커파일로 레이어드 이미지(layered image)를 빌드하는 방법과 도커파일에서 사용하는 커맨드도 자세히 살펴본다.
4장. ‘마이크로서비스 및 N티어 애플리케이션 설계’에서는 개발부터 테스트까지 자연스럽게 이어지도록 설계된 예제 환경을 살펴본다. 이러한 환경은 리소스 프로비저닝과 설정 작업을 수작업으로 처리하거나 그 과정에서 에러가 발생하는 것을 최소화하는 데 도움이 된다. 이 과정에서 마이크로서비스 애플리케이션을 테스트하고 자동화하고 배치하고 관리하는 방법도 간략히 소개한다.
5장. ‘컨테이너 기반 애플리케이션 다루기’에서는 도커 레지스트리에 대해 소개한다. 먼저 도커 허브를 이용한 도커 공용 리포지터리의 기본 개념과 다양한 사용자와 컨테이너를 공유하는 방법을 소개한다. 도커는 사설 도커 레지스트리를 구축하는 옵션도 제공한다. 이 장에서는 이러한 사설 레지스트리를 통해 도커 컨테이너를 조직 내부에서 푸시(push)하고 풀(pull)하고 공유(share)하는 방법을 살펴본다.
6장. ‘컨테이너 운영하기’에서는 모든 호스트 디바이스에 접근할 수 있는 프리빌리지드 컨테이너(privileged container)와 도커 컨테이너에서 하부 호스트를 관리하는 서비스 구동에 필요한 백그라운드 서비스를 실행하는 수퍼 프리빌리지드 컨테이너(super-privileged container)를 소개한다.
7장. ‘도커 컨테이너의 네트워킹 스택 관리하기’에서는 Docker0 브릿지를 통한 도커 네트워킹 메커니즘과 이에 관련된 설정 및 문제 해결 방법을 설명한다. 또한 도커 네트워크와 외부 네트워크 사이에서 발생하는 통신 문제를 해결하는 방법도 살펴본다. 그리고 위브(Weave), OVS, 플래널(Flannel), 그리고 도커에서 최근 추가된 오버레이 네트워크를 비롯한 다양한 네트워킹 기능을 통해 여러 호스트에 있는 컨테이너끼리 통신하는 방법도 살펴본다. 이러한 방법들을 모두 비교해보고 각각을 설정할 때 발생하는 문제를 해결하는 방법도 소개한다.
8장. ‘쿠버네티스로 도커 컨테이너 관리하기’에서는 쿠버네티스를 통해 도커를 관리하는 방법을 소개한다. 이 과정에서 다양한 배치 시나리오를 살펴보고 쿠버네티스를 베어메탈(Bare Metal) 머신, AWS, vSphere, 미니큐브(minikube) 등에 배치하는 과정에서 발생하는 여러 가지 문제를 해결하는 방법도 소개한다. 또한 쿠버네티스 포드(Kubernetes pod)를 효과적으로 배치하고, 쿠버네티스와 관련된 문제를 디버깅하는 방법도 살펴본다.
9장. ‘데이터 볼륨 사용법’에서는 도커와 관련된 데이터 볼륨과 스토리지 드라이버 개념을 자세히 살펴본다. 데이터 볼륨과 관련해 발생하는 문제를 해결하기 위한 네 가지 접근 방법을 소개하고 각각의 장단점을 분석한다. 첫 번째 방법인 도커 컨테이너 내부에 데이터를 저장하는 것은 가장 기본적인 방법이지만, 프로덕션 환경에서 데이터를 관리하고 처리하는 데 충분한 유연성을 제공하지 못한다. 두 번째와 세 번째 접근 방법은 데이터 전용 컨테이너나 호스트에 직접 저장하는 것이다. 네 번째 접근 방법은 서드파티 볼륨 플러그인인 플로커(Flocker)나 콘보이(Convoy)를 이용하는 것으로서 데이터를 별도의 블록에 저장하는데, 컨테이너를 한 호스트에서 다른 호스트로 옮길 때나 해당 컨테이너가 죽을 때도 데이터에 대한 신뢰성을 보장할 수 있다.
10장. ‘공용 클라우드(AWS와 애저)에 도커 배치하기’에서는 마이크로소프트 애저와 AWS에 도커를 배치하는 방법을 소개한다.

저자/역자 소개

지은이의 말

도커(Docker)는 어디서나 안정적으로 실행되는 애플리케이션을 누구나 쉽게 개발하고 배치할 수 있게 해주는 오픈소스, 컨테이너 기반 플랫폼이다. 도커는 빠르고 간결하고 보안에 안전한 방식으로 최신 애플리케이션을 위한 확장성과 이식성이 뛰어난 환경을 구축하게 해준다. 최신 마이크로서비스나 N티어(N-tier) 애플리케이션의 컨테이너화와 관련해 도커가 독보적인 위치를 차지함에 따라, 프로덕션 수준의 배치를 위한 자동화된 워크플로우에서 발생하는 문제를 효과적으로 해결하는 능력이 중요해졌다.

지은이 소개

바이브하브 콜리(Vaibhav Kohli)

현재 VMware R&D 부서에서 근무하고 있으며, 명문 뭄바이 대학교에서 1년간 컴퓨터공학을 가르치기도 했다. VMware의 CTO 오피스에서 VMware IoT 프로젝트를 진행하고 있다. 「IEEE 트랜잭션」을 비롯한 일류 저널에 연구 논문을 여러 편 발표했고, VMware에서 컨테이너 기술과 관련해 여러 건의 특허도 출원했다. 참여한 빅데이터 프로젝트 중 일부는 전국 단위 프로젝트 쇼케이스 이벤트에서 최고 상을 받기도 했다. 여러 나라에서 워크숍, 해커톤, 트레이닝 세션, 트레이드 쇼를 수행했으며, IoT 및 도커 기술 관련 콘퍼런스의 발표자로도 명성을 날리고 있다. 또한 오픈소스 코드 기여자 및 리포지터리 관리자로도 적극적으로 활동하고 있으며, 도커와 쿠버네티스 관련 온라인 튜토리얼도 여러 차례 발표한 바 있다. 그동안 여러 고객과 기업을 대상으로 클라우드 네이티브 앱과 데브옵스 모델, 마이크로서비스 아키텍처로 이전하는 방법을 소개하는 데 기여했으며, 최근에는 도커 네트워킹 관련 책도 저술했다.
현재 최신 도커 및 쿠버네티스 기술에 관련된 인도 전역의 다양한 밋업 그룹을 관리하며 이끌고 있다.

라즈딥 두아(Rajdeep Dua)

클라우드와 빅데이터 분야에서 18년의 경력을 보유했다. 클라우드 인프라스트럭처와 머신 러닝 관련 프로젝트에 적극적으로 참여했을 뿐만 아니라, 이러한 기술을 세일즈포스, 구글, VMware 등에 홍보하는 활동도 여러 차례 수행했다. 현재 세일즈포스 인도 지사에서 개발자 관계 팀(Developer Relation)을 이끌고 있으며, 세일즈포스의 머신 러닝 팀 소속으로도 활동하고 있다.
도커 커뮤니티에 기여한 공로로 ‘도커 캡틴(Docker Captain)’으로 선정됐으며, 그동안 도커, 쿠버네티스, 안드로이드, 오픈스택, 클라우드 파운드리 등과 같은 프로젝트를 통해 오픈소스 커뮤니티에 기여했다. IIIT 하이데라바드, ISB, IIIT 델리, 푸네 공과 대학에서 클라우드와 빅데이터에 대해 강의하기도 했다.
러크나우 인도 경영 대학에서 IT 및 시스템 분야의 MBA를 취득했으며, 인도 파티알라의 타파르 대학교에서 BTech 학위를 취득했다.

존 우튼(John Wooten)

안전하고, 간결하고, 지속성 있는 클라우드 아키텍처를 설계하는 글로벌 오픈소스 클라우드 컨설팅 회사인 컨설티드(CONSULTED)의 설립자이자 CEO다. 선도적인 클라우드 솔루션 아키텍트이자 오픈 테크놀로지 전략가로서 기업과 정부 기관을 위한 공용, 사설, 하이브리드 클라우드 시스템을 설계하고, 테스트하고, 배치하고, 관리하는 것과 관련해 깊이 있고 풍부한 실전 경험을 쌓았다. 주 전문 분야는 리눅스 시스템 관리, 오픈스택 클라우드, 도커 컨테이너다. 오픈소스 활동가로도 활동하면서 다양한 오픈소스 프로젝트와 커뮤니티에서 매우 헌신적으로 활동하고 있다. 가장 최근에는 오픈소스 프로젝트와 애플리케이션에 대한 선도적인 리포지터리와 대표적인 리소스인 외펜소스드(ÖppenSourced)의 설립자이자 메인테이너로 활동하고 있다. 업무 외에는 자칭 서핑족으로서 다음에 탈 만한 파도를 쫓아다니거나 한적한 곳에서 하이킹과 캠핑을 즐긴다.

옮긴이의 말

도커로 대표되는 컨테이너 기술은 이를 주로 사용하는 분야에서는 더 이상 신선한 주제가 아닌, 일상 업무에서 당연히 사용하는 요소로 자리 잡은 분위기입니다. 도커 컨테이너의 등장 배경과 기본 개념, 기초 기능의 사용법을 다루는 글에 슬슬 하품이 나올 즈음, 다소 실용적인 관점에서 도커를 소개하는 이 책을 번역하게 됐습니다. 지난 몇 년 동안 도커는 설치 방법만 수차례 변경될 정도로 빠르게 성장하고 있습니다. 이러한 상황에서 이 책은 도커를 활용하다 부딪힐 만한 문제들을 중심으로 도커를 소개한다는 점이 신선했고, 개인적으로 네트워킹 부분을 상세히 설명하는 점이 마음에 들었습니다. 도커가 무엇인지 알고 싶은 분들부터 실전에서 마이크로서비스 구현을 고민하는 독자들까지 모두 만족시킬 만한 다양한 주제를 다루는 책입니다.
이번 번역도 빠른 이해와 정확한 전달에 우선순위를 뒀습니다. 지금 이 순간에도 수없이 밀려 들어오는 신기술을 빠르게 익혀 현업에서 활용할 수 있도록 문체와 용어를 현업에서 쓰이는 방향으로 번역했습니다. 그래서 원어의 음차 표기를 적절히 활용했습니다. 개인적으로는 100% 동의하지 않지만 현장에서 이미 굳혀진 용어가 다소 아쉽더라도 그대로 사용하기도 했습니다. 최선의 표현을 찾고자 항상 노력하지만, 독자 입장에서는 아쉬운 부분이 얼마든지 나올 수 있습니다. 이 점에 대해 미리 양해를 구합니다.

옮긴이 소개

남기혁

고려대학교 컴퓨터학과에서 학부와 석사 과정을 마친 후 한국전자통신연구원에서 선임연구원으로 재직하고 있으며, 현재 ㈜프리스티에서 네트워크 제어 및 검증 소프트웨어 개발 업무를 맡고 있다. 에이콘출판사에서 출간한 『GWT 구글 웹 툴킷』(2008), 『해킹 초보를 위한 USB 공격과 방어』(2011), 『자바 7의 새로운 기능』(2013), 『iOS 해킹과 보안 가이드』(2014), 『Neutron 오픈스택 네트워킹』(2015), 『실전 IoT 네트워크 프로그래밍』(2015), 『애플 워치 WatchKit 프로그래밍』(2015), 『현대 네트워크 기초 이론』(2016), 『도커 컨테이너』(2017), 『스마트 IoT 프로젝트』(2017), 『파이썬으로 배우는 인공지능』(2017), 『메이커를 위한 실전 모터 가이드』(2018) 등을 번역했다.

목차

목차
  • 1장. 컨테이너 및 도커 개요
    • 컨테이너 개념
      • OS 컨테이너
      • 애플리케이션 컨테이너
      • 도커 자세히 들여다보기
      • 도커 컨테이너의 장점
      • 도커 라이프사이클
      • 도커 설계 패턴
    • 유니커널
    • 요약

  • 2장. 도커 설치 방법
    • 우분투에 도커 설치하기
      • 사전 준비 사항
      • 패키지 정보 업데이트
      • 새로운 GPG 키 추가하기
      • 문제 해결
      • 새로운 도커 패키지 소스 추가하기
      • 우분투 패키지 업데이트
      • 리눅스 이미지 엑스트라 설치
      • 옵션: 앱아머 설치
      • 도커 설치
    • 레드햇 리눅스에 도커 설치하기
      • 커널 버전 확인
      • 얌 패키지 업데이트
      • 얌 리포지터리 추가하기
      • 도커 패키지 설치하기
      • 도커 서비스 구동하기
      • 도커 설치 테스트하기
      • 설치 파라미터 확인
      • 문제 해결
    • AWS에 CentOS VM을 배치해 도커 컨테이너 구동하기
      • 커널 버전 확인
      • 얌 패키지 업데이트
      • 얌 리포지터리 추가하기
      • 도커 패키지 설치하기
      • 도커 서비스 구동하기
      • 도커가 제대로 설치됐는지 확인하기
      • 설치 파라미터 확인하기
    • CoreOS에 도커 설치하기
      • CoreOS 채널 설치하기
      • 문제 해결
    • 페도라에 도커 설치하기
      • 커널 버전 확인
      • DNF로 설치하기
      • 얌 리포지터리에 추가하기
      • 도커 패키지 설치하기
    • 스크립트로 도커 설치하기
      • 도커 설치 스크립트 실행하기
    • 수세 리눅스에 도커 설치하기
      • AWS에 수세 리눅스 VM 구동하기
      • 커널 버전 확인
      • Containers-Module 추가하기
      • 도커 설치하기
      • 도커 서비스 구동하기
      • 도커가 제대로 설치됐는지 확인하기
      • 문제 해결
    • 요약

  • 3장. 베이스 및 레이어드 이미지 빌드 방법
    • 컨테이너 이미지 빌드하기
      • 도커 레지스트리에서 제공하는 공식 이미지
      • 베이스 이미지 직접 빌드하기
      • 레이어드 이미지 빌드하기
    • 빌드한 이미지 테스트하고 디버깅하기
      • 문제 해결과 관련된 도커 세부 사항
      • docker version
      • docker info
      • 데비안/우분투에서 발생한 문제의 해결 기법
      • 설치된 도커 이미지 목록 확인하기
      • 도커 이미지를 수동으로 구동하기
      • 캐시에 저장된 파일시스템 상태 확인하기
      • 이미지 레이어 ID를 디버그 컨테이너로 활용하기
      • 보충 예제
      • 오류가 발생한 컨테이너 프로세스 검사하기
      • 그 밖에 다른 유용한 정보
      • sysdig으로 디버깅하기
      • 트러블슈팅: 오픈 커뮤니티에 공헌하기
    • 이미지 빌드 자동화
      • 단위 테스트를 적용한 배치
      • 테스트를 적용한 배치 작업을 자동화하기
    • 요약

  • 4장. 마이크로서비스 및 N티어 애플리케이션 설계
    • 과장 혹은 오만
    • 모놀리딕 아키텍처
    • N티어 애플리케이션 아키텍처
      • 3티어 웹 애플리케이션 만들기
    • 마이크로서비스 아키텍처
      • 최신 애플리케이션 구조로 전환하는 방법
      • 마이크로서비스 관리하기
      • 마이크로서비스 관리하기
      • N티어 애플리케이션을 여러 개의 이미지로 분할하기
      • 애플리케이션을 구성하는 여러 티어가 함께 작동하게 만들기
    • 요약

  • 5장. 컨테이너 기반 애플리케이션 다루기
    • 도커 레지스트리를 통한 재배포
      • 도커 공용 리포지터리(도커 허브)
      • 사설 도커 레지스트리
    • 도커 허브에 이미지 올리기
      • 사설 로컬 도커 레지스트리 설치
      • 이미지를 다른 호스트로 옮기기
      • 이미지 서명을 통해 무결성 보장하기
    • 도커 트러스티드 레지스트리
    • 도커 UCP
    • 요약

  • 6장. 컨테이너 운영하기
    • 프리빌리지드 컨테이너
      • 트러블슈팅 팁
    • 수퍼 프리빌리지드 컨테이너
      • 도커 컨테이너의 규모 확장 관련 트러블슈팅
    • 퍼핏
      • 이미지
      • 컨테이너
      • 네트워킹
      • 도커 컴포즈
      • 트러블슈팅 팁
    • 앤서블
      • 앤서블을 이용한 도커 자동화
      • 앤서블 컨테이너
      • 트러블슈팅 팁
    • 셰프
    • 요약

  • 7장. 도커 컨테이너의 네트워킹 스택 관리하기
    • 도커 네트워킹
    • docker0 브릿지
      • 도커 브릿지 설정 관련 문제의 해결 방법
    • DNS 설정
    • 컨테이너와 외부 네트워크 통신에 관련된 문제의 해결 방법
      • 특정 컨테이너에서 SSH 접속을 하지 못하게 제한하기
      • 컨테이너 링크하기
    • 립네트워크와 컨테이너 네트워크 모델
      • CNM 오브젝트
    • 오버레이 및 언더레이 네트워크 기반의 도커 네트워킹 도구
      • 플래널
      • 위브
      • 프로젝트 칼리코
    • 도커 엔진 스웜 모드에서 오버레이 네트워크 설정하기
      • 멀티호스트 도커 네트워킹 솔루션 비교
    • 도커에서 OVS를 사용하도록 설정하기
      • 단일 호스트에 OVS를 설정하는 과정에서 발생하는 문제의 해결 방법
      • OVS를 여러 호스트에 설정하는 과정에서 발생할 수 있는 문제의 해결 방법
    • 요약

  • 8장. 쿠버네티스로 도커 컨테이너 관리하기
    • 베어메탈 머신에 쿠버네티스 배치하기
    • 페도라에서 쿠버네티스를 직접 설정할 때 발생할 수 있는 문제의 해결 방법
    • 미니큐브로 쿠버네티스 배치하기
    • UIAWS에 쿠버네티스 배치하기
    • vSphere에 쿠버네티스 배치하기
    • 쿠버네티스 설정 과정에서 발생하는 문제의 해결 방법
    • 쿠버네티스 포드 배치하기
    • 프로덕션 환경에 쿠버네티스 배치하기
    • 쿠버네티스 디버깅에 관련된 이슈
    • 요약

  • 9장. 데이터 볼륨 사용법
    • 도커 볼륨을 제대로 이해해서 문제 예방하기
    • 기본 활용 사례: 도커 컨테이너에 데이터 저장하기
    • 데이터 전용 컨테이너
      • 데이터 전용 컨테이너 생성하기
      • 호스트와 도커 컨테이너끼리 데이터 공유하기
    • 호스트에 매핑된 볼륨을 공유 스토리지에 백업하기
      • 플로커
      • 플로커 클라이언트 노드에서 설정할 작업
      • 콘보이
    • 도커 스토리지 드라이버 성능
      • UFS 기초
      • 도커에서 디바이스 매퍼를 사용하는 방식
    • 요약

  • 10장. 공용 클라우드(AWS와 애저)에 도커 배치하기
    • 아마존 ECS 아키텍처
    • 아마존 ECS 배치 과정에서 발생하는 문제의 해결 방법
    • ECS 클러스터에 있는 도커 컨테이너 업데이트하기
    • 마이크로소프트 애저 컨테이너 서비스 아키텍처
    • 마이크로소프트 애저 컨테이너 서비스 관련 문제의 해결 방법
    • AWS 및 애저용 도커
    • 요약

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안