Skip to main content
エールのDockerfileテンプレートを活用して、Dockerfileを簡単にデプロイできます。
エールのテンプレート/プリセットは、効率的なリソース管理のため、最小限のライブラリのみを使用します。 Windows、 Chromeライブラリなど、デフォルトで提供されていないライブラリを使用する場合は、サンプルコードを参考にDockerfileを作成してデプロイしてください。

リポジトリとテンプレートの選択

ダッシュボードの または ⌘ + K で生成されるデプロイモーダルで Dockerfileテンプレートを選択し、続くドロップダウンメニューから連携されたGitHubアカウントのリポジトリを選択するか、Git URLタブでGitリポジトリURLを入力してください。

デプロイ設定とデプロイ

基本設定

  • Environment variables(ENV) : コンテナ実行時に参照される環境変数
  • Build arguments(ARG) : イメージビルド時に参照される引数
  • Port : コンテナが実行されるポート。docker run-p, --publish オプションに対応
  • Health Check : コンテナの状態を検証するエンドポイント
  • Start commands : コンテナ起動コマンド

詳細オプション

  • Dockerfile text : Dockerfileの全内容を入力
  • Build Labels(LABEL) : ビルドする際のバージョン、ライセンスなどの追加情報
  • uid : コンテナでプロセスを実行するユーザーの固有識別子(デフォルト値1000)
  • gid : コンテナでプロセスが属するグループの固有識別子(デフォルト値1000)
  • Update strategy
    • Rolling Update : 新バージョンをデプロイ後、既存ポッドを終了。可用リソース確保必要
    • Recreate : 既存ポッドを終了後、新バージョンを作成・起動。ダウンタイム発生
  • Shell : コンテナ実行後に実行するシェル(sh、bash、zshなど)

リソース設定とデプロイ

  • リソースタイプオンデマンドとスポットリソースから選択
  • CPU:サービスで利用可能なvCPUの上限を設定。最小構成時は0.1 vCPUを割り当て
  • メモリ:サービスで利用可能なメモリの上限を設定
  • レプリカ:設定した数に応じサービスを水平スケーリングし、負荷分散と可用性確保
  • デプロイデプロイをクリック
リソース制限によりデプロイできない場合は、スペースとリソースの管理ページを参照してスペースにリソースを追加してください。

ログとターミナル

サービスカードまたはサービスページのアイコンをクリックすると、デプロイ/実行ログの確認やターミナルへのアクセスできます。

メトリクス

サービスページのメトリクスタブでサービスのメトリクスを確認できます。

再デプロイ(更新)

コードの変更やリソース設定の更新がある場合は、サービスページの設定タブ下部にあるデプロイボタンをクリックして、変更を反映した新しいデプロイを実行できます。
デプロイ自動化のためのGitHub Actions適用については、GitHub Actionsページをご参照ください。

ロールバック(復元)

サービスページのデプロイ履歴タブから、以前のバージョンへロールバックできます。
ロールバック前に、対象バージョンのコミットメッセージを必ず確認してください。

言語別サンプルコード

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"]
</Accordion>
<Accordion title="React">
[Githubリポジトリへ移動](https://github.com/cloudtype-examples/docker-node-fe)
```dockerfile
# プロジェクトビルド
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;"]
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"]
Githubリポジトリへ移動
# JDKイメージを使用した実行可能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"]
Githubリポジトリへ移動
# JDKイメージを使用した実行可能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 :<メインモジュール名>: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/<メインモジュール名>/build/libs/*.jar ./main.jar

USER worker:worker

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "main.jar"]
Githubリポジトリへ移動
# ビルド
FROM eclipse-temurin:17-alpine AS build
RUN apk add --no-cache bash

WORKDIR /app

COPY gradlew .
COPY gradle gradle
COPY build.gradle.kts settings.gradle.kts ./

RUN ./gradlew dependencies --no-daemon

COPY . .

RUN chmod +x ./gradlew

RUN ./gradlew build --no-daemon -x test


# ランタイム
FROM eclipse-temurin:17-jre-alpine AS runtime
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

ENV PROFILE=${PROFILE}

EXPOSE 8080

ENTRYPOINT ["java", "-Dspring.profiles.active=${PROFILE}", "-jar", "main.jar"]
Githubリポジトリへ移動
# ビルド
FROM eclipse-temurin:17-alpine AS build
RUN apk add --no-cache bash

WORKDIR /app

COPY mvnw .
COPY .mvn .mvn
COPY pom.xml .

RUN ./mvnw dependency:go-offline -B

COPY . .

RUN chmod +x ./mvnw

RUN ./mvnw package -DskipTests


# ランタイム
FROM eclipse-temurin:17-jre-alpine as runtime

WORKDIR /app

RUN addgroup -g 1000 worker && \
    adduser -u 1000 -G worker -s /bin/sh -D worker

COPY --from=build --chown=worker:worker /app/target/*.jar ./main.jar

USER worker:worker

ENV PROFILE=${PROFILE}

EXPOSE 8080

ENTRYPOINT ["java", "-Dspring.profiles.active=${PROFILE}", "-jar", "main.jar"]
I