Docker

Docker Desktopでマルチコンテナ構成とGitHub Actions CI/CDを実装する手順

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

Docker 環境の準備と基本設定

Docker Desktop をローカルに導入すれば、CLI だけでコンテナ操作が可能になります。本セクションではインストール手順とバージョン確認方法、そしてマルチステージビルドと Compose による複数サービスの連携を行うための基本的なファイル構成を解説します。Docker の公式ツールは自動更新がデフォルトで有効なので、常に最新のエンジンで開発できる点が大きな利点です。

Docker Desktop のインストールとバージョン確認

  1. 公式ダウンロードページ(Docker Desktop ダウンロード – docker.com)から OS に合わせたインストーラを取得し、画面の指示に従ってインストールします。
  2. インストール完了後、ターミナルで以下コマンドを実行し、クライアントとサーバー(Docker Engine)のバージョンが表示されることを確認してください。

ポイント
Docker Desktop は自動更新機能が標準で有効です。Settings → General → Automatically check for updates をオンにしておくと、手動操作なしで新バージョンが適用されます。

マルチステージ Dockerfile と Compose の基本構成

マルチステージビルドは開発時の依存関係を分離し、最終イメージを軽量化します。Compose はサービス間のネットワークやボリュームをコードで管理できるため、本番・ローカルどちらでも同一設定が再利用可能です。

Dockerfile(Node.js アプリの例)

  • ビルドに必要なツールは builder ステージだけに限定し、最終イメージには実行に最低限必要なファイルのみをコピーします。

docker‑compose.yml(Web + PostgreSQL)

  • depends_on により web コンテナはデータベースが起動してから開始します。環境変数で接続情報を注入することで、コード側に設定を書き込む必要がなくなります。

ローカルでのビルド・テストとイメージ管理

ローカルで作成したイメージはマルチプラットフォーム対応かつテスト済みであることを確認してからレジストリへプッシュします。このセクションでは buildx を用いた ARM64/x86 両方へのビルド、コンテナ内部での単体テスト実行方法、そして Docker Hub と Amazon ECR への安全なプッシュ手順を示します。

マルチプラットフォームイメージの作成とタグ付け

docker buildx は追加インストール不要で利用できます。初回はビルダーを作成し、その後にプラットフォーム指定でビルド・プッシュを行います。

コンテナ内部でのユニットテスト実行

ビルドしたイメージを一時コンテナとして起動し、pytest(または任意のテストフレームワーク)を走らせます。テストが成功した場合のみ次工程へ進めるようスクリプトで判定すると CI の信頼性が向上します。

Docker Hub と Amazon ECR へのプッシュ手順

手順 Docker Hub Amazon ECR
認証 docker login(ユーザー名・パスワード) aws ecr get-login-password --region <region> \| docker login --username AWS --password-stdin <account>.dkr.ecr.<region>.amazonaws.com
リポジトリ作成 Web UI で手動作成 aws ecr create-repository --repository-name app --image-scanning-configuration scanOnPush=true
プッシュ docker push yourrepo/app:${TAG} docker push <account>.dkr.ecr.<region>.amazonaws.com/app:${TAG}

ベストプラクティス
- タグは Semantic Versioning(例: v1.2.3)と Git SHA の二重付与を推奨。latest は自動デプロイ専用に限定します。
- ECR では画像スキャンが標準で有効になるため、脆弱性検出も同時に実施できます。


GitHub Actions による CI パイプライン構築

GitHub Actions を利用すればコードのプッシュごとに自動ビルド・テスト・セキュリティスキャン・レジストリ登録までを一貫して実行できます。本節では主要なジョブ設計と、シークレット管理のポイントを具体的に示します。

ワークフロー全体像

  • docker/build-push-action@v5 は公式が推奨する最新版で、マルチプラットフォームとキャッシュ最適化を自動的に行います。
  • 詳細は Docker の公式ドキュメント[^docker-buildx] と GitHub Actions のリファレンス[^github-actions] を参照してください。

シークレット管理のベストプラクティス

種類 保存先 用途
Docker Hub 認証情報 GitHub SecretsDOCKERHUB_USER, DOCKERHUB_TOKEN イメージプッシュ
AWS クレデンシャル GitHub SecretsAWS Parameter Store(暗号化保存) ECR へのログイン、ECS デプロイ
  1. GitHub のリポジトリ設定画面で Settings → Secrets に上記項目を登録します。
  2. 長期的に使用する AWS 認証情報は Parameter Store に SecureString として保存し、aws-actions/amazon-ssm-getparameters@v2 で取得します。


本番環境への自動デプロイ比較

オンプレミス向けの Docker Swarm と、マネージドサービスである Amazon ECS/Fargate の両方に対応したデプロイ手順を示します。どちらも GitHub Actions から同一イメージをプッシュできる点が共通していますが、運用コストやスケーラビリティの観点で特徴が異なります。

Docker Swarm への SSH デプロイ

