docker-build-deploy について
docker-build-deploy は、Docker イメージのビルド、GHCR へのプッシュ、サーバーへのデプロイを行う GitHub Actions ワークフローを生成するスキルです。Node.js プロジェクトをデプロイする開発者向けで、最適化した Dockerfile も作成できます。
主な機能
- 01Node.js プロジェクトの検出
- 02最適化された Dockerfile の生成
- 03GHCR ビルド・プッシュ用ワークフローの作成
- 04SSH によるサーバーデプロイ
- 05ポートと env ファイルの設定
- 06GitHub Secrets 設定の案内
活用シーン
- 01Node.js プロジェクトのコンテナデプロイ設定
- 02イメージの GHCR への自動ビルドとプッシュ
- 03SSH 経由でサーバーへイメージをデプロイ
- 04デプロイへのヘルスチェックと非 root 実行の追加
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ wu529778790/ shenzjd-skills --skill docker-build-deployインストール後、Claude Code で/docker-build-deployを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.mdtemplates/docker-deploy.ymlDockerfile.nodejs詳細
Docker のビルドとデプロイ
Docker のビルド、GHCR へのプッシュ、サーバーへのデプロイを行う GitHub Actions ワークフローをワンステップで生成します。
概要
Docker CI/CD ワークフロー全体を自動生成します。イメージのビルド → GHCR へのプッシュ → サーバーへの SSH デプロイを行います。最適化された Dockerfile(マルチステージビルド、非 root ユーザー、ヘルスチェック)と GitHub Actions ワークフローテンプレートが含まれています。
使用する場面
- プロジェクトをコンテナ化してデプロイしたい場合
- Docker イメージを自動的にビルドする GitHub Actions が必要な場合
- Docker、GHCR、コンテナのデプロイ、CI/CD について言及している場合
/docker-build-deployを入力した場合- 継続的デプロイのパイプラインを設定したい場合
- コンテナレジストリにイメージをプッシュしたい場合
- SSH 経由でリモートサーバーへのデプロイを自動化したい場合
- 既存の Dockerfile をマルチステージビルドで最適化したい場合
- コンテナのデプロイにヘルスチェックを追加したい場合
使用しない場面:
- Dockerfile の作成だけを希望している場合
- Kubernetes でデプロイする場合(別のワークフローを使用します。
kubectlまたは Helm をご検討ください) - GitHub Actions を使用していない場合(GitLab CI、CircleCI などをご検討ください)
- AWS ECS/EKS、Google Cloud Run、Azure Container Instances にデプロイしたい場合(別のワークフローを使用します)
基本パターン
ステップ 1:情報を収集する
対話形式で次の情報を尋ねます。port(コンテナ内のポート。デフォルトは 3000)、host_port(外部に公開するポート。デフォルトは port と同じ)、env_file(サーバー上の env ファイルのパス。任意)。
プロジェクトの種類を自動検出します。package.json があれば Node.js と判定します(現在サポートしているプロジェクトの種類はこれだけです)。既存の Dockerfile がある場合は生成をスキップします。
ステップ 2:Dockerfile を生成する(必要な場合)
最適化された Node.js 用 Dockerfile を生成します。マルチステージビルド、非 root ユーザー、ヘルスチェックを含みます。テンプレートは templates/Dockerfile.nodejs を参照してください。
ステップ 3:ワークフローを生成する
templates/docker-deploy.yml からワークフローを生成し、{{PORT}}(コンテナのポート)、{{HOST_PORT}}(外部ポート)、{{ENV_FILE}} の各変数を置換します。
build-and-push ジョブ: GHCR にログイン → Buildx でビルド → プッシュ(タグ:latest + sha)→ GHA キャッシュ
deploy ジョブ: SSH 接続 → イメージをプル → 古いコンテナを停止 → 新しいコンテナを起動(env ファイルに対応)→ 古いイメージをクリーンアップ
ステップ 4:Secrets の設定を案内する
GitHub Settings → Secrets で DEPLOY_HOST、DEPLOY_USER、DEPLOY_SSH_KEY(サーバーの秘密鍵)を設定する必要があることをユーザーに伝えます。
セキュリティ:パスワードではなく SSH key を使用します(パスワードログインは総当たり攻撃のリスクがあり、CI に平文で保存されます)。サーバーがパスワード認証のみをサポートしている場合は、
password: ${{ secrets.DEPLOY_PASSWORD }}に変更できますが、おすすめしません。
クイックリファレンス
/docker-build-deploy
/docker-build-deploy --port 8080
/docker-build-deploy --port 8080 --env-file /opt/app/.env
| パラメーター | 説明 | デフォルト値 |
|---|---|---|
--port | コンテナ内のアプリケーションポート | 3000 |
--host-port | サーバーで外部に公開するポート | --port と同じ |
--env-file | サーバー上の env ファイルのパス | 空 |
よくある間違い
| 間違い | 正しい方法 | 理由 |
|---|---|---|
latest のみのタグを使用する | latest と ${{ github.sha }} の両方をタグ付けする | ロールバックが容易になります |
packages: write 権限を設定しない | permissions: packages: write を宣言する | GHCR へのプッシュに必要です |
| deploy でコンテナの存在を確認しない | 先に docker stop と docker rm を実行する | ポートの競合を防ぎます |
| 古いイメージをクリーンアップしない | デプロイ後に docker image prune -f を実行する | ディスク容量を確保します |
| Dockerfile で root として実行する | USER node または非 root ユーザーを追加する | コンテナセキュリティのベストプラクティスです |
| Secrets を workflow にハードコードする | ${{ secrets.XXX }} を使用して参照する | シークレットが漏えいするリスクがあります |
| Docker BuildKit のキャッシュを設定しない | GitHub Actions のキャッシュを使うように cache-from / cache-to を設定する | 毎回すべてをビルドすると時間がかかりすぎます |
| ビルド失敗後のロールバックを処理しない | デプロイ後にヘルスチェックを検証する | デプロイに失敗すると、誤ったバージョンが公開される可能性があります |
| パスワードで SSH デプロイする | SSH key(DEPLOY_SSH_KEY)を使用する | パスワード総当たり攻撃のリスクが高いためです |
| サーバーのアーキテクチャと異なるプラットフォームを指定する | サーバーのアーキテクチャに合わせて linux/amd64 または linux/arm64 を指定する。マルチプラットフォームビルドの場合は linux/amd64,linux/arm64 と記述する | 対象アーキテクチャが一致しないと、実行に失敗します |