대시보드를 통한 생성
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
- # jar 파일 빌드FROM eclipse-temurin:11 as builderCOPY gradlew .COPY gradle gradleCOPY build.gradle .COPY settings.gradle .COPY src srcRUN chmod +x ./gradlewRUN ./gradlew bootjar# jar 실행# 빌드를 하지 않으므로 JDK가 아닌 JRE를 베이스 이미지로 세팅FROM eclipse-temurin:11-jre as runtimeRUN addgroup --system --gid 1000 workerRUN adduser --system --uid 1000 --ingroup worker --disabled-password workerUSER worker:workerCOPY build/libs/*.jar app.jarENV PROFILE ${PROFILE}EXPOSE 8080ENTRYPOINT ["java", "-Dspring.profiles.active=${PROFILE}", "-jar", "/app.jar"]