대시보드를 통한 생성
1. 템플릿 선택하기
시작하기 페이지의 언어/플랫폼 카테고리에 접속 또는 ⌘ + K
를 사용하여 docker
를 검색하고 Dockerfile
템플릿을 클릭하세요.
2. 빌드 인자 및 환경 변수 입력하기
저장소 내 Dockerfile에 작성된 명령어에 맞게 빌드 인자 혹은 환경 변수를 입력합니다.
3. 포트 번호 입력하기
서비스가 구동되는 포트 번호를 작성합니다.
4. 저장소 내 Dockerfile 경로 입력하기
배포할 저장소 내에 위치한 Dockerfile의 경로 및 파일명을 작성합니다.
CLI 를 통한 생성
1. 사전준비
아래 가이드에 따라 CLI 를 설치하고 로그인을 진행해주세요.
CLI 설치하기
2. 설정파일 생성
.cloudtype/app.yaml
파일을 생성하세요.
Dockerfile
name: dockerfileapp: dockerfileoptions:ports: 3000dockerfile: Dockerfilecontext:git:url: https://github.com/cloudtype-examples/dockerfile.gitbranch: mainpreset: dockerfile
3. 배포하기
$ ctype apply
참고 예제
1. Node.js - Backend(Express)
- # 의존성 설치FROM node:16-busterWORKDIR /appCOPY package*.json ./RUN npm ci --only=productionENV NODE_ENV productionCOPY . .# node 이미지에 이미 "node"라는 사용자가 uid/gid 1000번으로 생성되어 있음USER nodeEXPOSE 3000CMD ["npm", "start"]
2. Node.js - Frontend(React)
- # 프로젝트 빌드FROM node:16-buster AS builderWORKDIR /appCOPY package*.json .RUN npm ciCOPY . .RUN npm run build# Production 런타임 - nginxFROM nginxinc/nginx-unprivileged:1.23 AS runnerWORKDIR /usr/share/nginx/htmlCOPY /app/build .EXPOSE 3000CMD ["nginx", "-g", "daemon off;"]
3. Python Flask
- FROM python:3.9-slim-busterENV PYTHONDONTWRITEBYTECODE=1ENV PYTHONUNBUFFERED 1ARG UID=1000ARG GID=1000RUN groupadd -g "${GID}" python \&& useradd --create-home --no-log-init -u "${UID}" -g "${GID}" pythonWORKDIR /home/pythonCOPY requirements.txt requirements.txtRUN pip3 install -r requirements.txt# USER 변경은 반드시 pip 패키지 설치 스크립트 이후에 작성되어야 함USER python:pythonENV PATH="/home/${USER}/.local/bin:${PATH}"COPY . .ARG FLASK_ENVENV FLASK_ENV=${FLASK_ENV}EXPOSE 5000# WSGI, 포트 번호, 모듈명 등은 각 소스 코드에 알맞게 수정하여 배포 진행CMD ["gunicorn", "-b", "0.0.0.0:5000", "app:app"]
4. Spring Boot
- # JDK 이미지를 통한 executable jar 빌드FROM eclipse-temurin:17-alpine AS buildRUN apk add --no-cache bashWORKDIR /appCOPY gradlew .COPY gradle gradleCOPY build.gradle settings.gradle ./# COPY build.gradle.kts settings.gradle.kts ./ Kotlin인 경우 .kts 확장자 적용RUN ./gradlew dependencies --no-daemonCOPY . .RUN chmod +x ./gradlewRUN ./gradlew bootJar --no-daemon# jar 실행을 위한 JRE 이미지 적용FROM eclipse-temurin:17-jre-alpineWORKDIR /appRUN addgroup -g 1000 worker && \adduser -u 1000 -G worker -s /bin/sh -D workerCOPY /app/build/libs/*.jar ./main.jarUSER worker:workerEXPOSE 8080ENTRYPOINT ["java", "-jar", "main.jar"]
5. Spring Boot(멀티모듈)
- # JDK 이미지를 통한 executable jar 빌드FROM eclipse-temurin:17-alpine AS buildRUN apk add --no-cache bashWORKDIR /appCOPY gradlew .COPY gradle gradleCOPY build.gradle settings.gradle ./# COPY build.gradle.kts settings.gradle.kts ./ Kotlin인 경우 .kts 확장자 적용RUN ./gradlew dependencies --no-daemonCOPY . .RUN chmod +x ./gradlewRUN ./gradlew bootJar :api:bootJar --no-daemon# RUN ./gradlew bootJar :<main 지정 모듈명>:bootJar --no-daemon# jar 실행을 위한 JRE 이미지 적용FROM eclipse-temurin:17-jre-alpineWORKDIR /appRUN addgroup -g 1000 worker && \adduser -u 1000 -G worker -s /bin/sh -D workerCOPY /app/api/build/libs/*.jar ./main.jar# COPY --from=build --chown=worker:worker /app/<main 지정 모듈명>/build/libs/*.jar ./main.jarUSER worker:workerEXPOSE 8080ENTRYPOINT ["java", "-jar", "main.jar"]