따라하며 배우는 도커와 CI 환경

컨테이너 이론부터 Travis CI, AWS 실습까지

《따라하며 배우는 도커와 CI 환경》과 함께 더 쉽게, 더 깊이 있게 도커를 만나보세요!

이 책의 전반부에서는 도커 컨테이너와 도커 이미지가 무엇인지부터 도커 컴포즈까지 도커에 관해 알아봅니다. 다양한 도해와 함께 설명함으로써 도커를 더욱더 쉽게 이해할 수 있고, 깊이 있게 공부할 수 있습니다.

전반부에서 도커의 기본기를 탄탄하게 다진 후에, 이 책의 후반부에서는 두 가지 애플리케이션을 만들어 봅니다. 깃허브, Travis CI, AWS를 이용한 CI/CD 환경을 구축해보면서 실제 실무에서 도커를 어떻게 활용하는지 실습합니다. 깃허브, Travis CI, AWS를 사용한 경험이 없더라도 한 단계씩 차근차근 만들어 나가므로 부담 없이 공부할 수 있습니다.

★ 이 책에서 다루는 내용★

  • 기본적인 도커 클라이언트 명령어
  • 도커를 이용한 간단한 Node.js 애플리케이션 만들기
  • 단일 컨테이너를 활용한 애플리케이션 개발과 배포
  • 멀티 컨테이너를 활용한 애플리케이션 개발과 배포
  • 깃허브, Travis CI, AWS를 활용한 CI/CD 환경 구축

 

도서 상세 이미지

안재원

