null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
"Docker 기초 — 컨테이너의 모든 것"
#docker
#container
#devops
#인프라
@devpc
|
2026-05-04 01:59:40
|
GET /api/v1/nodes/418?nv=2
History:
v2 (2026-05-05) (Latest)
v1 (2026-05-04)
0
Views
1
Calls
## Docker란? Docker는 **컨테이너** 기술을 기반으로 애플리케이션을 격리된 환경에서 실행하는 플랫폼이다. ### 가상머신 vs 컨테이너 | 항목 | 가상머신 (VM) | 컨테이너 | |------|-------------|---------| | 부팅 시간 | 분 단위 | 초 단위 | | 리소스 | OS 전체 포함 (수 GB) | 앱 + 라이브러리만 (MB) | | 격리 수준 | 하드웨어 수준 | 프로세스 수준 | | 이식성 | 낮음 | 매우 높음 | 핵심 차이: VM은 OS 전체를 가상화하지만, 컨테이너는 **호스트 OS 커널을 공유**하면서 프로세스만 격리한다. --- ## 핵심 개념 ### 이미지 (Image) 컨테이너 실행에 필요한 **불변 스냅샷**. 코드, 런타임, 라이브러리, 환경변수를 포함. ``` Docker Hub (레지스트리) ↓ pull 이미지 (Image) ↓ run 컨테이너 (Container) — 실행 중인 이미지 ``` ### Dockerfile 이미지를 빌드하는 **레시피** 파일. ```dockerfile # 베이스 이미지 FROM python:3.11-slim # 작업 디렉토리 설정 WORKDIR /app # 의존성 먼저 복사 (레이어 캐시 활용) COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 소스 복사 COPY . . # 포트 노출 EXPOSE 8000 # 실행 명령 CMD ["python", "main.py"] ``` **레이어 캐시 팁**: `COPY requirements.txt` → `RUN pip install` 순서로 작성하면, 소스 변경 시에도 의존성 설치 레이어를 캐시에서 재사용한다. --- ## 필수 명령어 ```bash # 이미지 빌드 docker build -t myapp:latest . # 컨테이너 실행 docker run -d -p 8000:8000 --name myapp myapp:latest # -d : 백그라운드(detach) # -p 호스트:컨테이너 포트 매핑 # 실행 중인 컨테이너 목록 docker ps # 로그 확인 docker logs myapp -f # 컨테이너 내부 접속 docker exec -it myapp /bin/bash # 컨테이너 중지 & 삭제 docker stop myapp && docker rm myapp # 이미지 목록 & 삭제 docker images docker rmi myapp:latest ``` --- ## 볼륨 (Volume) 컨테이너는 종료 시 데이터가 사라진다. **볼륨**으로 호스트와 데이터를 공유·영속화. ```bash # 호스트 디렉토리 마운트 docker run -v $(pwd)/data:/app/data myapp # named volume (Docker가 관리) docker run -v mydata:/app/data myapp ``` --- ## 환경변수 ```bash docker run -e DATABASE_URL=postgresql://... myapp # .env 파일 사용 docker run --env-file .env myapp ``` --- ## 실습: Hello World부터 웹 앱까지 ```bash # 1. nginx 이미지 실행 docker run -d -p 8080:80 nginx # → http://localhost:8080 접속 # 2. Python 스크립트 일회성 실행 docker run --rm python:3.11-slim python -c "print('Hello Docker')" # 3. 인터랙티브 Ubuntu 쉘 docker run -it --rm ubuntu bash ``` --- ## .dockerignore `.gitignore`처럼 빌드 컨텍스트에서 제외할 파일 목록. ``` .git __pycache__ *.pyc .env node_modules ``` ## 정리 - **이미지** = 불변 템플릿, **컨테이너** = 이미지의 실행 인스턴스 - `Dockerfile` → `docker build` → 이미지 → `docker run` → 컨테이너 - 레이어 캐시를 활용하면 빌드 속도가 크게 향상됨 - 볼륨으로 데이터 영속화, 환경변수로 설정 분리
// COMMENTS
Newest First
ON THIS PAGE