1. 프로비저닝(Provisioning)과 Dockerfile
1️⃣ 프로비저닝(Provisioning)이란?
“컴퓨터 환경을 자동으로 준비하는 것”
- 프로그램을 실행하려면 미리 준비되어야 하는 게 있음
- 운영체제(OS)
- 라이브러리
- 설정
- 데이터베이스 등
➡️ 이걸 사람이 직접 하나씩 설치하는 게 아니라 자동으로 만들어주는 과정
2️⃣ 도커 프로비저닝
1) 개념
- 도커를 이용해서 실행 환경을 자동으로 만드는 것
“프로그램이 돌아가는 환경을 도커로 자동 세팅하는 과정”
2) 핵심 구성요소 3가지
① 이미지 (Image)
- 실행 환경의 설계도
- 어떤 OS, 어떤 프로그램, 어떤 설정을 사용할 건지 모두 정의됨
- 비유: 레시피
② 컨테이너 (Container)
- 실제 실행되는 프로그램 환경
- 이미지를 기반으로 생성됨
- 비유: 요리된 음식
③ Dockerfile
- 이미지를 만드는 설명서
- 어떤 걸 설치하고, 어떤 설정을 할지를 코드로 작성
3) 전체 흐름 (중요 ⭐)
Dockerfile 작성 ↓ 이미지 생성 (build) ↓ 컨테이너 실행 (run)
➡️ 이 과정 전체가 도커 프로비저닝
4) 왜 도커 프로비저닝을 쓰는가?
- 환경 차이 문제 해결
- “내 컴퓨터에서는 되는데?” 문제 해결
- 빠른 세팅
- 새 개발자도 바로 실행 가능
- 자동화
- 서버 구축을 사람이 안 해도 됨
- 재현 가능
- 언제든 같은 환경 다시 만들 수 있음
5) 기존 방식 vs 도커
구분 | 기존 방식 | 도커 |
설치 | 수동 | 자동 |
환경 차이 | 큼 | 없음 |
재현성 | 낮음 | 높음 |
시간 | 오래 걸림 | 빠름 |
6) 실제 사용 예시 (웹사이트 실행)
기존 방식
- Python 설치
- 라이브러리 설치
- DB 설치
- 설정 맞추기
➡️ 매우 번거로움
도커 방식
docker run한 줄
➡️ 끝
3️⃣ Dockerfile
1) Dockerfile이란?
- 도커 이미지를 만드는 “설명서”
- 어떤 환경을 만들지, 어떤 프로그램을 설치할지, 어떻게 실행할지를 코드로 적어놓은 파일
“컨테이너를 만들기 위한 레시피”
2) 왜 필요할까?
- 매번 환경을 수동으로 만들 필요 없음
- 사람이 하는 작업(OS 설치, 프로그램 설치, 설정 변경)을 Dockerfile이 대신 자동화
3) 전체 흐름 (복습)
Dockerfile 작성
↓
docker build → 이미지 생성
↓
docker run → 컨테이너 실행- Dockerfile은 출발점
4) 기본 구조 (중요 ⭐)
FROM python:3.9
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]5) 핵심 명령어 설명
① FROM
- 시작 환경 지정
- 어떤 OS + 기본 환경 사용할지
- 예
FROM python:3.9➡️ 파이썬이 설치된 환경에서 시작
② WORKDIR
- 작업 폴더 설정
- 컨테이너 내부의 cwd를 지정
- cwd(Current Working Directory) : 현재 작업 디렉토리 (현재 위치)
- 예
WORKDIR /app➡️ “앞으로 /app 폴더에서 작업”
③ COPY
- 파일 복사
COPY . .➡️ “내 컴퓨터 파일을 컨테이너로 복사”
④ RUN
- 명령 실행 (설치 등)
RUN pip install -r requirements.txt➡️ “필요한 라이브러리 설치”
⑤ CMD
- 컨테이너 실행 시 실행할 명령
CMD ["python", "app.py"]➡️ “컨테이너 시작하면 app.py 실행”
⑥ ENV
- 컨테이너에서 사용할 환경변수(Environment Variable) 를 설정하는 명령어
- 애플리케이션 실행 시 필요한 설정값을 코드가 아니라 외부에서 주입할 때 사용
ENV 변수명=값
ENV 변수1=값1 변수2=값2- 특징
- 이미지 빌드 시점 + 컨테이너 실행 시 모두 유지됨
- Dockerfile 내부에서도 사용 가능
- 컨테이너 실행 시 override 가능
서비스명처럼 실행 환경에 따라 달라지는 값은 Dockerfile이 아니라 docker-compose에서 환경변수로 설정한다.
꼭 Dockerfile에서 변수를 설정하고 싶으면 진짜 IP를 적어야 한다.
명령어 요약
명령어 | 역할 |
FROM | 시작 이미지 |
COPY | 파일 복사 |
RUN | 설치/명령 실행 |
CMD | 실행 명령 |
WORKDIR | 작업 폴더 |
6) 핵심 개념 3가지 (중요 ⭐)
① 위에서 아래로 실행됨
- 순서 중요
- 한 줄씩 차례대로 실행
② 이미지 = 층(layer) 구조
- 각 명령어가 하나의 레이어
- 변경된 부분만 다시 빌드됨
③ 자동화된 환경 생성
- 누구나 동일한 환경 사용 가능
7) 비유로 이해하기
개념 | 비유 |
Dockerfile | 요리 레시피 |
Image | 완성된 요리 |
Container | 실제 먹는 음식 |
Share article