0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerでCI/CD構築

Last updated at Posted at 2024-10-15

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をフォロー,いいねしていただけると嬉しいです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?