Skip to main content

스터디 개요

📖 사용 교재

처음부터 제대로 배우는 도커/쿠버네티스 컨테이너 개발과 운영

  • 저자: 야마다 아키노리
  • 출판사: 제이펍 (2025년 5월 출간)
  • 가격: 36,000원
목차
📖 CHAPTER 1. 컨테이너와 도커 기초

1.1 컨테이너란?

  • 1.1.1 컨테이너형 가상화
  • 1.1.2 컨테이너 사용 사례
  • COLUMN 컨테이너의 단점

1.2 도커란?

  • 1.2.1 도커와 Docker, Inc.의 역사
  • 1.2.2 애플리케이션 배포에 초점을 맞춘 도커
  • 1.2.3 도커 접하기
  • COLUMN Moby 프로젝트

1.3 컨테이너를 사용하는 이유

  • 1.3.1 불변하는 애플리케이션과 실행 환경에 의한 재현성 확보
  • COLUMN 클라우드의 IaC와 Immutable Infrastructure
  • COLUMN 컨테이너 기술과 서버리스 플랫폼
  • 1.3.2 애플리케이션 구성 관리의 용이성
  • 1.3.3 환경과 상관없이 실행 가능한 높은 이식성
  • 1.3.4 컨테이너 기반 개발의 효율성

1.4 로컬 컨테이너 실행 환경 구축

  • 1.4.1 도커 데스크톱 설치
  • COLUMN ARM 아키텍처
  • 1.4.2 도커 데스크톱 설정
  • 1.4.3 도커 데스크톱 트러블슈팅
  • COLUMN Linux 환경 설치
  • COLUMN 도커의 구독 플랜
🚀 CHAPTER 2. 컨테이너 배포

2.1 컨테이너로 애플리케이션 실행하기

  • 2.1.1 컨테이너 이미지와 컨테이너의 기초

2.2 간단한 애플리케이션과 컨테이너 이미지 만들기

  • 2.2.1 Dockerfile의 인스트럭션
  • COLUMN CMD 실행 시 덮어쓰기
  • COLUMN ENTRYPOINT로 커맨드 실행하는 방법 알아보기
  • COLUMN Dockerfile의 다른 인스트럭션
  • COLUMN CMD의 지정 방식
  • 2.2.2 컨테이너 실행하기
  • COLUMN 짧은 도커 커맨드

2.3 이미지 다루기

  • 2.3.1 docker image build - 이미지 빌드
  • 2.3.2 docker search - 이미지 검색
  • 2.3.3 docker image pull - 이미지 가져오기
  • 2.3.4 docker image ls - 이미지 리스트
  • 2.3.5 docker image tag - 이미지 태그
  • 2.3.6 docker login - 컨테이너 레지스트리 로그인
  • 2.3.7 docker image push - 이미지 공개
  • COLUMN GHCR에 컨테이너 이미지 공개하기

2.4 컨테이너 다루기

  • 2.4.1 컨테이너의 라이프 사이클
  • 2.4.2 docker container run - 컨테이너 생성과 실행
  • COLUMN 커맨드 실행 시 자주 사용되는 옵션
  • 2.4.3 docker container ls - 컨테이너 리스트
  • 2.4.4 docker container stop - 컨테이너 중지
  • 2.4.5 docker container rm - 컨테이너 파기
  • 2.4.6 docker container logs - 로그(표준 스트림 출력) 확인하기
  • 2.4.7 docker container exec - 실행 중인 컨테이너에서 커맨드 실행
  • 2.4.8 docker container cp - 파일 복사

2.5 운영 관리를 위한 커맨드

  • 2.5.1 prune - 파기
  • 2.5.2 docker container stats - 사용 상태 가져오기

2.6 도커 컴포즈

  • 2.6.1 도커 컴포즈를 사용한 단일 컨테이너 실행
  • 2.6.2 컴포즈를 사용해 여러 컨테이너 실행하기
🔧 CHAPTER 3. 실용적인 컨테이너의 구축과 배포

3.1 애플리케이션과 컨테이너의 구성

  • 3.1.1 하나의 컨테이너 = 하나의 프로세스?
  • 3.1.2 하나의 컨테이너에 하나의 관심사

3.2 컨테이너의 이식성

  • 3.2.1 커널 및 아키텍처와의 차이
  • COLUMN Windows에서 동작하는 컨테이너
  • 3.2.2 라이브러리, 동적 링크