새로운 기술 배우기와 그 배운 기술을 공유하기를 좋아하는 평범한 개발자입니다. 유튜브와 인터넷 강의 사이트를 통해서 배운 지식을 공유하고 있습니다.

  • ▣ 01장: 도커란?
    • 1.1 도커를 사용하는 이유
      • 도커를 사용하지 않을 때와 도커를 사용해 프로그램을 설치할 때
      • 도커를 사용하지 않고 레디스 설치하기
      • 도커를 사용해 레디스 설치하기
    • 1.2 도커와 컨테이너
      • 실 세계의 컨테이너
      • 도커에서의 컨테이너
    • 1.3 도커 이미지와 도커 컨테이너
    • 1.4 도커 설치하기
      • 도커 회원 가입하기
      • 윈도우 환경에서 도커 설치하기
      • macOS 환경에서 도커 설치하기
    • 1.5 도커를 사용할 때의 흐름
    • 1.6 도커와 기존 가상화 기술의 차이점
      • 가상화 기술이 나오기 전에 서버를 사용하던 방식
      • 하이퍼바이저 기반의 가상화 기술
      • 하이퍼바이저의 종류
      • 더 자세하게 도커 컨테이너 살펴보기
      • Cgroup과 네임스페이스
    • 1.7 도커 이미지로 도커 컨테이너 만들기
      • 응용 프로그램을 실행하는 데 필요한 모든 것
      • 도커 컨테이너가 생성되는 순서
    • 1.8 Cgroup, 네임스페이스를 쓸 수 있는 이유
    •  
  • ▣ 02장: 기본적인 도커 클라이언트 명령어
    • 2.1 도커 이미지의 내부 파일 구조 보기 - docker run ls
    • 2.2 컨테이너 나열하기 - docker ps
      • 현재 실행 중인 컨테이너 나열
      • 도커 컨테이너를 나열할 때 원하는 항목만 보기
      • 모든 도커 컨테이너를 나열
    • 2.3 도커 컨테이너의 생성과 실행
      • 도커 컨테이너를 생성하고 실행하기 - docker run <이미지 이름>
      • 도커 컨테이너 생성하기 - docker create <이미지 이름>
      • 생성된 도커 컨테이너 실행하기 - docker start <컨테이너 ID/이름>
    • 2.4 도커 컨테이너 멈추기
      • 도커 컨테이터를 우아하게 중지하기 - docker stop <컨테이너 ID/이름>
      • 도커 컨테이터를 즉시 중지하기 - docker kill <컨테이너 ID/이름>
    • 2.5 도커 컨테이너 삭제하기 - docker rm
      • 중지된 모든 컨테이너 삭제하기 - docker rm docker ps -a -q
      • 도커 이미지 삭제하기 - docker rmi <이미지 id>
      • 사용하지 않는 데이터 삭제하기 - docker system prune
    • 2.6 실행 중인 컨테이너에 명령어 전달하기 - docker exec
    • 2.7 레디스를 이용해 도커 컨테이너 이해하기
    • 2.8 실행 중인 컨테이너에서 터미널 사용하기 - docker exec sh
      • 실행 중인 컨테이너에 셸 환경으로 접속하기
      • 셸 환경으로 접속하기
    •  
  • ▣ 03장: 직접 도커 이미지 생성하기
    • 3.1 도커 이미지를 생성하는 순서
      • 도커 이미지는 어떻게 생성할까요?
      • 도커 이미지를 생성하는 순서
    • 3.2 도커 파일(Dockerfile) 만들기
      • 도커 파일이란?
      • 도커 파일 작성 방법
      • 베이스 이미지란 무엇인가?
      • 도커 파일 작성하기
    • 3.3 Buildkit 비활성화하기
      • Buildkit이란 무엇인가요?
      • Buildkit을 이용했을 때의 차이점
      • Buildkit 비활성화하기
    • 3.4 도커 파일로 도커 이미지 만들기
      • build 명령어는 무엇인가요?
      • build 명령어로 이미지 빌드하기
      • 빌드 과정 자세히 살펴보기
      • 빌드 과정의 Step 2/2 자세히 보기
    • 3.5 내가 만든 이미지에 기억하기 쉬운 이름 붙여주기
      • 도커 이미지에 이름 붙여주기 - docker build -t
      • 이번 장에서 만들 Node.js 애플리케이션의 구조
      • 도커를 이용해 Node.js 애플리케이션을 만드는 순서
    •  
  • ▣ 04장: 도커를 이용한 간단한 Node.js 애플리케이션 만들기
    • 4.1 Node.js 애플리케이션 만들기
      • Node.js 설치하기
      • Node.js 앱 만들기
    • 4.2 도커 파일 작성하기
      • 작성한 도커 파일 자세히 살펴보기
      • 왜 FROM 부분에 alpine 베이스 이미지가 아닌 node 이미지를 사용할까요?
      • RUN 부분에 있는 npm install은 어떤 코드인가요?
      • CMD부분에 있는 “node”, “server.js”는 무엇인가요?
    • 4.3 package.json이 없다는 에러 메시지가 발생하는 이유
      • 이미지를 빌드할 때 왜 package.json 파일이 없다고 나오나요?
    • 4.4 생성한 이미지로 애플리케이션 실행 시 접근이 안 되는 이유
      • 앞으로 컨테이너를 실행하기 위해 사용할 명령어
      • 새롭게 추가된 부분은 무슨 뜻인가요?
    • 4.5 작업 디렉터리 명시하기
      • WORKDIR 지시자는 무엇인가요?
      • 도커 컨테이너 안에 별도의 작업 디렉터리가 왜 있어야 하나요?
      • COPY 지시자로 컨테이너 안으로 복사한 폴더와 파일
      • 이렇게 파일과 폴더가 한 디렉터리에 섞이면 문제가 되나요?
      • 작업 디렉터리를 설정하는 방법
    • 4.6 애플리케이션의 소스 코드 변경으로 다시 빌드할 때의 문제점
      • 도커 환경에서 애플리케이션을 실행하는 순서
      • 이미지를 새로 빌드하면서 생긴 2가지 문제점
    • 4.7 애플리케이션의 소스 코드를 변경했을 때 이미지를 효율적으로 다시 빌드하기
      • COPY 지시자 부분을 바꾼 이유는 무엇일까요?
      • COPY 지시자를 RUN 전후로 나눠 효율적으로 빌드하기
    • 4.8 도커 볼륨
      • 도커 볼륨(Docker Volume)은 무엇인가요?
      • 도커 볼륨은 어떻게 이용하나요?
      • PWD(print working directory)
      • 도커 볼륨을 사용해 애플리케이션 실행하기
    •  
  • ▣ 05장: 도커 컴포즈
    • 5.1 이번 장에서 만들 애플리케이션
      • 이번 장의 학습 순서
    • 5.2 Node.js와 레디스 구현하기
      • Node.js 애플리케이션 만들기
      • 레디스란 무엇인가요?
      • 레디스의 장점은 무엇인가요?
      • Node.js 환경에서 레디스를 사용하는 방법
      • 도커 환경에서 레디스 클라이언트를 생성할 때 주의할 점
      • Node.js 애플리케이션에 레디스 코드 추가하기
    • 5.3 Node.js를 실행할 컨테이너의 도커 파일 작성하기
      • 도커 파일 작성하기
    • 5.4 통신할 때 나타나는 에러
      • 애플리케이션 실행 순서
    • 5.5 도커 컴포즈 파일 작성하기
      • 도커 컴포즈 파일은 확장자가 yaml이나 yml인데 이것은 무슨 파일인가요?
      • 도커 컴포즈의 파일 구조
    • 5.6 도커 컴포즈 정지시키기
    •  
  • ▣ 06장: 단일 컨테이너를 활용한 애플리케이션 만들기
    • 6.1 리액트 설치 및 애플리케이션 생성
      • 리액트 애플리케이션 생성하기
    • 6.2 리액트 애플리케이션을 위한 도커 파일 작성하기
      • 개발 환경을 위한 도커 파일 작성하기
      • 왜 이런 에러 메시지가 발생했을까요?
    • 6.3 생성된 도커 이미지로 로컬에서 리액트 실행하기
    • 6.4 도커 볼륨을 이용한 소스 코드 변경
      • COPY와 도커 볼륨의 차이점 복습
      • 도커 볼륨을 사용해 애플리케이션 실행하기
    • 6.5 도커 컴포즈로 좀 더 간단하게 애플리케이션 실행하기
      • 도커 컴포즈를 이용해 애플리케이션 실행하기
    • 6.6 리액트 애플리케이션 테스트하기
      • 도커를 이용한 리액트 애플리케이션에서 테스트를 진행하려면
    • 6.7 운영 환경을 위한 엔진엑스
      • 개발 환경에서 리액트 애플리케이션이 실행되는 구조
      • 운영 환경에서 리액트 애플리케이션이 실행되는 구조
      • 왜 개발 환경의 서버와 운영 환경의 서버가 다른가요?
    • 6.8 운영 환경의 도커 이미지를 위한 도커 파일 작성하기
      • 개발 환경의 도커 파일과 운영 환경의 도커 파일 비교
      • 운영 환경의 도커 파일 자세히 보기
      • BUILDER STAGE
      • RUN STAGE
      • 운영 환경에서 리액트 애플리케이션 실행하기
    • 6.9 운영 환경의 도커 컴포즈 파일 작성하기
      • 운영 환경의 도커 컴포즈 파일 작성
    •  
  • ▣ 07장: 단일 컨테이너를 활용한 애플리케이션의 테스트와 배포
    • 7.1 깃허브에 소스 코드 올리기
    • 7.2 Travis CI에서 테스트하기
      • Travis CI란?
      • Travis CI의 역할
      • Travis CI와 깃허브 연동
      • 테스트를 위한 Travis CI 설정 파일 작성하기 – travis.yml
      • travis.yml 파일 자세히 살펴보기
      • .travis.yml 파일 작성하기
    • 7.3 AWS 알아보기
      • AWS의 서비스들
      • EC2란 무엇인가? (Elastic Compute Cloud)
      • 일래스틱 빈스톡이란 무엇인가? (Elastic Beanstalk)
    • 7.4 일래스틱 빈스톡 환경과 애플리케이션 만들기
      • 새로운 일래스틱 빈스톡 환경 만들기
      • 트래픽이 많지 않을 때
      • 트래픽이 많을 때
    • 7.5 애플리케이션을 배포하기 위한 Travis CI 설정 파일 작성하기
      • 배포와 관련된 Travis CI 설정 코드
    • 7.6 Travis CI에서 AWS에 접근하기 위한 API 생성
      • 소스 코드를 전달하기 위한 접근 요건
      • IAM(Identity and Access Management)이란?
      • IAM 사용자 생성하기
      • API 키를 Travis CI 설정 파일에 작성하기
      • 일래스틱 빈스톡 환경 종료하기
    •  
  • ▣ 08장: 다중 컨테이너를 활용한 애플리케이션의 개발 환경 구축
    • 8.1 다중 컨테이너를 활용해 만들 애플리케이션의 구조
      • 멀티 컨테이너 애플리케이션을 위한 전체적인 설계
      • 엔진엑스의 프록시(Proxy) 기능을 이용한 설계
      • 엔진엑스는 정적 파일만 제공하는 설계
      • 애플리케이션의 구현 순서
    • 8.2 Node.js로 애플리케이션의 백엔드 서버 구현하기
    • 8.3 React.js로 애플리케이션의 프런트엔드 구현하기
    • 8.4 리액트 애플리케이션을 위한 도커 파일 만들기
      • 엔진엑스 설정 변경하기
    • 8.5 노드 애플리케이션을 위한 도커 파일 만들기
    • 8.6 개발 환경과 운영 환경의 데이터베이스 구성
      • 개발 환경과 운영 환경의 데이터베이스를 나누는 이유는?
      • 데이터베이스의 구조 자세히 살펴보기
    • 8.7 MySQL을 위한 도커 파일 만들기
      • MySQL을 위한 도커 파일 작성
    • 8.8 엔진엑스를 위한 설정 파일과 도커 파일 만들기
      • 프록시 기능을 위한 엔진엑스 설정
    • 8.9 개발환경을 위한 도커 컴포즈 파일 작성하기
    • 8.10 볼륨을 이용한 데이터베이스의 데이터 유지하기
      • 도커 볼륨을 이용한 데이터 영속성 구조
    •  
  • ▣ 09장: 다중 컨테이너를 활용한 애플리케이션의 배포
    • 9.1 테스트 및 배포 순서 살펴보기
        1. 깃허브 원격 저장소에 소스 코드를 푸시합니다.
        1. Travis CI에서 깃허브에 푸시한 소스 코드를 가져와 테스트합니다.
        1. 빌드된 도커 이미지를 도커 허브로 푸시합니다.
        1. AWS 일래스틱 빈스톡에 애플리케이션을 배포합니다.
    • 9.2 도커 환경의 MYSQL 정리하기
    • 9.3 깃허브에 소스 코드 올리기
    • 9.4 Travis CI에서 테스트하기
      • Travis CI에서 할 일들
      • Travis CI와 깃허브 연동
      • travis.yml 파일의 작성 순서
      • .travis.yml 파일 작성하기
      • Travis CI 사이트에서 환경 변수 만들기
      • Travis CI가 잘 작동하는지 확인
    • 9-5 운영 환경을 위한 도커 컴포즈 파일 생성
      • 도커 컴포즈 파일 생성
    • 9.6 다중 컨테이너 애플리케이션을 위한 일래스틱 빈스톡 환경 생성
      • 애플리케이션 생성
    • 9.7 VPC와 보안 그룹 설정하기
      • 왜 VPC와 보안 그룹을 설정해야 하나요?
      • VPC란 무엇인가요?
      • 일래스틱 빈스톡 환경을 생성할 때 할당되는 기본 VPC 찾아보기
      • 보안 그룹이란 무엇인가요?
      • VPC와 보안 그룹을 이용해 EB 인스턴스와 RDS 통신 문제를 해결하는 방법은?
    • 9.8 AWS RDS를 이용한 데이터베이스 생성하기
      • RDS를 이용한 데이터베이스 생성하기
    • 9.9 데이터베이스 정보를 도커 컴포즈 파일에 명시해주기
      • 데이터베이스의 엔드포인트 정보 확인하기
      • 일래스틱 빈스톡의 환경 속성 설정하기
    • 9.10 보안 그룹의 생성과 적용
      • 보안 그룹 생성하기
      • 보안 그룹 적용하기
      • MySQL 인스턴스에 새로 생성한 보안 그룹 적용하기
      • 일래스틱 빈스톡 인스턴스에 새로 생성한 보안 그룹 적용하기
    • 9.11 애플리케이션을 배포하기 위한 Travis CI 설정 파일 작성하기
      • 지금까지 작성한 Travis CI 설정 코드
      • 배포를 위해 추가할 Travis CI의 설정 코드
    • 9.12 Travis CI에서 AWS에 접근하기 위한 API 키 생성
      • 소스 코드를 전달하기 위한 접근 요건
      • IAM(Identity and Access Management)이란?
      • IAM 사용자 생성하기
      • API 키를 Travis CI 설정 파일에 작성하기
    • 9.13 애플리케이션이 잘 실행되는지 테스트하기
      • 환경 종료하기