Dockerを使ったCI/CD構築方法
CI/CD(継続的インテグレーション/継続的デリバリー)は、ソフトウェアの開発プロセスを効率化するための重要な手法です。Dockerを活用することで、開発環境をコンテナ化し、テスト、ビルド、デプロイのプロセスを簡素化できます。本記事では、Dockerを使ったシンプルなCI/CDパイプラインの構築方法を紹介します。
構築の概要
継続的インテグレーション(CI): 新しいコードがリポジトリにプッシュされるたびに自動的にテストとビルドが実行されます。
継続的デリバリー(CD): コードがテストを通過した後、ステージングやプロダクション環境に自動的にデプロイされます。
使用するツール
GitHub: コードのバージョン管理
Docker: アプリケーションをコンテナ化してビルドやデプロイを効率化
Jenkins or GitHub Actions: CI/CDの自動化ツール
Docker Hub: Dockerイメージのリポジトリ
クラウドサービス(例: AWS, GCP, Herokuなど): アプリケーションのデプロイ先
ステップ 1: Dockerファイルの準備
まず、アプリケーションをDockerコンテナとして動作させるために、Dockerfileを作成します。以下は、シンプルなNode.jsアプリケーション用のDockerfileの例です。
//ベースイメージを指定
FROM node:14
# 作業ディレクトリを設定
WORKDIR /app
# パッケージファイルをコピーし、依存関係をインストール
COPY package*.json ./
RUN npm install
# アプリケーションのコードをコピー
COPY . .
# アプリケーションを起動する
CMD ["npm", "start"]
# コンテナが利用するポート
EXPOSE 3000
FROM は、Node.jsのベースイメージを指定しています。
WORKDIR は、コンテナ内での作業ディレクトリです。
COPY は、ローカルのファイルをコンテナ内にコピーします。
CMD は、コンテナ起動時に実行されるコマンドです。
EXPOSE は、コンテナがリッスンするポートを指定します。
ステップ 2: Dockerイメージのビルドとテスト
Dockerファイルが準備できたら、次にアプリケーションのDockerイメージをビルドし、ローカルでテストします。
# Dockerイメージをビルド
docker build -t my-app .
# Dockerコンテナを起動
docker run -p 3000:3000 my-app
ブラウザで http://localhost:3000 にアクセスし、アプリケーションが正しく動作するか確認します。
Docker Hubへのプッシュ
Dockerイメージを共有するために、Docker Hubを使ってリポジトリにプッシュします。
Docker Hubにログイン
docker login
Dockerイメージをタグ付け
docker tag my-app <your-dockerhub-username>/my-app
イメージをプッシュ
docker push <your-dockerhub-username>/my-app
これで、Docker Hubにイメージがアップロードされ、他の開発者やサーバーで利用できるようになります。
CI/CDツールの設定(GitHub Actionsの例)
GitHub Actionsを使って、CI/CDパイプラインを構築します。.github/workflows/ci.yml に以下の内容を追加して、CI/CDのワークフローを定義します。
name: CI/CD Pipeline
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: チェックアウト
uses: actions/checkout@v2
- name: Dockerイメージをビルド
run: docker build -t my-app .
- name: Docker Hubにプッシュ
run: |
echo ${{ secrets.DOCKER_HUB_PASSWORD }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin
docker tag my-app ${{ secrets.DOCKER_HUB_USERNAME }}/my-app
docker push ${{ secrets.DOCKER_HUB_USERNAME }}/my-app
説明
on: push は、mainブランチに変更があった際にワークフローを実行するトリガーを指定しています。
checkout ステップでは、リポジトリのコードを取得します。
Dockerイメージをビルドして、Docker Hubにプッシュする2つのステップを追加しています。
シークレット設定: DOCKER_HUB_USERNAME と DOCKER_HUB_PASSWORD は、GitHubリポジトリのシークレットに保存して、セキュリティを確保します。
自動デプロイ
CIプロセスが完了した後、CD(継続的デリバリー)を行います。例えば、AWSやHerokuなどのクラウドサービスにデプロイするには、以下のようなコマンドを使用できます。
Herokuにデプロイする例
Heroku CLIをインストールして、GitHub Actionsに追加します。
- name: Herokuにデプロイ
run: |
echo ${{ secrets.HEROKU_API_KEY }} | heroku auth:token
heroku container:push web --app <your-heroku-app-name>
heroku container:release web --app <your-heroku-app-name>
まとめ
Dockerを使ってCI/CDを構築することで、次の利点が得られます。
一貫性のある環境: ローカルやテスト、プロダクション環境の違いによる不具合を減少。
自動化: テストからデプロイまでのプロセスを自動化し、手作業のミスを防止。
効率化: コンテナベースでの開発により、迅速なデプロイやスケーリングが可能。
これでDockerを活用したCI/CDパイプラインの基礎が構築できます。今後、必要に応じてテストの追加や、複雑なデプロイプロセスの自動化を行うことが可能です。
DockerでCI/CD構築の構築について記事にしました。
最後までよんでいただきありがとうございます。
@y-t0910をフォロー,いいねしていただけると嬉しいです!