3.3 컨테이너 친화적인 애플리케이션

  • 3.3.1 설정 파일을 포함하여 이미지 빌드하기
  • 3.3.2 컨테이너 외부의 설정 파일 사용하기
  • COLUMN 컨테이너 친화적인 프로덕트만 있는 것은 아니다.

3.4 보안 정보를 다루는 방법

  • 3.4.1 보안 정보를 받는 컨테이너
  • 3.4.2 버전 관리 시스템과 보안 정보 관리의 어려움
  • 3.4.3 시크릿을 사용한 보안 정보 관리
  • COLUMN 소프트웨어 공급망 공격
  • 3.4.4 완벽한 대책은 존재하지 않는다

3.5 영속성 데이터의 사용 방법

  • 3.5.1 Data Volume
  • 3.5.2 Data Volume 컨테이너
🏗️ CHAPTER 4. 여러 컨테이너의 구성을 통한 애플리케이션 구축

4.1 웹 애플리케이션 구성

  • 4.1.1 애플리케이션 스펙
  • 4.1.2 아키텍처

4.2 MySQL 구축

  • 4.2.1 MySQL에 접속하는 유저의 비밀번호 생성하기
  • 4.2.2 MySQL 컨테이너 추가 설정하기
  • 4.2.3 MySQL의 Dockerfile
  • 4.2.4 MySQL 컨테이너의 구성 설정하기

4.3 데이터베이스 마이그레이터 구축

  • 4.3.1 golang-migrate로 데이터베이스 마이그레이션하기
  • 4.3.2 마이그레이션 실행 스크립트
  • 4.3.3 데이터베이스 마이그레이터의 Dockerfile
  • COLUMN .dockerignore 파일
  • 4.3.4 데이터베이스 마이그레이터 컨테이너의 구성 설정하기

4.4 API 서버와 웹서버 구축

  • 4.4.1 리포지터리 디렉터리 구성
  • COLUMN 폴리레포와 모노레포
  • 4.4.2 실행 파일과 커맨드 상세
  • 4.4.3 API 서버의 구축
  • 4.4.4 웹서버 구축

4.5 리버스 프록시 구축

  • 4.5.1 nginx 컨테이너의 템플릿 구조
  • COLUMN entrykit
  • 4.5.2 Dockerfile

4.6 여러 컨테이너를 구성하여 작업 관리 앱 실행하기

  • 4.6.1 compose.yaml
  • 4.6.2 작업 관리 앱 실행하기

4.7 Tilt로 여러 컨테이너 구성을 통한 개발 경험 향상

  • 4.7.1 Tilt 실행
  • 4.7.2 Tilt의 강력한 기능

4.8 컨테이너 오케스트레이션 기초 정리

☸️ CHAPTER 5. 쿠버네티스 입문

5.1 쿠버네티스란?

  • 5.1.1 도커의 번성과 쿠버네티스의 탄생
  • 5.1.2 쿠버네티스의 위상

5.2 로컬 환경에서 쿠버네티스 실행하기

  • 5.2.1 도커 데스크톱에서 로컬 쿠버네티스 환경 구축하기
  • COLUMN 다른 쿠버네티스 구축 도구

5.3 쿠버네티스 개요

5.4 쿠버네티스 클러스터와 노드

  • COLUMN 컨트롤 플레인을 구성하는 관리 컴포넌트

5.5 네임스페이스

5.6 파드

  • 5.6.1 파드 생성하고 배포하기
  • 5.6.2 파드 조작하기
  • COLUMN 파드와 파드 내부 컨테이너의 주소

5.7 레플리카셋

5.8 디플로이먼트

  • 5.8.1 레플리카셋 라이프 사이클
  • 5.8.2 롤백 실행하기

5.9 서비스

  • 5.9.1 레이블 셀렉터를 사용한 트래픽 라우팅
  • COLUMN 서비스의 이름 분석
  • 5.9.2 ClusterIP 서비스
  • 5.9.3 Headless 서비스
  • 5.9.4 NodePort 서비스
  • 5.9.5 LoadBalancer 서비스
  • 5.9.6 ExternalName 서비스