Swarm は Docker Engine に統合されたオーケストレーション機能です。SSH エージェント転送と docker stack deploy コマンドだけでサービス更新が可能です。

  • stack.yml はローカルの docker-compose.yml と同等の構成で、イメージタグは ${{ github.sha }} を使用します。
  • 公式ドキュメント[^docker-swarm] に詳細な手順が掲載されています。

Amazon ECS/Fargate へのデプロイ

Fargate はサーバーレス型コンテナ実行基盤です。タスク定義の登録とサービス更新だけで新バージョンへ切り替えられます。

  • ecs-task-template.json には Fargate 必要項目(cpu, memory, networkMode: awsvpc 等)を記述しておきます。
  • AWS の公式リファレンス[^aws-ecs] が手順の根拠となります。

ロールバック戦略

手法 Swarm での実装例 ECS/Fargate での実装例
タグベースロールバック docker stack deploy -c stack.yml myapp --with-registry-authimage: yourrepo/app:v1.2.3 に差し替え) aws ecs update-service … --task-definition taskdef-v1.2.3
CI での自動復旧 ビルド失敗時に前回成功 SHA を取得し再デプロイ 同様に if: failure() 条件で直近タグを使用

推奨:すべてのイメージに Semantic VersionGit SHA の二重タグ付与を行い、ロールバック時は人が読めるバージョン(例 v1.2.3)で指定すると管理が楽になります。


運用・トラブルシューティング

デプロイ後の安定運用にはコンテナのヘルスチェックとログの可視化が不可欠です。ここでは Dockerfile への HEALTHCHECK 追加例、各プラットフォーム向けのログドライバ設定、そしてビルド失敗や起動エラー時のデバッグ手順をまとめます。

ヘルスチェックとログ収集

  • アプリが /health エンドポイントで 200 を返さないとコンテナは unhealthy とマークされます。

Swarm のログドライバ(例:CloudWatch)

ECS/Fargate の CloudWatch 設定(タスク定義)

  • 収集したログは Grafana + Loki、あるいは CloudWatch ダッシュボードで可視化し、ERROR キーワードや unhealthy 状態をアラートに紐付けます。

ビルド失敗時のデバッグ手順

  1. 詳細ログ取得
    GitHub Actions の docker/build-push-action@v5debug: true を設定し、ビルドコマンド全体を記録します。
  2. アーティファクト化
    失敗したステップの標準エラー出力を actions/upload-artifact で保存すると、ローカルでも同様に再現可能です。

  1. ローカルでの再現
    docker buildx bake --print を実行し、GitHub Actions が内部的に呼び出すコマンドを確認します。

コンテナ起動エラー時の対処法

  • よくある落とし穴
  • 環境変数未定義 → docker compose config で最終的な設定を確認。
  • ポート競合 → docker ps で既存コンテナのポート使用状況をチェック。

まとめ

  • Docker 環境:公式サイトから Docker Desktop をインストールし、マルチステージ Dockerfile と Compose によるマルチコンテナ構成を作成すれば、ローカル開発がすぐに始められます。
  • ローカルビルド・テストbuildx で ARM64/x86 両方のイメージを生成し、コンテナ内部テストと Semantic Version タグ付与を行った上で Docker Hub または Amazon ECR に安全にプッシュします。
  • CI パイプライン:GitHub Actions の公式アクションだけでコードチェックアウト、Docker 設定、マルチプラットフォームビルド・プッシュ、テスト、Trivy スキャン、条件付きデプロイを自動化できます。シークレットは GitHub Secrets と Parameter Store で一元管理します。
  • 本番デプロイ比較:オンプレミス向けは SSH + docker stack deploy(Swarm)、サーバーレス環境はタスク定義登録と aws ecs update-service(ECS/Fargate)を用います。どちらもタグベースのロールバックが可能です。
  • 運用・トラブルシューティング:Dockerfile に HEALTHCHECK を組み込み、CloudWatch または Loki へログ転送し Grafana で可視化します。ビルド失敗は詳細デバッグ情報のアーティファクト化、起動エラーは docker logs と Compose 設定見直しで迅速に解決できます。

上記手順をそのままリポジトリに組み込めば、Docker を利用した開発・テスト・本番デプロイの全工程が自動化され、信頼性と生産性が大幅に向上します。ぜひ実践してみてください。


参考文献

[^docker-desktop]: Docker Desktop ダウンロードページ – https://www.docker.com/products/docker-desktop
[^docker-buildx]: Docker Buildx ドキュメント – https://docs.docker.com/build/buildx/
[^github-actions]: GitHub Actions リファレンス – https://docs.github.com/actions
[^docker-swarm]: Docker Swarm 公式ガイド – https://docs.docker.com/engine/swarm/
[^aws-ecs]: Amazon ECS / Fargate ドキュメント – https://docs.aws.amazon.com/ecs/latest/developerguide/what-is-amazon-ecs.html

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Docker