Dockerイメージ内の構造や設定が期待通りかどうかを検証する container-structure-test を知りました。
せっかくなので、試してみました。
まず、container-structure-test をインストールします。MacOSの場合、Homebrewを使用すると簡単にインストールできます。
brew install container-structure-test次に、テスト対象のDockerイメージをビルドするために、以下の内容のDockerfileを準備し、イメージをビルドします。
## ./Dockerfile
## @see: https://github.com/silverbirder/testcontainers-nextjs/blob/main/Dockerfile
## ...
##### RUNNER
FROM --platform=linux/amd64 node:18.17-alpine3.18 AS runner
WORKDIR /app
ENV NODE_ENV production
## ENV NEXT_TELEMETRY_DISABLED 1
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/public ./public
COPY --from=builder /app/package.json ./package.json
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT 3000
CMD ["node", "server.js"]ビルドコマンドは以下の通りです。
docker build . -t app:latestこのコマンドは、タグ名を app:latest としてDockerイメージをビルドします。
container-structure-test は、ビルドしたDockerイメージに対して様々なテストを実行することができます。
以下のコマンドを実行することでテストを開始できます。
container-structure-test test \
--image app:latest \
--platform linux/amd64 \
--config config.ymlconfig.yml には、実行したいテストの設定を記述します。以下はその例です。
## config.yml
schemaVersion: "2.0.0"
commandTests:
- name: "cat server.js"
command: "cat"
args: ["server.js"]
expectedOutput: [".*startServer.*"]
fileContentTests:
- name: "package.json"
expectedContents: ["testcontainers-nextjs"]
path: "/app/package.json"
fileExistenceTests:
- name: "package.json"
path: "/app/package.json"
shouldExist: true
permissions: '-rw-r--r--'
uid: 1001
gid: 1001
metadataTest:
envVars:
- key: PORT
value: 3000
- key: NODE_ENV
value: production
exposedPorts: ["3000"]
cmd: ["node", "server.js"]
workdir: "/app"
user: "nextjs"
## licenseTests:
## - debian: true
## files: ["/foo/bar", "/baz/bat"]container-structure-test で実行できるテストには、以下のような種類があります。
詳しくは、container-structure-test GitHub リポジトリ をご確認ください。
commandTests は、Dockerコンテナを作成して、CMDを実行してテストするようです。 エラーやワーニング、セキュリティなどのログが発生しないことを確認するのはよさそうです。
fileContentTests は、何に使えそうか思いつかなかったです。
fileExistenceTests は、permissionsやuid,gidを確認できるので、許可してはいけないものをチェックするのによさそうです。
metadataTest は、アプリに必要な環境変数を正規表現でテストするのは良さそうです。
licenseTests は、何に使えそうか思いつかなかったです。
container-structure-test は、Dockerイメージが期待する仕様を満たしているかを自動で検証するためのツールです。
この記事で紹介した基本的な使い方とテストの例を参考に、安全で信頼性の高いコンテナ環境の構築に役立ててください。
タグ「テスト」の記事
Web のフロントエンド実装において、次のようなミスによってデザイン崩れを起こしてしまったことはありませんか。 flex-shrink の指定を忘れて、要素が押しつぶされてしまった z-index の指定を間違えて、要素が意図せず前面(また
AIの進化によって、プロダクションコードに対するテストコードは、以前と比べて格段に書きやすくなったと感じています。 単体テストに関する基本的なお作法については、以前に以下の記事で整理しました。 興味があれば、参考として読んでもらえると嬉しい
2026-01-09
はじめに Playwright で E2E テストを書く際、playwright codegen や、近年では Playwright MCP を利用して、テストコードの雛形を作成することが多いと思います。 ただし、生成したテストコードが正し
2025-12-26
タグ「クラウドインフラ」の記事
BigQuery、皆さん使っていますか? 私は、業務でBigQueryを使ったデータ構築をしています。品質担保のため、BigQueryのSQLに対してテストをしたいと考えています。本記事では、BigQueryだけで完結し、かつ、Mockデータを差し替え可能なユニットテスト手法について、紹介します。
TikTokへスクレイプするバッチをGCP上で構築しました。GCP構築のシステム設計話と、その構築時に、ハマったことを共有します。
2020年3月頃からコロナが流行りだし、もう12月になります。働き方が大きく変わり、リモートワークが当たり前の時代となりました。エンジニアの働き方も同様に変わりました。そこで、今回はCloud IDEというものを紹介しようと思います。
2020-12-12