Docker
🐳 Docker란?
정의
Docker는 애플리케이션과 실행 환경을 컨테이너로 분리해 배포, 실행, 관리하기 쉽게 만드는 플랫폼이다.
Docker를 사용하면 실행 환경 차이로 생기는 문제를 줄이고, 애플리케이션을 같은 방식으로 실행하기 쉬워진다.
🧩 주요 개념
| 개념 | 설명 |
|---|---|
| Image | 컨테이너 실행에 필요한 파일 시스템과 설정을 담은 템플릿 |
| Container | Image를 기반으로 실제 실행 중인 인스턴스 |
| Dockerfile | 이미지를 만들기 위한 빌드 스크립트 |
| Docker Hub | 이미지를 저장하고 공유하는 공개 저장소 |
| Compose | 여러 컨테이너를 한 번에 정의하고 실행하는 방식 |
⚙️ Docker를 쓰는 이유
- 실행 환경을 일관되게 만들 수 있다.
- 배포와 실행 과정을 단순하게 만들 수 있다.
- 개발, 테스트, 운영 환경을 비슷하게 맞추기 쉽다.
- 서비스와 의존성을 분리해서 관리할 수 있다.
🛠️ Docker 실행 환경 구성
- 가상화 기능을 켠다.
- BIOS 또는 UEFI에서 가상화 기능을 활성화한다.
- Windows에서는 Docker Desktop 실행 조건을 확인한다.
- Docker를 설치한다.
🧱 Dockerfile 예시
정의
Dockerfile은 Docker 이미지를 만들기 위한 빌드 명령 묶음이다.
FROM openjdk:17-jdk-alpine
WORKDIR /app
COPY build/libs/app.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
| 명령어 | 설명 |
|---|---|
FROM |
기반 이미지를 지정한다 |
WORKDIR |
작업 디렉터리를 지정한다 |
COPY |
로컬 파일을 이미지로 복사한다 |
ENTRYPOINT |
컨테이너 시작 시 실행할 명령을 지정한다 |
🧪 docker-compose.yml 예시
정의
Compose는 여러 컨테이너를 YAML 파일 하나로 묶어서 관리하고 실행할 수 있게 해준다.
version: "3.8"
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
environment:
SPRING_PROFILES_ACTIVE: prod
volumes:
- ./logs:/app/logs
db:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpw
MYSQL_DATABASE: appdb
ports:
- "3306:3306"
volumes:
- dbdata:/var/lib/mysql
volumes:
dbdata:
| 항목 | 설명 |
|---|---|
services |
컨테이너 정의 |
build |
Dockerfile 경로 지정 |
image |
사용할 이미지 지정 |
ports |
호스트와 컨테이너 포트 매핑 |
volumes |
데이터 보존 설정 |
environment |
환경 변수 지정 |
🔍 함께 보면 좋은 문서
- Docker Image
- Docker 기반 서버 구성
- Docker를 활용한 NAS 컨테이너 실행
📌 정리
- Docker는 컨테이너 기반 실행 환경을 제공한다.
- Image, Container, Dockerfile, Compose 개념을 함께 이해하면 좋다.
- 개발과 배포 환경을 일관되게 유지하는 데 유리하다.
댓글남기기