Docker を使用してコンテナの自動デプロイとロールバックを行う方法

WBOY
リリース: 2023-11-07 13:40:59
オリジナル
1134 人が閲覧しました

Docker を使用してコンテナの自動デプロイとロールバックを行う方法

クラウド コンピューティングとマイクロサービスの人気に伴い、軽量の仮想化テクノロジとして Docker がコンテナのデプロイに広く使用されています。 Docker には、迅速な導入、リソースの分離、管理の容易さという利点があり、アプリケーションのメンテナンスとリリースのプロセスを大幅に簡素化できます。この記事では、Docker を使用してコンテナーの自動デプロイとロールバックを行う方法を紹介し、いくつかの具体的なコード例を示します。

1. Docker 自動デプロイメント

Docker 自動デプロイメントとは、アプリケーションの開発およびテストのプロセス中に Dockerfile ファイルと Docker Compose ファイルを記述することによって、アプリケーション環境と関連する依存関係を Docker にパッケージ化することを指します。ローカルまたはリモートサーバーに展開します。

1. Dockerfile を作成する

Dockerfile は、アプリケーションがイメージを構築するために必要なすべての命令とコマンドを含むテキスト ファイルです。 Dockerfile ファイルを作成して、アプリケーションに必要な環境、依存関係、起動コマンドを定義できます。コマンドを 1 つ実行するだけで、アプリケーションに必要な Docker イメージが自動的に構築されます。

以下は、Dockerfile ファイルを使用して Node.js アプリケーションを構築する例です:

FROM node:14-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
ログイン後にコピー

上記の Dockerfile ファイルは、ベース イメージを Node.js 14 バージョンのアルパインベース イメージとして指定します。 、作業ディレクトリを /app として定義し、package.json と package-lock.json を作業ディレクトリにコピーし、npm install を実行して依存関係をインストールし、アプリケーション コードを作業ディレクトリにコピーし、コンテナによってマップされるポートを定義します。 3000 として、最後に npm start を実行してアプリケーションを開始します。

2. Docker Compose ファイルの書き込み

Docker Compose は、複数のコンテナで構成されるアプリケーションを定義および実行するために Docker によって公式に提供されるツールです。 Docker Compose ファイルを記述することで、アプリケーションに必要なサービス、コンテナのイメージと起動方法、ネットワークとコンテナ間の依存関係などの情報、およびコンテナのリソース制限や拡張を定義できます。

以下は、Docker Compose を使用して Node.js アプリケーションをデプロイする例です:

version: '3'

services:
  app:
    build: .
    ports:
      - '8080:3000'
    environment:
      NODE_ENV: production
    restart: always
ログイン後にコピー

app という名前のサービスが上記の Docker Compose ファイルで定義されており、build コマンドを使用してイメージを作成し、コンテナー ポート マップをホスト ポート 8080 に設定し、環境変数 NODE_ENV を実稼働として定義し、コンテナーがダウンした後に自動的に再起動するように指定します。

3. 自動化されたデプロイメント スクリプト

アプリケーションのデプロイメント プロセスをより自動化するために、Docker イメージの自動的な構築、プッシュ、デプロイのプロセス全体を実現するいくつかのデプロイメント スクリプトを作成できます。以下は、Docker Compose を使用して Node.js アプリケーションを自動的にデプロイする例です。

#!/bin/bash

# 定义应用名称和版本号
APP_NAME='nodejs-app'
TAG=$(git rev-parse --short HEAD)

# 构建Docker镜像
docker build -t $APP_NAME:$TAG .

# 推送Docker镜像到仓库
docker push $APP_NAME:$TAG

# 使用Docker Compose部署应用
docker-compose up -d
ログイン後にコピー

上記のスクリプトでは、git rev-parse コマンドを使用して最新のコードのバージョン番号を取得し、イメージをビルドします。それを Docker ウェアハウスにプッシュし、最後に Docker Compose を使用してアプリケーションを開始します (-d パラメーターはバックグラウンドでの実行を示します)。

2. Docker コンテナのロールバック

アプリケーションの開発およびテストのプロセス中に、コード エラーや非互換性の問題が必然的に発生します。現時点では、アプリケーションのバージョンをロールバックし、アプリケーションを以前の状態に復元する必要があります。

Docker コンテナーは、タグを通じてバージョン番号を指定するという単純なロールバック メソッドを提供します。コンテナーの起動時に異なるイメージ バージョンを選択して、アプリケーション バージョンのロールバックを実装できます。

1. タグ (Tag) を使用する

Dockerfile ファイルにバージョン番号を指定する場合、タグ (Tag) を使用してアプリケーションのバージョンを識別できます。例:

FROM node:14-alpine

LABEL version="1.0.0"

WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
ログイン後にコピー

LABEL 命令は、アプリケーションのバージョン番号を 1.0.0 として識別するために、上記の Dockerfile で使用されています。

イメージをビルドした後、docker tag コマンドを使用して新しいタグを作成できます。例:

docker tag nodejs-app:latest nodejs-app:1.0.0
ログイン後にコピー

Docker Compose ファイルでサービスを定義するときに、タグ (例:

version: '3'

services:
  app:
    image: nodejs-app:1.0.0
    ports:
      - '8080:3000'
    environment:
      NODE_ENV: production
    restart: always
ログイン後にコピー

2. ロールバック スクリプト

バージョンのロールバックを容易にするために、アプリケーション バージョンのロールバックを実装するロールバック スクリプトを作成できます。使用する必要があるイメージのバージョンを指定します。以下は、Docker Compose を使用して Node.js アプリケーションをロールバックする例です。

#!/bin/bash

# 定义应用名称和版本号
APP_NAME='nodejs-app'
TAG='1.0.0'

# 更新Docker Compose文件中使用的镜像版本
sed -i "s|$APP_NAME:.*|$APP_NAME:$TAG|g" docker-compose.yml

# 回滚应用版本
docker-compose up -d
ログイン後にコピー

上記のスクリプトでは、Docker Compose ファイルで使用されているイメージのバージョン番号を直接変更し、コンテナーを起動します。

3. 概要

この記事では、Docker を使用してコンテナーの自動デプロイとロールバックを行う方法を紹介し、いくつかの具体的なコード例を示します。自動展開により、アプリケーションを迅速に展開および更新し、必要に応じてバージョンをロールバックできるため、アプリケーションの安定性と信頼性が向上します。ただし、実際のアプリケーションでは、アプリケーションが正常に動作するように、特定のビジネス ニーズと環境に基づいて展開戦略を最適化する必要があります。

以上がDocker を使用してコンテナの自動デプロイとロールバックを行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!