picture
  1. Dockerfile

대시보드를 통한 생성

1. 템플릿 선택하기

시작하기 페이지의 언어/플랫폼 카테고리에 접속 또는 ⌘ + K 를 사용하여 docker 를 검색하고 Dockerfile 템플릿을 클릭하세요.

2. 빌드 인자 및 환경 변수 입력하기

저장소 내 Dockerfile에 작성된 명령어에 맞게 빌드 인자 혹은 환경 변수를 입력합니다.

3. 포트 번호 입력하기

서비스가 구동되는 포트 번호를 작성합니다.

4. 저장소 내 Dockerfile 경로 입력하기

배포할 저장소 내에 위치한 Dockerfile의 경로 및 파일명을 작성합니다.


CLI 를 통한 생성

1. 사전준비

아래 가이드에 따라 CLI 를 설치하고 로그인을 진행해주세요.
CLI 설치하기

2. 설정파일 생성

.cloudtype/app.yaml 파일을 생성하세요.

Dockerfile

name: dockerfile
app: dockerfile
options:
ports: 3000
dockerfile: Dockerfile
context:
git:
url: https://github.com/cloudtype-examples/dockerfile.git
branch: main
preset: dockerfile

3. 배포하기

$ ctype apply

참고 예제

1. Node.js - Backend(Express)

  • Github 저장소로 이동

    # 의존성 설치
    FROM node:16-buster
    WORKDIR /app
    COPY package*.json ./
    RUN npm ci --only=production
    ENV NODE_ENV production
    COPY . .
    # node 이미지에 이미 "node"라는 사용자가 uid/gid 1000번으로 생성되어 있음
    USER node
    EXPOSE 3000
    CMD ["npm", "start"]

2. Node.js - Frontend(React)

  • Github 저장소로 이동

    # 프로젝트 빌드
    FROM node:16-buster AS builder
    WORKDIR /app
    COPY package*.json .
    RUN npm ci
    COPY . .
    RUN npm run build
    # Production 런타임 - nginx
    FROM nginxinc/nginx-unprivileged:1.23 AS runner
    WORKDIR /usr/share/nginx/html
    COPY --from=builder /app/build .
    EXPOSE 3000
    CMD ["nginx", "-g", "daemon off;"]

3. Python Flask

  • Github 저장소로 이동

    FROM python:3.9-slim-buster
    ENV PYTHONDONTWRITEBYTECODE=1
    ENV PYTHONUNBUFFERED 1
    ARG UID=1000
    ARG GID=1000
    RUN groupadd -g "${GID}" python \
    && useradd --create-home --no-log-init -u "${UID}" -g "${GID}" python
    WORKDIR /home/python
    COPY --chown=python:python requirements.txt requirements.txt
    RUN pip3 install -r requirements.txt
    # USER 변경은 반드시 pip 패키지 설치 스크립트 이후에 작성되어야 함
    USER python:python
    ENV PATH="/home/${USER}/.local/bin:${PATH}"
    COPY --chown=python:python . .
    ARG FLASK_ENV
    ENV FLASK_ENV=${FLASK_ENV}
    EXPOSE 5000
    # WSGI, 포트 번호, 모듈명 등은 각 소스 코드에 알맞게 수정하여 배포 진행
    CMD ["gunicorn", "-b", "0.0.0.0:5000", "app:app"]

4. Spring Boot

  • Github 저장소로 이동

    # JDK 이미지를 통한 executable jar 빌드
    FROM eclipse-temurin:17-alpine AS build
    RUN apk add --no-cache bash
    WORKDIR /app
    COPY gradlew .
    COPY gradle gradle
    COPY build.gradle settings.gradle ./
    # COPY build.gradle.kts settings.gradle.kts ./ Kotlin인 경우 .kts 확장자 적용
    RUN ./gradlew dependencies --no-daemon
    COPY . .
    RUN chmod +x ./gradlew
    RUN ./gradlew bootJar --no-daemon
    # jar 실행을 위한 JRE 이미지 적용
    FROM eclipse-temurin:17-jre-alpine
    WORKDIR /app
    RUN addgroup -g 1000 worker && \
    adduser -u 1000 -G worker -s /bin/sh -D worker
    COPY --from=build --chown=worker:worker /app/build/libs/*.jar ./main.jar
    USER worker:worker
    EXPOSE 8080
    ENTRYPOINT ["java", "-jar", "main.jar"]

5. Spring Boot(멀티모듈)

  • Github 저장소로 이동

    # JDK 이미지를 통한 executable jar 빌드
    FROM eclipse-temurin:17-alpine AS build
    RUN apk add --no-cache bash
    WORKDIR /app
    COPY gradlew .
    COPY gradle gradle
    COPY build.gradle settings.gradle ./
    # COPY build.gradle.kts settings.gradle.kts ./ Kotlin인 경우 .kts 확장자 적용
    RUN ./gradlew dependencies --no-daemon
    COPY . .
    RUN chmod +x ./gradlew
    RUN ./gradlew bootJar :api:bootJar --no-daemon
    # RUN ./gradlew bootJar :<main 지정 모듈명>:bootJar --no-daemon
    # jar 실행을 위한 JRE 이미지 적용
    FROM eclipse-temurin:17-jre-alpine
    WORKDIR /app
    RUN addgroup -g 1000 worker && \
    adduser -u 1000 -G worker -s /bin/sh -D worker
    COPY --from=build --chown=worker:worker /app/api/build/libs/*.jar ./main.jar
    # COPY --from=build --chown=worker:worker /app/<main 지정 모듈명>/build/libs/*.jar ./main.jar
    USER worker:worker
    EXPOSE 8080
    ENTRYPOINT ["java", "-jar", "main.jar"]
사용에 문제나 어려움이 있다면 디스코드 채널에서 문의하세요.
디스코드 링크