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"
서버도 정상적으로 운영되고 접속도 정상적으로 되는 것을 볼 수 있다.
'한화시스템 Beyond SW Camp > 데브옵스' 카테고리의 다른 글
[Kubernetes] 개념 및 환경 구축 (0) | 2025.03.18 |
---|---|
[Docker] Dockerfile로 자동 빌드&디버깅 (Edit Configuration) (0) | 2025.03.13 |
[Docker] 가상머신에 도커 설치하기 (0) | 2025.03.11 |
[Docker] Docker Compose (0) | 2025.03.10 |
[Docker] Docker 개념 및 설치 (0) | 2025.03.10 |