5.10 인그레스

  • 5.10.1 인그레스 컨트롤러와 인그레스 클래스
  • 5.10.2 인그레스를 통한 액세스
  • COLUMN kubectl로 리소스 타입과 리소스명을 지정하는 방법
  • COLUMN Tilt로 매니페스트 파일의 업데이트를 감지하고, 자동으로 리소스 업데이트하기
  • COLUMN k9s
  • COLUMN 쿠버네티스 API
🚢 CHAPTER 6. 쿠버네티스 배포와 클러스터 구축

6.1 작업 관리 앱 구성

  • 6.1.1 작업 관리 앱을 구성하는 쿠버네티스 리소스

6.2 작업 관리 앱을 쿠버네티스에 배포하기

  • 6.2.1 네임스페이스
  • 6.2.2 시크릿
  • 6.2.3 MySQL 배포
  • COLUMN 스테이트풀셋의 serviceName
  • 6.2.4 데이터베이스 마이그레이터 배포
  • 6.2.5 API 서버 배포
  • 6.2.6 웹서버 배포

6.3 쿠버네티스 애플리케이션 온라인에 공개하기

  • 6.3.1 Azure Kubernetes Service 배포
  • COLUMN 자체 도메인과 HTTPS로 애플리케이션 공개하기
  • COLUMN kubectx
⚙️ CHAPTER 7. 쿠버네티스 활용

7.1 파드 배포 전략

  • 7.1.1 RollingUpdate
  • COLUMN 리소스의 일부를 업데이트하는 kubectl patch 커맨드
  • 7.1.2 컨테이너 실행 시 상태 체크 설정하기
  • COLUMN 안전하게 애플리케이션을 중지하고 파드 삭제하기
  • 7.1.3 Blue-Green Deployment
  • COLUMN 서비스 메시를 구현하는 프로덕트

7.2 쿠버네티스에서 정기적인 배치 작업 실행하기

  • 7.2.1 크론잡
  • 7.2.2 타임존을 고려한 크론잡 실행
  • 7.2.3 크론잡에서 잡을 일회성으로 실행하기

7.3 유저 관리와 Role-Based Access Control(RBAC)

  • 7.3.1 RBAC를 사용해 권한 제어 구현하기
  • 7.3.2 클러스터 롤 생성
  • 7.3.3 서비스 어카운트 생성
  • 7.3.4 클러스터 롤 바인딩 생성
  • 7.3.5 일반 유저
📦 CHAPTER 8. 쿠버네티스 애플리케이션 패키징

8.1 Kustomize

  • 8.1.1 기본적인 사용 방법
  • COLUMN 권장하지 않는 commonLabels
  • 8.1.2 재사용과 부분 오버레이
  • 8.1.3 Kustomize에서 시크릿 다루기
  • 8.1.4 네트워크를 경유해서 매니페스트 생성하기

8.2 Helm

  • 8.2.1 Helm 설치
  • 8.2.2 Helm Chart와 리포지터리
  • 8.2.3 Chart 설치하기
  • 8.2.4 자체 Chart 생성하기
  • COLUMN 쿠버네티스의 권장 레이블
  • 8.2.5 Chart를 레지스트리에 등록하기
  • COLUMN GHCR의 패키지와 리포지터리 연결하기
  • COLUMN Open Container Initiative(OCI)
🔍 CHAPTER 9. 컨테이너 운영

9.1 로그 운영

  • 9.1.1 컨테이너 로그
  • 9.1.2 컨테이너 로그 운영
  • 9.1.3 Elastic Stack에 의한 로그 수집, 관리 구성의 구축
  • COLUMN 안정화된 Elasticsearch 선택하기
  • COLUMN 클라우드의 자체 로그 관리
  • 9.1.4 stern

9.2 가용성이 높은 쿠버네티스 운영

  • 9.2.1 노드 장애 시 쿠버네티스 동작
  • 9.2.2 Pod AntiAffinity를 통해 장애 저항성이 뛰어난 파드 배포 전략
  • 9.2.3 CPU를 많이 사용하는 파드를 Node Affinity로 분리하기
  • 9.2.4 Horizontal Pod Autoscaler를 사용한 파드의 오토스케일
  • 9.2.5 Cluster Autoscaler를 사용한 노드의 오토 스케일
  • COLUMN 쿠버네티스 클러스터와 노드 운영을 가볍게 하는 구조
