티스토리 뷰
Dockerfile과 Docker Compose는 모두 Docker 생태계의 일부이며 서버 구동과 관련이 있지만, 그 역할과 목적에는 중요한 차이점이 있습니다.
Dockerfile
정의
Dockerfile은 Docker Image를 생성하기 위한 레시피 혹은 설계도 같은 것입니다. 이 파일에는 컨테이너가 어떻게 작동해야 하는지에 대한 지시사항이 담겨 있습니다.
역할
Dockerfile은 운영체제, 실행할 코드, 필요한 라이브러리 및 환경 변수 설정 등을 포함하여 특정 애플리케이션을 실행하는 데 필요한 모든 것을 정의합니다.
사용 예시
예를 들어 Python 애플리케이션을 Docker 컨테이너에서 실행하기 위해 필요한 Python 런타임, 코드 복사, 필요한 패키지 설치 등을 Dockerfile에 명시합니다.
FROM openjdk:17
EXPOSE 8080
ARG JAR_FILE=*.jar
COPY ${JAR_FILE} coupon-consumer.jar
ENTRYPOINT ["java","-jar","coupon-consumer.jar"]
Dockerfile에 작성되는 명령 옵션
- FROM: Docker Base Image (기반이 되는 이미지, <이미지 이름> : <태그> 형식으로 설정)
- MAINTAINER: 메인테이너 정보 (작성자 정보)
- RUN: Shell Script 또는 명령을 실행
- CMD: 컨테이너가 실행되었을 때 명령이 실행
- LABEL: 라벨 작성 (docker inspect 명령으로 Label을 확인할 수 있습니다.)
- EXPOSE: 호스트와 연결할 포트 번호를 설정합니다.
- ENV: 환경변수 설정
- ADD: 파일 / 디렉터리 추가
- COPY: 파일 복사
- ENTRYPOINT: 컨테이너가 시작되었을 때 스크립트 실행
- VOLUME: 볼륨 마운트
- WORKDIR: "RUN", "CMD", "ENTRYPOINT" 명령이 실행될 작업 디렉터리
- ARG: Dockerfile 내부 변수
- ONBUILD: 다른 이미지의 Base Image로 쓰이는 경우 실행될 명령 수행
- SHELL: Default Shell 지정
Docker-compose.yml
정의
Docker Compose는 여러 Docker 컨테이너를 정의하고 실행하기 위한 도구입니다. YAML 파일 형식으로 작성됩니다.
역할
Docker Compose는 여러 컨테이너가 서로 어떻게 상호 작용하는지, 네트워크와 볼륨 설정은 어떻게 되어야 하는지 등을 정의합니다. 여러 컨테이너를 동시에 관리하고 구성하는 데 적합합니다.
사용 예시
예를 들어, 하나의 웹 애플리케이션 서버, 데이터베이스 서버, 캐시 서버 등을 각각 다른 컨테이너로 실행하고 이들이 함께 동작하도록 Docker Compose를 사용하여 구성할 수 있습니다.
아래 코드를 살펴보면, coupon-api, coupon-consumer, coupon-redis, coupon-mysql 이름을 가진 4개의 컨테이너들이 정의되어 있으며, 컨테이너 마다 여러 설정 값이 지정되어 있습니다.
- cotainer_name: 컨테이너 이름
- image: 컨테이너 생성 시 사용할 DokcerImage
- ports: 사용할 포트 번호
- links: 해당 컨테이너와 연결할 다른 컨테이너
version: '3.7'
services:
coupon-api:
container_name: coupon-api
image: tnalsa/coupon-api
ports:
- 8080:8080
links:
- mysql
- redis
coupon-consumer:
container_name: coupon-consumer
image: tnalsa/coupon-consumer
ports:
- 8081:8081
links:
- mysql
- redis
redis:
container_name: coupon-redis
image: redis:7.2-alpine
command: redis-server --port 6380
labels:
- "name=redis"
- "mode=standalone"
ports:
- 6380:6380
mysql:
container_name: coupon-mysql
image: ubuntu/mysql:edge
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --explicit_defaults_for_timestamp=1
ports:
- 3306:3306
environment:
- MYSQL_DATABASE=coupon
- MYSQL_USER=abcd
- MYSQL_PASSWORD=1234
- MYSQL_ROOT_PASSWORD=1234
- TZ=UTC
volumes:
- ./mysql/init:/docker-entrypoint-initdb.d
'Server > Docker' 카테고리의 다른 글
[Docker]이미지 압축 파일 저장 및 불러오기 (0) | 2024.09.10 |
---|---|
[Docker]SSH 접속 프로그램을 통해 컨테이너 접속하기 (0) | 2024.09.03 |
[Docker]정적 IP Container 설정하기 (0) | 2024.09.02 |
[Docker]데이터 영속성 보장하기 (0) | 2024.09.02 |
[Docker]도커의 개념 및 핵심 (0) | 2024.09.02 |
- Total
- Today
- Yesterday