Contents
GitHub ActionsとDockerによる自動デプロイの実現意義
現代のWeb開発では、CI/CD(継続的インテグレーション・継続的デリバリー)が不可欠です。特に、マルチプラットフォーム対応やVPS環境へのスムーズなデプロイは、アプリケーションの運用効率を劇的に向上させるポイントです。GitHub ActionsとDockerを組み合わせることで、開発チームはコード変更から本番環境への自動化フローを構築可能となり、手作業によるエラーやリリース遅延を排除できます。
この記事では、Dockerイメージのビルド・ghcr.ioへの配信・VPSでのDocker Composeによるデプロイまでの全工程を具体的に解説します。対象読者はWeb開発者およびDevOpsエンジニアで、最新の技術動向に基づいた実践的な手順を提供します。
準備する環境と前提知識
GitHub ActionsでDocker自動デプロイを構築するには、いくつかの準備が必要です。事前に確認・整えることで、後続の設定がスムーズに進みます。
GitHubアカウントとリポジトリの作成
- Actionsタブを使用するために、GitHub Actionsへのアクセス権を持つ必要があります。
- リポジトリにはDockerfileや.github/workflows/ディレクトリが含まれている必要があります。
VPS環境の基本構成確認
VPSでの運用には以下の要素を前提としています:
- SSH接続可能な状態(秘密鍵の管理も含む)
- Docker Engineおよびdocker-composeがインストール済み
- GitHub Actionsからの接続に使用するユーザーが存在し、適切な権限が付与されている
DockerおよびGitHub Actionsの基礎理解
本記事ではDockerfileやDocker Composeファイルの基本構文を前提とします。GitHub Actionsでのワークフロー設定はYAMLによる定義に基づくため、CI/CDの概念に慣れておくと理解が深まります。
GitHub ActionsでのDockerイメージビルド手順
GitHub ActionsでDockerイメージを自動でビルドし、ghcr.ioに配信するには、ワークフローファイル(main.yaml)を作成します。ここでは、ステップバイステップでそのプロセスを解説します。
ワークフローファイル(main.yaml)の基本構造
GitHub ActionsはYAMLファイルを使ってジョブを定義します。主な要素は以下の通りです:
- name: ジョブ名
- on: トリガーイベント(例: push, pull_request)
- jobs: 実行するタスク群
- steps: 各タスクの詳細
.github/workflows/main.yamlファイル作成例
以下は、Dockerイメージをビルドしghcr.ioにプッシュするワークフローの一例です:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
name: Build and Push Docker Image on: push: branches: [main] pull_request: branches: [main] jobs: build-and-push: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Build and push multi-arch image uses: docker/build-push-action@v5 with: context: . platforms: linux/amd64,linux/arm64 push: true registry: ghcr.io repository: your-org/your-repo tags: latest |
この設定では、Buildxによるマルチアーキテクチャのビルドとghcr.ioへの配信を実現しています。
ghcr.ioへのマルチアーキテクチャ配信設定
GitHub Container Registry(ghcr.io)は、Dockerイメージをストレージして公開するためのサービスです。特に、ARM64やAMD64など複数のプラットフォームに対応したマルチアーキテクチャイメージを扱える点が特徴です。
BuildKitとdocker buildxとは?
- BuildKit: Dockerのビルドプロセスを高速化・柔軟化する実験的なコンポーネント。
- docker buildx: BuildKitを活用し、マルチアーキテクチャ対応など複雑なビルド環境を構築するためのツール。
多プラットフォームイメージのパッケージング手順
Docker Buildxは、以下のような処理を自動的に行います:
- 指定されたplatforms(例: linux/amd64, linux/arm64)に合わせたビルド
- スリムなマニフェストファイルの生成(マルチアーキテクチャ対応)
|
1 2 3 |
docker buildx create --name multiarch-builder docker buildx use multiarch-builder |
上記コマンドで、Buildxを有効化できます。これにより、ghcr.ioに送信されるイメージは、自動的にマルチアーキテクチャ対応されます。
VPS環境での自動デプロイフロー構築
VPS環境における自動デプロイには、GitHub ActionsからSSHで接続し、Docker Composeファイルを更新・再起動する手順が必要です。以下にその具体的な手順を示します。
SSH接続設定と秘密鍵管理
- VPSへのアクセスに使用する秘密鍵はGitHub Secretsに保存します。
- GitHub ActionsでSSH接続を行う際には、
ssh-agentやssh-addコマンドを使用して秘密鍵を認証できます。
Docker Composeとの連携方法
Docker Composeの自動更新フローでは以下の工程が一般的です:
- 旧バージョンのコンテナとサービスを停止
- 新しいDockerイメージをpullし、
docker-compose up -dで起動 - サービスのステータスを確認
以下は、GitHub Actions内でDocker Composeファイルを更新するサンプルコードです:
|
1 2 3 4 |
ssh -o StrictHostKeyChecking=no -i $SSH_PRIVATE_KEY user@vps_ip "cd /path/to/project && docker-compose down" ssh -o StrictHostKeyChecking=no -i $SSH_PRIVATE_KEY user@vps_ip "cd /path/to/project && git pull origin main" ssh -o StrictHostKeyChecking=no -i $SSH_PRIVATE_KEY user@vps_ip "cd /path/to/project && docker-compose up -d" |
ワークフローファイル(main.yaml)の記述例
GitHub Actionsで自動デプロイを実行するためには、main.yamlファイルを正しく構成することが不可欠です。以下に、Dockerイメージビルド・ghcr.ioへの配信・VPSでのデプロイを網羅した記述例を示します。
イベントハンドラ設定
トリガーとなるイベントを定義することで、特定の操作(push, pull_requestなど)が発生時に自動でワークフローが実行されます。
|
1 2 3 4 |
on: push: branches: [main] |
ジョブ定義とステップ分解
各ジョブ内で、Dockerビルド、ghcr.ioへの送信、VPSへのデプロイをセパレートして実行します。以下は、全体の構成例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up QEMU uses: docker/setup-qemu-action@v1 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Build and push multi-arch image uses: docker/build-push-action@v5 with: context: . platforms: linux/amd64,linux/arm64 push: true registry: ghcr.io repository: your-org/your-repo tags: latest - name: SSH into VPS and deploy uses: appleboy/ssh-action@v0.16.3 with: host: ${{ secrets.VPS_IP }} username: ${{ secrets.VPS_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /path/to/project git pull origin main docker-compose down docker-compose up -d |
エラー処理と再試行戦略
GitHub Actionsでは、if: failure()やretryオプションを使用してエラーハンドリングを行うことも可能です。以下の設定は、失敗したジョブを最大3回まで自動リトライする例です。
|
1 2 3 |
strategy: maxRetryCount: 3 |
まとめ
本記事では、GitHub ActionsとDockerを用いた自動デプロイワークフローの構築方法について、具体的な手順を解説しました。以下にポイントを整理します:
- マルチアーキテクチャ対応により、ARM64やAMD64などの環境での動作保証が可能
- ghcr.ioへの配信はBuildxとdocker/build-push-actionで簡潔に実現
- VPS環境のDocker Composeによる自動デプロイにはSSH接続が必須
GitHub ActionsとDockerの連携により、チームの開発効率は大幅に向上します。本記事で紹介した手順を参考に、ぜひ自社の環境でも導入してみてください。