🏎️ CHAPTER 10. 최적의 컨테이너 이미지 생성과 운영

10.1 운영에 최적인 컨테이너 이미지란?

  • 10.1.1 이미지 사이즈 증가로 인해 발생하는 문제

10.2 경량 베이스 이미지

  • 10.2.1 scratch
  • 10.2.2 BusyBox
  • 10.2.3 Alpine Linux
  • COLUMN Alpine Linux 베이스 이미지의 사용 여부
  • 10.2.4 Distroless

10.3 경량 컨테이너 이미지 생성하기

  • 10.3.1 배포하는 애플리케이션의 사이즈 줄이기
  • 10.3.2 컨테이너 이미지의 레이어 구조 의식하기

10.4 Multi-stage builds

  • 10.4.1 빌드 컨테이너와 실행 컨테이너 나누기
  • COLUMN 외부 이미지를 스테이지로 사용하기

10.5 BuildKit

  • 10.5.1 BuildKit이란?
  • 10.5.2 컨테이너의 멀티 플랫폼 대응
  • 10.5.3 BuildKit으로 멀티 플랫폼에 대응하는 이미지 빌드하기
  • COLUMN QEMU
  • COLUMN 멀티 플랫폼 이미지는 어디까지 대응해야 할까?

10.6 안전한 컨테이너 이미지의 사용과 생성

  • 10.6.1 컨테이너 이미지를 최소한으로 구성하기
  • 10.6.2 권한 모드로 실행 피하기
  • 10.6.3 root 유저로 실행 피하기
  • 10.6.4 신뢰할 수 있는 컨테이너 이미지와 도구 사용하기
  • 10.6.5 Trivy로 컨테이너 이미지 취약성 체크하기

10.7 CI 도구로 컨테이너 이미지 빌드하기

  • 10.7.1 GitHub Actions
  • 10.7.2 템플릿에서 리포지터리 생성하기
  • 10.7.3 워크플로 설정
  • 10.7.4 워크플로 실행
  • COLUMN 운영에서는 latest 이미지 태그 피하기
🔄 CHAPTER 11. 컨테이너의 지속적 전달

11.1 지속적 전달이란?

  • 11.1.1 다듬어지지 않은 배포 프로세스가 일으키는 문제
  • 11.1.2 소프트웨어 전달의 중요성과 CI/CD 구분
  • 11.1.3 GitOps 방식의 지속적 전달

11.2 Flux

  • 11.2.1 Flux 설치
  • 11.2.2 애플리케이션 배포

11.3 Argo CD

  • 11.3.1 Argo CD 설치
  • 11.3.2 애플리케이션 배포

11.4 PipeCD

  • 11.4.1 PipeCD의 특징
  • 11.4.2 퀵 스타트 환경 구축
  • 11.4.3 애플리케이션 배포
  • COLUMN PipeCD에서 Control Plane과 Piped를 각각 구축하는 이유

11.5 소프트웨어 전달의 완전 자동화

  • 11.5.1 매니페스트로 정의하는 컨테이너 이미지 태그를 자동 업데이트하기
  • COLUMN GitOps에 승인 프로세스 넣기
🎯 CHAPTER 12. 컨테이너의 다양한 활용 방법

12.1 팀 개발에서 개발 환경을 통일하고 공유하기

  • 12.1.1 사용하는 소프트웨어와 도구 통일하기
  • 12.1.2 개발 환경과 집단 지성
  • COLUMN 컨테이너가 Vagrant를 대체할 수 있을까?

12.2 커맨드 라인 도구를 컨테이너에서 사용하기

  • 12.2.1 Trivy를 컨테이너에서 실행하기
  • 12.2.2 셸 스크립트를 컨테이너에서 실행하기

12.3 부하 테스트

  • 12.3.1 Locust 개요
  • 12.3.2 쿠버네티스에서 애플리케이션의 부하 테스트
  • COLUMN k6에서 부하 테스트 실행
🛠️ APPENDIX A. 개발 도구 셋업

A.1 WSL2

  • A.1.1 WSL2의 조건
  • A.1.2 WSL2의 설치
  • A.1.3 WSL2로 사용할 수 있는 배포판
  • A.1.4 make 설치
  • COLUMN WSL2를 사용하는 개발 스타일 정착

