Dockerfile 이란?
- Docker 이미지를 만들기 위한 설정 파일
- Docker 컨테이너를 빌드하기 위한 명령어가 포함되어 있다
Dockerfile 기본 구조
FROM ubuntu:latest
MAINTAINER Your Name <your-email@example.com>
RUN apt-get update && apt-get install -y nginx
COPY index.html /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
주요 명령어
- FROM: 사용할 기본 이미지를 선택
- MAINTAINER: 이미지를 만든 사람의 정보를 입력
- WORKDIR: 작업 디렉터리 지정
- RUN: 이미지에 명령을 실행하여 파일을 추가하거나 삭제
- COPY: 로컬 파일을 컨테이너의 지정한 경로로 복사
- EXPOSE: 컨테이너가 노출할 포트를 설정
- CMD: 컨테이너가 실행될 때 실행할 명령을 설정
Docker Compose란?
- Docker Compose는 여러 개의 Docker 컨테이너를 쉽게 정의하고 실행할 수 있는 도구
- 하나의 YAML 파일을 통해 여러 서비스(컨테이너)를 동시에 정의하고 실행할 수 있어, 복잡한 애플리케이션을 관리하는 데 유용
Docker Compose 기본 구조
- docker-compose.yml 파일을 사용
version: '3'
services:
web:
image: my-springboot-app
ports:
- "8080:8080"
networks:
- my-network
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
networks:
- my-network
networks:
my-network:
driver: bridge
주요 Docker Compose 명령어
- docker-compose up: 정의된 서비스를 빌드하고 실행합니다.
- docker-compose down: 실행 중인 컨테이너를 중지하고 네트워크를 제거합니다.
- docker-compose logs: 서비스의 로그를 확인합니다.
- docker-compose build: Docker 이미지를 빌드합니다.
Docker Compose 파일 구성 요소
- version: Docker Compose 파일의 버전. 보통 3이나 3.8을 사용합니다.
- services: 애플리케이션에서 실행할 여러 컨테이너를 정의합니다.
- image: 사용할 Docker 이미지를 지정합니다.
- ports: 호스트와 컨테이너 간의 포트를 매핑합니다.
- environment: 컨테이너 내부 환경 변수를 설정합니다.
- networks: 컨테이너 간의 네트워크를 정의합니다.
Dockerfile과 Docker Compose 함께 사용하는 예시
- Dockerfile을 사용해서 Spring Boot 애플리케이션을 빌드하고,
- MySQL과 함께 실행하는 Docker Compose 설정
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- "3306:3306"