본문 바로가기
한화시스템 Beyond SW Camp/데브옵스

[Docker] Dockerfile 스크립트로 이미지 만들기 & 배포

by taeh00n 2025. 3. 11.

Dockerfile 스크립트로 이미지 만들기

Dockerfile 스크립트를 작성하고 이 스크립트를 빌드해 이미지를 만드는 방법이다.

 

주요 Dockerfile 인스트럭션

인스트럭션 내용
FROM 토대가 되는 이미지를 지정
ADD 이미지에 파일이나 폴더를 추가
COPY 이미지에 파일이나 폴더를 추가
RUN 이미지를 빌드할 때 실행할 명령어를 저장
CMD 컨테이너를 실행할 때 실행할 명령어를 지정
ENTRYPOINT 컨테이너를 실행할 때 실행할 명령어를 강제 지정
ONBUILD 이 이미지를 기반으로 다른 이미지를 빌드할 때 실행할 명령어를 지정
EXPOSE 이미지가 통신에 사용할 포트를 명시적으로 지정
VOLUME 퍼시스턴시 데이터를 저장할 경로를 명시적으로 지정
ENV 환경변수를 정의
WORKDIR RUN, CMD, ENTRYPOINT, ADD, COPY에 정의된 명령어를 실행하는 작업 디렉터리를 지정
SHELL 빌드 시 사용할 셸을 변경
LABEL 이름이나 버전, 저작자 정보를 설정
USER RUN, CMD, ENTRYPOINT에 정의된 명령어를 실행하는 사용자 또는 그룹을 지정
ARG docker build 커맨드를 사용할 떄 입력받을 수 있는 인자를 선언
STOPSIGNAL docker stop 커맨드를 사용할 떄 컨테이너 안에ㅐ서 실행중인 프로그램에 전달되는 시그널을 변경
HEALTHCHECK 컨테이너 헬스체크 방법을 커스터마이징

 

예시 코드

FROM    openjdk:17-ea-slim-buster
EXPOSE  8080
ADD     ./backend/cth_test_backend-0.0.1-SNAPSHOT.jar   /app.jar
CMD     java -jar /app.jar
FROM    nginx:latest
EXPOSE  80
COPY     ./frontend/dist  /usr/share/nginx/html
COPY     ./frontend/default.conf  /etc/nginx/conf.d/default.conf

로컬에 Docker 이미지 생성하기

docker build --tag xogns0518/3tierback:1.0	./
docker build --tag xogns0518/3tierfront:1.0	./

각각 명령어 실행시키기

 

옵션/인자 설명
docker build Docker 이미지를 빌드하는 명령어
--tag 또는 -t 생성할 이미지의 이름 및 태그 지정
xogns0518/3tierback:1.0 xogns0518/3tierback이라는 이미지 이름과 1.0 버전 태그
./ 현재 디렉토리에 있는 Dockerfile을 기반으로 빌드

 

Docker 이미지 배포하기

레포지토리 생성

이미지 명과 같은 레포지토리를 생성해준다.

Push

docker push xogns0518/3tierback:1.0
docker push xogns0518/3tierfront:1.0

각각 Push 해준다

새로고침을 하면 이미지가 생성된 게 보인다. = Docker Hub에서 다운 가능

=> 다른 사람들이 다운받을 수 있게 배포 완료

Compose 파일로 실행해보기

https://taeh00n.tistory.com/entry/Docker-Docker-Compose

 

[Docker] Docker Compose

Docker Compose : 여러 개의 컨테이너를 한 번에 정의하고 관리할 수 있는 도구 보통 애플리케이션은 데이터베이스, 백엔드, 프론트엔드 등 여러 컨테이너로 구성되는데, 이를 하나의 docker-compose.yml

taeh00n.tistory.com

services:
  nginx:
    image: xogns0518/3tierfront:1.0
    ports:
      - "80:80"

  backend:
    image: xogns0518/3tierback:1.0
    depends_on:
      - database
    environment:
      - DB_URL=database:3306/web
      - DB_ID=root
      - DB_PASSWORD=qwer1234
    ports:
      - "8080:8080"

  database:
    image: mariadb:latest
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MARIADB_ROOT_PASSWORD=qwer1234
      - MARIADB_DATABASE=web
    ports:
      - "3306:3306"

 

서버도 정상적으로 운영되고 접속도 정상적으로 되는 것을 볼 수 있다.