A.2 asdf

  • A.2.1 asdf란?
  • A.2.2 asdf 설치
  • A.2.3 도구 설치
  • A.2.4 사용하는 버전 설정

A.3 kind

  • A.3.1 kind 설치
  • A.3.2 멀티 노드의 쿠버네티스 클러스터를 로컬 환경에 구축하기
  • COLUMN Docker in Docker / Container in Container

A.4 Rancher Desktop

☁️ APPENDIX B. 다양한 컨테이너 오케스트레이션 환경

B.1 Google Kubernetes Engine

  • B.1.1 GKE 클러스터의 구축 준비
  • B.1.2 GKE 클러스터 구축

B.2 Amazon Elastic Kubernetes Service

  • B.2.1 EKS 클러스터 구축 준비
  • B.2.2 eksctl을 사용해 EKS 클러스터 구축
  • COLUMN EKS on Fargate

B.3 Azure Kubernetes Service

  • B.3.1 AKS 클러스터의 구축 준비
  • B.3.2 AKS 클러스터 구축
  • B.3.3 AKS 클러스터 조작

B.4 온프레미스 환경에서 쿠버네티스 클러스터 구축

  • B.4.1 온프레미스 클러스터 구축 준비
  • B.4.2 kubespray를 사용해 EKS 클러스터 구축

B.5 Amazon Elastic Container Service

  • B.5.1 CDK로 ECS 클러스터 생성과 컨테이너 배포 정의하기
  • B.5.2 CDK로 ECS 클러스터를 생성하고 컨테이너 배포하기
  • COLUMN Amazon ECS Anywhere
💡 APPENDIX C. 컨테이너 개발과 운영 팁

C.1 컨테이너 런타임

  • C.1.1 containerd
  • COLUMN 쿠버네티스의 도커 deprecated 소동
  • C.1.2 nerdctl

C.2 쿠버네티스 팁

  • C.2.1 이페머럴 컨테이너를 통한 기존 파드 디버깅
  • C.2.2 Pod Security Admission을 사용한 보안 강화
  • COLUMN Open Policy Agent

C.3 컨테이너 개발, 배포 팁

  • C.3.1 Compose Watch로 컨테이너 자동 업데이트하기
  • C.3.2 Tilt로 쿠버네티스 애플리케이션 다루기

C.4 생성형 AI를 활용한 컨테이너 개발 효율화

  • C.4.1 ChatGPT 활용하기
  • C.4.2 GitHub Copilot 활용하기

C.5 Alpine Linux 패키지 매니저 apk

  • C.5.1 패키지 매니저 apk 조작하기
  • C.5.2 alpine-sdk 패키지

🎯 스터디 목표

  • 도커 컨테이너 기초 개념부터 실무 활용까지 체계적 학습
  • 쿠버네티스 오케스트레이션 및 클러스터 관리 능력 습득
  • 쿠버네티스 환경에서의 컨테이너 운영 및 CI/CD 자동화 경험

📅 스터디 기간 및 구성

  • 모집 기간: 8월 7일(목) ~ 8월 14일(목) 까지
  • 진행 기간: 8~12주 (약 2개월)
  • 스터디 인원: 4-6명
  • 참여 대상:
    • 컨테이너 기술에 관심 있는 개발자
    • DevOps/인프라 분야 진출 희망자
    • 도커는 알지만 쿠버네티스를 체계적으로 배우고 싶은 분
    • 쿠버네티스 환경에서 개인 홈 서버를 구축하고 싶은 분

📚 스터디 방식

1️⃣ 사전 학습

  • 지정된 챕터 개인 학습 및 실습 진행
  • 핵심 개념 정리 및 질문사항 정리
  • GitHub에 학습 내용 및 실습 결과 정리하여 PR 생성

2️⃣ 온라인 모임

  • 학습 내용 공유 및 토론
  • 어려웠던 부분 질의응답
  • 다음 주 학습 분량 및 실습 계획 수립

🤝 스터디 규칙

  • 사전 학습 필수, 불참 시 사전 연락
    • 무단 불참 3회 누적 시 스터디 진행 불가
  • 서로 도움을 주고받는 협력적 분위기 조성
  • 트러블슈팅 사례 공유

🎁 스터디 결과물

  • 개인 포트폴리오용 쿠버네티스 프로젝트 완성
  • 도커/쿠버네티스 경험 및 트러블슈팅 노하우 축적