본문 바로가기

카테고리 없음

[Docker] 컴포즈 (compose), 도커파일 (Dockerfile)

도커파일 (Dockerfile)

 : Docker 컨테이너 이미지를 생성하기 위한 텍스트 파일입니다. Dockerfile에는 Docker 이미지를 빌드할 때 사용되는 명령어와 설정이 기술되어 있습니다. Dockerfile을 사용하면 개발자는 자신의 애플리케이션을 컨테이너로 패키징하는 과정을 자동화할 수 있습니다.

 

# FROM : 베이스가 되는 기본이미지 OS 또는 런타임 이미지
FROM ubuntu:latest

# 작업 디렉토리 설정
# RUN, ENTRYPONT, CMD가 수행될 기본 디렉토리
WORKDIR /app

# 호스트의 디렉토리를 도커 컨테이너에 연결
VOLUME

# 의존성 설치 
# RUN : 이미지를 빌드할 때 사용하는 커맨드를 설정
RUN apt-get update && apt-get install -y python3

# ADD : 이미지에 호스트의 파일이나 폴더를 추가
ADD

# 애플리케이션 파일 복사
# COPY : ADD와 비슷, 호스트의 파일이나 폴더를 이미지 안으로 복사
COPY . /app

# 환경 변수 설정  $name , ${name}으로 사용가능
ENV PORT=8080

# EXPOSE : 기본포트 설정
EXPOSE $PORT

# 실행 명령 설정
CMD ["python3", "app.py"]

# 도커 이미지가 실행될 때 사용되는 기본 커맨드를 지정
ENTRYPOINT

 

 

${option}

옵션설명예시

 

옵션 설명 예시
`-t, --tag` 이미지에 태그 지정 (이름:버전) `-t myapp:1.0`
`-f, --file` 사용할 Dockerfile 경로 지정 `-f ./Dockerfile.dev`
`--build-arg` 빌드 시 전달할 인자 (ARG) `--build-arg VERSION=1.0
`--no-cache` 캐시 없이 새로 빌드 `--no-cache
`--pull` 항상 최신 베이스 이미지 풀 `--pull
`--progress` 빌드 진행 방식 (auto, plain, tty) `--progress=plain
`--platform` 빌드할 플랫폼 지정 (ex. amd64, arm64) `--platform=linux/amd64
`--target` multi-stage Dockerfile에서 특정 단계까지만 빌드 `--target builder
`--output` 출력 디렉토리 또는 형태 지정 (이미지 아닌 파일로 출력 등) `--output type=local,dest=./out`

 

 

 

빌드

docker build ${option} ${dockerfile directory}

 

 

 

FROM  httpd

COPY index.html /usr/local/apache2/htdocs

 


 

도커컴포즈 (docker-compose)

: Docker Compose는 여러 개의 독립적인 Docker 컨테이너를 사용하여 애플리케이션을 실행하기 위한 도구입니다. 주로 개발, 테스트, 스테이징 환경 등에서 복잡한 애플리케이션을 쉽게 관리하기 위해 사용됩니다. Docker Compose를 사용하면 여러 개의 컨테이너를 정의하고 구성하며, 한 번에 여러 컨테이너를 시작하고 중지할 수 있습니다.

 

일반적으로 Docker Compose는 YAML 파일을 사용하여 애플리케이션의 서비스와 해당 서비스를 실행할 때 필요한 설정을 정의합니다. YAML 파일에는 각 서비스의 이미지, 포트 매핑, 볼륨 마운트 등과 같은 설정이 포함됩니다. 그런 다음 Docker Compose 명령을 사용하여 이 파일을 기반으로 여러 컨테이너를 관리합니다.

 

  정의
image 컨테이너의 이미지를 정의
build Dockerfile의 경로를 지정해서 빌드
dockerfile 도커파일의 명을 다른 명으로 사용할때
ports 바인딩될 포트
volumes 호스트이 지정된 경로로 컨테이너의 볼륨을 마운트
container_name 컨테이너의 이름을 설정
command 컨테이너 실행 후 컨테이너에서 실행시킬 쉘 명령어
environment 환경변수 설정
env_file 환경변수를 파일로 설정
depends_on 컨테이너간 의존관계 설정 ex) DB, APP을 같이 올릴때 DB먼저 올릴 경우..
restart 컨테이너의 재시작관련 설정 // docker restart <컨테이너_ID>

 

 

실행

docker-compose -f ${yaml파일명}  up -d  -p ${프로젝트명}

 

 

 

Dockerfile의 장점:

  1. 단일 컨테이너 관리: Dockerfile을 사용하면 단일 컨테이너를 정의하고 빌드할 수 있습니다. 이는 단일 애플리케이션을 컨테이너화하고 배포하는 데 유용합니다.

  2. 자세한 제어: Dockerfile을 사용하면 컨테이너를 빌드하는 데 필요한 모든 단계를 명시적으로 제어할 수 있습니다. 이를 통해 컨테이너 이미지를 정확하게 커스터마이징할 수 있습니다.

Docker Compose의 장점:

  1. 다중 컨테이너 관리: Docker Compose는 여러 컨테이너로 구성된 애플리케이션을 관리하는 데 특화되어 있습니다. 이를 통해 여러 컨테이너 간의 관계를 쉽게 정의하고 한 번에 시작, 중지 또는 삭제할 수 있습니다.

  2. 간편한 설정: Docker Compose 파일을 사용하면 여러 컨테이너의 설정을 하나의 파일에 정의할 수 있습니다. 이는 환경 변수, 볼륨, 네트워크, 포트 매핑 등을 포함합니다.

  3. 스케일링 및 확장: Docker Compose는 서비스를 확장하고 여러 인스턴스를 실행하는 데 유용합니다. 이를 통해 테스트 또는 프로덕션 환경에서 애플리케이션을 쉽게 확장할 수 있습니다.

version: '3.8'  # 사용할 Docker Compose 버전

services:
  웹서비스이름:
    image: 이미지이름:태그
    container_name: 컨테이너명
    ports:
      - "호스트포트:컨테이너포트"
    volumes:
      - "호스트디렉토리:컨테이너디렉토리"
    environment:
      - KEY=VALUE
    depends_on:
      - 다른서비스이름