📌 Docker란? 🐳
**Docker(도커)**는 애플리케이션을 컨테이너(Container)로 패키징하여 실행할 수 있는 가상화 플랫폼.
쉽게 말해, 어떤 환경에서도 동일하게 실행될 수 있도록 애플리케이션과 그 실행 환경을 한 번에 묶어 배포하는 도구야! 🚀
📌 Docker의 핵심 개념
✅ 1. 컨테이너(Container)
• 애플리케이션과 실행 환경(라이브러리, 설정 파일 등)을 격리된 공간에서 실행할 수 있도록 만든 것.
• 컨테이너 덕분에 OS와 상관없이 동일한 환경을 유지하면서 실행 가능!
✅ 2. 이미지(Image)
• 컨테이너를 실행하기 위한 설정 파일 및 애플리케이션 코드가 포함된 패키지
• 이미지를 기반으로 컨테이너를 생성함.
• 예: nginx:latest, mysql:8.0, node:18
✅ 3. Dockerfile
• 이미지를 생성하기 위한 스크립트 파일
• 여기서 어떤 OS를 사용할지, 어떤 패키지를 설치할지, 어떤 명령을 실행할지 정의함.
✅ 4. Docker Hub
• 이미지 저장소로, 공식 및 사용자 정의 Docker 이미지를 저장하고 공유할 수 있음.
• 예: docker pull nginx 하면 nginx 공식 이미지를 가져옴.
📌 Docker vs. 가상 머신(VM) 차이점
비교 항목 Docker(컨테이너) 가상 머신(VM)
실행 속도 빠름 느림
용량 가벼움(수 MB~GB) 무거움(수 GB~수십 GB)
성능 거의 네이티브 성능 성능 저하 발생
실행 방식 OS 커널 공유 OS별로 별도 커널 사용
배포 빠르고 쉬움 상대적으로 복잡
📌 Docker는 가볍고 빠르며, 여러 환경에서도 일관된 실행 환경을 보장할 수 있음!
📌 Docker 기본 명령어
# 1️⃣ Docker 설치 확인
docker --version
# 2️⃣ Docker 이미지 다운로드 (ex. Nginx 웹 서버)
docker pull nginx
# 3️⃣ 컨테이너 실행 (nginx 실행 후 80번 포트 매핑)
docker run -d -p 8080:80 nginx
# 4️⃣ 실행 중인 컨테이너 확인
docker ps
# 5️⃣ 실행 중인 컨테이너 정지
docker stop [컨테이너 ID]
# 6️⃣ 컨테이너 삭제
docker rm [컨테이너 ID]
# 7️⃣ Docker 컨테이너 로그 확인
docker logs [컨테이너 ID]
📌 docker run -d -p 8080:80 nginx 실행 후 localhost:8080으로 접속하면 Nginx가 실행되는 걸 볼 수 있어! 🚀
📌 Dockerfile 예제 (Node.js 앱 실행)
📌 Dockerfile을 사용하면 동일한 환경을 어디서든 쉽게 실행 가능!
# 1️⃣ Node.js 18 버전 기반 이미지 사용
FROM node:18
# 2️⃣ 컨테이너 내부에서 작업할 디렉토리 설정
WORKDIR /app
# 3️⃣ package.json과 package-lock.json 복사
COPY package*.json ./
# 4️⃣ 의존성 설치
RUN npm install
# 5️⃣ 프로젝트 소스 코드 복사
COPY . .
# 6️⃣ 컨테이너가 실행될 때 수행할 명령
CMD ["node", "server.js"]
📌 이제 이 Dockerfile을 기반으로 이미지를 만들고 실행할 수 있어!
# 1️⃣ Docker 이미지 빌드 (이미지 이름: my-app)
docker build -t my-app .
# 2️⃣ 컨테이너 실행 (포트 3000 매핑)
docker run -d -p 3000:3000 my-app
🚀 이제 localhost:3000으로 접속하면 Node.js 서버가 실행됨!
📌 Docker Compose (여러 개의 컨테이너 관리)
Docker Compose를 사용하면 여러 개의 컨테이너를 한꺼번에 관리할 수 있어!
📌 예를 들어, Node.js + MySQL 애플리케이션을 실행할 때 사용 가능.
✅ docker-compose.yml 예제
version: '3'
services:
app:
image: node:18
container_name: my-node-app
working_dir: /app
volumes:
- .:/app
ports:
- "3000:3000"
command: ["npm", "start"]
db:
image: mysql:8.0
container_name: my-mysql-db
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
ports:
- "3306:3306"
📌 실행 방법
docker-compose up -d # 컨테이너 실행
docker-compose down # 컨테이너 종료
🚀 이제 Node.js 앱과 MySQL DB가 동시에 실행됨!
📌 Docker의 장점
✅ 환경 일관성 유지 → “내 로컬에서는 잘 되는데?” 문제가 사라짐!
✅ 배포 자동화 → 이미지 한 번 빌드하면 어디서든 실행 가능
✅ 가벼운 실행 방식 → VM보다 빠르고 효율적
✅ 확장성 → 여러 개의 컨테이너를 쉽게 관리 가능
📌 Docker 요약
✅ Docker는 컨테이너 기반 가상화 기술
✅ 어떤 환경에서도 동일하게 실행 가능
✅ Docker 이미지 → 컨테이너 실행
✅ Dockerfile을 사용하여 자동화 가능
✅ Docker Compose로 여러 컨테이너 관리 가능
이제 Docker 개념이 이해됐어? 🤔
더 궁금한 게 있으면 질문해 줘! 🚀🐳
'개발공부 > CS' 카테고리의 다른 글
오버로딩(Overloading) vs. 오버라이딩(Overriding) 차이점 (0) | 2025.02.16 |
---|---|
가비지 컬렉터란? (0) | 2025.02.16 |
API란? (0) | 2025.02.15 |
TDD: 테스트 주도 개발. (0) | 2025.02.15 |
RESTful API? (0) | 2025.02.15 |