🥞 BE
home

[BOAZ BASE] 도커-발제-자료

Dockerization : localhost to production

목차
1.
실습 셋팅
git repo를 clone해주세요.
git clone https://github.com/HyeJung-Hwang/boaz-docker.git
Bash
복사
docker desktop을 켜주세요.
docker를 사용할 수 있는 터미널(mac)/git bash 또는 wsl 또는 powershell(window)으로 이동해주세요.

Dockerization: For Beginners

1. What is Dockerization?

Dockerziation
= Isolating a Program
= Building Program into a Container
= Building a Dockerfile into a Docker Image and then into a Docker Container

a. Isolating a Program

프로그램에게 격리된 환경이 필요한 이유
개발자가 동일한 환경에서 작업할 수 있게 하기 위해
프로그램을 서빙(서비스화) 하는데 필요한 환경을 패키지화 하기 위해

b. Building Program into a Container

Dockerization = 내 프로그램(코드) + 내 개발환경 → 컨테이너
컨테이너
프로그램 실행에 필요한 모든 것(패키지,런타임)을 포함하는 가상화 패키지
i. How Does Virtualisation Work in Container?
가상화(Virtualisation)이란?
가상 = 논리 = Not Physical
한 대의 물리적인 기계에서 운영 체제/서버/저장소 또는 네트워크와 같은 것들의 여러 개의 시뮬레이션된 환경이나 가상 버전을 만들 수 있는 기술
Container로 가상화하기
운영체제(OS)를 가상화
VM: 하드웨어/서버를 가상화

c. Building a Dockerfile into a Docker Image and then into a Docker Container

Docker 란?
컨테이너를 만들고 관리하는 툴
Dockerfile & Docker Image
Dockerfile → Docker Image → Container
Docker Image
Container 실행할 때 필요한 파일 시스템(개발 환경)
도커라는 툴이 도커파일의 커맨드를 한줄한줄 읽으면서 레이어를
쌓아서 최종적인 환경, 파일시스템을 구축
이미지 레이어 구조란?
이미지 레이어 = 파일 시스템의 변경 사항의 스냅샷(캡쳐 단위)
Docker가 Dockerfile을 읽으면서 파일시스템에 변화를 주는 커맨드 마다 새로운 이미지 레이어를 쌓으면서 최종적으로 컨테이너로 실행하려는 프로그램에 필요한 환경, 파일 시스템 구축!
왜 레이어 구조를 사용할까요?
이미지 레이어 구조로 컨테이너가 구현되는 과정
docker run
이미지 레이어 스냅샷 복원
신규 컨테이너 공간에 mount하여 이미지 레이어 구성
새로운 레이어(컨테이너 레이어)가 해당 mount 위에 구성
파일시스템을 여러 개의 레이어로 사용하는 것을 가능하게 한 방법
Union File System
2개 이상, 여러 개의 파일 시스템을 하나의 파일 시스템에 마운트하는 방법
상속?
두 파일 시스템에서 동일한 파일이 있다면 나중에 마운트된 파일 시스템의 파일을 오버레이
→ 서로 다른 Docker Container 가 같은 동일한 파일시스템 공유 가능
하위 파일시스템에 대한 쓰기 작업은 CoW(Copy On Write) 전략에 따라 복사본을 생성하여 수행
→ 서로 다른 Docker Container 의 독립 실행 가능
Union File System in Docker
이미지 레이어 위에 컨테이너 레이어를 mount
Docker Container 사이 파일 시스템 공유 가능
Docker Container 독립적으로 실행 가능
실습 1

Optimization: Python Docker Image

Docker 환경을 어떻게 최적화할 수 있을까?
Docker Image Layer 구성 변화
1.
필요없는 packages의 제거
2.
적절한 Base image의 선정
3.
Multi-stage 빌드
Docker Image Layer 구성 최적화 방법
FROM python:3.8 RUN apt-get update && apt-get install -y make curl vim WORKDIR /service COPY requirements.txt . RUN pip install -r requirements.txt COPY . .
Docker
복사
result(용량)
1 GB 이상
1.
필요없는 packages의 제거
프로그램에 필요 없는 패키지 설치하는 CMD를 Dockerfile에서 삭제
FROM python:3.8 RUN apt-get update WORKDIR /service COPY requirements.txt . RUN pip install -r requirements.txt COPY . .
Docker
복사
2.
적절한 Base image의 선정
alpine, slim 태그가 달린 이미지 사용하기 (추천)
alpine
가벼운 리눅스 배포판
slim
파이썬을 실행하는데 필요한 최소한의 패지키만 설치
실습 2
3.
Multi-stage 빌드
빌드 등에는 필요하지만 최종 컨테이너 이미지에는 필요 없는 환경을 제거할 수 있도록 단계를 나누어서 기반 이미지를 만드는 방법
복사하지 않는 모든 변경사항이 폐기되어 다음 스테이지로 옮겨지지 않음
최종 Docker 이미지의 불필요한 크기를 생성하지 않게 된다!
실습3