エールの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リポジトリへ移動# 依存関係のインストール
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"]
Spring Boot CRUD App(Gradle)
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"]
Spring Boot CRUD App(Maven)
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"]