Back-End

Docker 이미지 생성 및 컴포즈

Meluu_ 2025. 7. 9. 14:08

Dockerfile

직접 이미지를 생성할 수 있게 해주는 파일

 

명령어

FROM [이미지명]:[태그명]

COPY [호스트 컴퓨터에 있는 복사할 파일의 경로] [컨테이너 파일 위치 경로]

ENTRYPOINT [명령문1, 명령문2, 명령문..]

RUN [명령문]

WORKDIR [작업 디렉토리로 사용할 절대 경로]

EXPOSE [포트번호]

 

FROM : 베이스 이미지 생성한다. 

베이스 이미지 : 초기 기본 세팅, 쉽게 말해서 기본 프로그램 느낌이다.

JAVA에 한해서는 JDK가 베이스이미지가 되겠다.

 

COPY : 호스트 파일에 있는 파일을 컨테이너에 복사

 

ENTRYPOINT : 컨테이너 생성시 최초 실행때 수행하는 명령어

 

RUN : 이미지 생성과정에서 명령어를 실행시켜야 할 때 사용

ex) npm install, apt update, apt install 등

 

WORKDIR : 작업 디렉터리로 Dockerfile을 통해 생성되는 파일들을 특정 폴더에 정리해 관리가 용이, 컨테이너 기반 위치 

 

EXPOSE :  컨테이너 내부 사용 포트 문서화

 

 

Docker Compose

여러 개의 Docker 컨테이너들을 하나의 서비스로 정의하고 관리

한 번에 여러개 컨테이너를 띄울 수 있고,

상태 체크 등으로 의존관계를 설정할 수 있다.

또한 컨테이너 실행시 필요한 명령어들을 컴포즈에 미리 입력할 수 있음

 

compose.yml 로 yml 파일 형식이다.

 

services:         // 하나의 컨테이너 정의
  main-server:    // 서비스 정의 
    build: .      // 현재 디렉토리에 있는 Dockerfile을 사용해 이미지 빌드
    ports:        // 포트 
      - 8080:8080
    depends_on:                   // 의존관계  아래 설정한 조건들이 참일때, 해당 서비스가 실행됨
      mysql-db:                   // mysql-db 서비스가 정상상태일 때
        condition: service_healthy
      redis-cache-server:
        condition: service_healthy


  mysql-db:
    image: mysql:8.4.5
    environment:                   // 환경 변수 설정 
      MYSQL_ROOT_PASSWORD: 1234
      MYSQL_DATABASE: zypt
    volumes:                       // 볼륨 설정 
      - ./mysql_data:/var/lib/mysql
    ports:
      - 3307:3306
    healthcheck:                  // 정상상태 체크 
      test: ["CMD", "mysqladmin", "ping"] // Mysql에 ping 명령을 보내 살아 있는지 체크
      interval: 5s               // 5초마다 체크
      retries: 10                // 10번 시도

  redis-cache-server:
    image: redis
    ports:
      - 6379:6379
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      retries: 10

 

'Back-End' 카테고리의 다른 글

Docker 기본 개념  (0) 2025.07.02