도커(Docker)를 처음 배울 때는 아래와 같이 비교 대상을 함께 보면 개념이 훨씬 더 잘 잡혀요. 도커는 전통적인 가상화 기술(VM), 실제 운영체제(OS), 그리고 도시락/앱스토어 같은 친숙한 개념과 비교하면 이해가 쉬워집니다.
| 비교 대상 | 설명 | 도커와의 차이점 | 비유 |
|---|---|---|---|
| 가상 머신(VM) | 컴퓨터를 통째로 하나 더 만드는 방식 | OS도 하나 더 깔고 무겁고 느림 | VM = 컴퓨터를 통째로 복사 Docker = 🍱필요만 담은 도시락 |
| 실제 컴퓨터(OS) | Windows나 Mac처럼 하나의 전체 운영체제 | 하나만 실행 가능하고 무겁다 | OS = 집 전체 Docker = 🛏방하나 빌려 쓰는 느낌 |
| 앱 설치 | PC에 직접 프로그램을 설치하는 방식 | 환경이 다르면 에러날 수 있음 | 설치 = 재료 사서 직접 요리 Docker= 🍱도시락받아바로먹기 |
| 도시락/배달음식 | 만들어진 상태로 바로 사용 | 빠르고 간편하지만 직접 수정은 어려움 | 직접 요리 = 설치형 도커 = 🍱완성된 도시락 주문 |
VM과 Docker 비교는 가장 기본이자 중요한 이해 방식!
도커는 "공유 주방에서 반찬만 가져다 쓰는 느낌"으로 가볍고 빠르다
다른 환경에서도 항상 똑같이 잘 돌아가게 해주는 것이 가장 큰 장점
| 구분 | 쉽게 말하면 | 예시 & 비유 |
|---|---|---|
| 1. 가상화 기술 | 여러 컴퓨터처럼 나누는 기술이야 | 🖥 우리 컴퓨터를 여러 개로 나누는 마법! 📦 "가상 머신"은 무겁고 느리지만, 🍱 "컨테이너"는 도시락처럼 가볍고 빠름! |
| 2. Docker란? | 가볍고 빠른 "도시락 컴퓨터"를 만들고 실행하는 도구야 | 요리를 하려면 도시락통이 필요하지? Docker는 그 도시락통을 만들어주는 주방장이야! |
| 3. Docker 이미지 | 도시락의 설계도야 | 🍙 안에 들어갈 반찬(코드, 환경 등)을 정리해 둔 그림 이미지는 고정된 상태라서 안전하게 쓸 수 있어! |
| 4. Dockerfile | 도시락 만드는 레시피야 | 🍳 이걸 보고 Docker가 도시락 이미지를 만들어!FROM, RUN 같은 요리순서가 적혀 있어 |
| 5. Docker 컨테이너 | 도시락을 실제로 만든 것! | 🍱 이미지(설계도)를 바탕으로 만들어진 진짜 도시락이야 먹고 버릴 수 있고, 여러 개 만들어도 돼! |
| 6. Docker 명령어 | 도커에게 시키는 말이야 | ▶️ docker run : 도시락 만들어 줘!🔍 docker ps : 지금 도시락 뭐 있어?⬇️ docker pull : 도시락 설계도 가져와! |
| 7. Docker 레지스트리 | 도시락 이미지(설계도)를 보관하는 냉장고야 | 📦 공개 냉장고 = Docker Hub (누구나 사용 가능) 🔐 사설 냉장고 = 회사에서 따로 쓰는 비밀 창고 |
| 구분 | 개념/항목 | 설명 |
|---|---|---|
| 1. 가상화 기술 | 전통적 가상화 (Hypervisor) | - VM 기반 - 하드웨어 자원 분할 + 각 게스트 OS 실행 - 자원 낭비, 성능 저하 발생 |
| 컨테이너 기반 가상화 | - 하나의 OS 커널 공유 - 컨테이너는 프로세스 수준에서 동작 - 성능 저하 적고 자원 효율 높음 | |
| 2. Docker | 정의 | 컨테이너 기반 가상화 플랫폼으로 이미지 생성 및 컨테이너 실행 지원 |
| 특징 | - 경량 & 빠름 - 동일한 실행 환경 보장 - 높은 이식성 | |
| 3. Docker 이미지 | 개념 | 실행환경 + 코드 + 설정을 묶은 읽기 전용 패키지 |
| 예시 구성 | - 앱 코드 - 라이브러리 - OS 설정 - 환경 변수 등 | |
| 특징 | - 변경 불가 (Immutable) - 안전한 보관 및 공유 | |
| 4. Dockerfile | 정의 | 도커 이미지를 생성하기 위한 설정 스크립트 |
| 주요 명령어 | FROM, RUN, COPY, WORKDIR, CMD, EXPOSE 등 | |
| 역할 | 이미지 생성 절차를 자동화 | |
| 5. Docker 컨테이너 | 개념 | 이미지를 실행한 격리된 단위 (프로세스처럼 작동) |
| 특징 | - 독립적 실행 환경 - 빠른 생성/삭제 - 다른 컨테이너에 영향 없음 | |
| 활용 | 개발 환경 구축, 테스트, 배포 자동화 등 | |
| 6. Docker CLI 명령어 | docker run | 이미지로 컨테이너 실행 |
docker ps / docker ps -a | 실행 중 / 전체 컨테이너 조회 | |
docker images | 로컬 이미지 목록 확인 | |
docker pull | 이미지 다운로드 (예: docker pull ubuntu) | |
| 7. Docker 레지스트리 | 개념 | 도커 이미지를 저장하고 배포하는 저장소 서버 |
| 공개 레지스트리 | Docker Hub (가장 널리 사용됨) | |
| 사설 레지스트리 | 기업 내부용 / 보안 목적 사용 |
이 표를 PPT 슬라이드용, 프린트용 PDF, Markdown 문서 등 다양한 포맷으로 변환해드릴 수도 있습니다. 원하시나요?
좋습니다! 지금까지 EC2 + Ubuntu + FastAPI 실습 내용을 기반으로, 그리고 앞에서 배운 Docker 개념까지 함께 정리해드릴게요. 실습 흐름과 개념을 한눈에 보기 쉽도록 표 중심 요약과 함께 실습 순서 요약도 같이 제공하겠습니다.
| 항목 | 내용 |
|---|---|
| 목표 | AWS EC2 인스턴스에 Ubuntu 서버 설치 후, FastAPI 웹 서버 실행 |
| 사용 기술 | EC2, Ubuntu 22.04 LTS, SSH, FastAPI, Uvicorn, Python3, Docker (선택적) |
| 인스턴스 유형 | t2.micro (프리티어 무료, 1 CPU, 1GB RAM) |
| AMI 선택 | Ubuntu Server 22.04 LTS (64-bit x86) |
| 키 페어 | .pem 파일 생성 → SSH 접속용 개인키 |
| 보안 그룹 | 인바운드 규칙: 22(SSH), 8000(FastAPI 웹서버용 포트) 허용 |
| 스토리지 | 8GB 기본 (최대 30GB까지 프리티어 무료) |
| 실행 결과 | 브라우저에서 EC2 퍼블릭 IP + 포트 접속 → {"Hello":"World"} 출력 |
| 단계 | 명령어/행동 | 설명 |
|---|---|---|
| ① EC2 생성 | AWS 콘솔에서 t2.micro + Ubuntu 22.04 선택 | 서버 생성 |
| ② 키 페어 생성 | my_app.pem 다운로드 | SSH 인증 키 (주의: 재발급 안 됨) |
| ③ SSH 접속 | $ ssh -i my_app.pem ubuntu@<Public-IP> | 인스턴스 접속 |
| ④ Python3 & pip3 세팅 | bash<br>$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10<br>$ sudo apt update<br>$ sudo apt install -y python3-pip<br>$ sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 10<br> | python3과 pip 명령어를 기본으로 지정 |
| ⑤ FastAPI 설치 | $ pip install fastapi "uvicorn[standard]" | 웹서버 프레임워크 설치 |
| ⑥ 코드 작성 | $ vi main.py + FastAPI 코드 입력 | 텍스트 편집기에서 서버 코드 작성 |
| ⑦ 서버 실행 | $ python3 -m uvicorn main:app --host 0.0.0.0 | 외부 IP에서 접속 가능하게 서버 실행 |
| ⑧ 보안 그룹 설정 | 포트 8000 허용 | 인바운드 규칙에서 수동 설정 필요 |
| ⑨ 접속 확인 | http://<Public-IP>:8000/ | FastAPI 응답 확인 ({"Hello": "World"}) |
| 구분 | EC2 (우분투 직접설치) | Docker 기반 방식 |
|---|---|---|
| 환경 구축 | 직접 OS, Python, 패키지 설치 필요 | Dockerfile만 있으면 자동 구성 |
| 가상화 수준 | 전체 VM (하이퍼바이저 기반) | 컨테이너 (OS 커널 공유) |
| 설치 복잡도 | 수동 구성 필요 (시간 소요) | 자동화된 이미지 실행 가능 |
| 성능 | 약간 무거움 (리소스 고정 할당) | 가벼움, 유연한 자원 사용 |
| 이식성 | EC2 설정을 다른 서버에 옮기기 어려움 | Docker 이미지로 손쉽게 이식 가능 |
| 운영체제 호환성 | Ubuntu 기반 (우분투에 종속적) | 다양한 OS 환경에서 동일 이미지 사용 가능 |
# FastAPI 서버를 위한 Dockerfile 예시
FROM python:3.10-slim
WORKDIR /app
COPY ./main.py /app
RUN pip install fastapi "uvicorn[standard]"
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
# 이미지 빌드
$ docker build -t my-fastapi .
# 컨테이너 실행
$ docker run -d -p 8000:8000 my-fastapi
이 방식은 EC2든 로컬이든 동일하게 재현할 수 있으며, 훨씬 빠르게 복제 가능한 서버 환경을 구성할 수 있습니다.
필요하시면 위 내용을 PPT용 표/다이어그램, 또는 Markdown 문서, PDF 매뉴얼 등으로 재구성해드릴 수 있어요.
혹시 도커로 FastAPI를 배포하는 실습도 이어서 진행해보고 싶으신가요?