docker+jenkins+node.js の自動デプロイメント環境をゼロから構築する方法

docker+jenkins+node.js の自動デプロイメント環境をゼロから構築する方法

このケースはCentOS 7システムに基づいています

  • Dockerの使用経験がある人に適しています
  • Linuxコマンドの使用経験がある人に適しています

1. Docker部分

1.1 Dockerの紹介

Docker はオープンソースのアプリケーション コンテナ エンジンであり、開発者がアプリケーションと依存関係をポータブル コンテナにパッケージ化して、一般的な Linux マシンに公開し、仮想化を実現することもできます。コンテナは完全にサンドボックス化されており、コンテナ間にインターフェースはありません。

1.2、Dockerアーキテクチャ

簡単に言えば、Docker は軽量の Linux システムです。 Docker コンテナは Docker イメージから作成されます。コンテナとイメージの関係は、オブジェクト指向プログラミングにおけるオブジェクトとクラスの関係に似ています。 Docker アーキテクチャを図に示します。

1.3. Docker仮想マシン管理コマンド

1.4. Dockerをインストールする

ソフトウェアライブラリを更新する

yum アップデート -y

Dockerをインストールする

yum で docker をインストール -y

1.5. Dockerサービスを開始する

Dockerサービスを開始する

サービスdocker開始

その他の関連コマンド

 service docker restart // docker サービスを再起動します service docker stop // docker サービスを停止します

2. ノード部分

Koa フレームワークを使用して hello-world プロジェクトを作成し、プロジェクトのルート ディレクトリに新しい Dockerfile ファイルを作成できます。

Dockerfile は、命令を含むテキスト ファイルです。各命令はレイヤーを構築するため、各命令の内容はレイヤーの構築方法を記述します。

自作のDockerfileの設定情報は以下の通りです。Dockerに慣れている人であれば自分で設定することも可能です。

# Dockerファイル
# ノードをミラーとして使用 FROM ノード
# コンテナ内にディレクトリを作成する RUN mkdir -p /home/project
# コンテナの作業ディレクトリをこのディレクトリに設定します WORKDIR /home/project 
# ポート3000を外部に公開する EXPOSE 3000
# コンテナ作成後に実行されるコマンド CMD npm install --registry=https://registry.npm.taobao.org && node ./start.js

後続のJenkinsデプロイメントに備えてプロジェクトをGitHubに公開する

3. ジェンキンスの部分

Jenkinsイメージをクエリする

 docker 検索 ジェンキンス

最新のJenkinsイメージを取得する

docker pull jenkins:最新

Jenkinsを起動する

sudo docker run -d -u 0 --privileged --name jenkins_node1 -p 49003:8080 -v /root/jenkins_node1:/var/jenkins_home jenkins:latest

コマンド分析:

  • -u 0

コンテナ内の組み込みアカウントを上書きするためにルートアカウントIDを渡すことを意味します

  • -v /root/jenkins_node1:/var/jenkins_home

dockerコンテナ内のディレクトリ/var/jenkins_homeをホストマシンの/root/jenkins_node1ディレクトリにマッピングすることを指します。

  • --name jenkins_node1

コンテナにjenkins_node1という名前を付けます

  • -p 49003:8080

ポートマッピング、コンテナのポート 8080 をホストのポート 49003 にマッピングする

  • --特権

最高権限を与える

コマンド全体の意味

イメージ jenkins:latest を含む jenkins_node1 という名前のコンテナを実行し、root アカウントを使用してコンテナ内のアカウントを上書きし、最高権限を付与し、コンテナの /var/jenkins_home をホストの /root/jenkins_node1 ディレクトリにマップし、コンテナ内のポート 8080 をホストのポート 49003 にマップします。

Jenkinsを見る

実行が完了したら、Jenkins コンテナが初期化を開始するまで数十秒待ちます。

host/root/jenkins_node1の下にさらに多くのファイルがあるかどうかを確認できます。

ブラウザにlocalhost:49003と入力して、Jenkinsが正常に起動しているかどうかを確認します。

次のインターフェイスは起動が成功したことを示します。

パスワードを取得

cat /root/jenkins_node1/secrets/初期管理者パスワード

出力されたパスワードをコピーしてページに貼り付け、[続行] をクリックして次のページに進みます。

インストールをクリック

インストールが完了するまで待ってから、管理者アカウント作成インターフェースに入ります。

アカウントとパスワード情報を入力し、「保存」(情報を完了)をクリックしてホームページに進みます。

Jenkinsを設定し、システム管理ページに入り、プラグインを管理する

SSHプラグインを選択し、

直接インストールし、インストールが完了するまで待ってからホームページに戻ります。

システム管理 -> システム構成に移動します

一番下までドラッグし、「SSH 経由で公開」をクリックします。

詳細を選択し、サーバーのIP、ユーザー名、パスワードを入力して、構成のテストをクリックします。

「成功」と表示された場合は、設定が正しいことを意味します。保存してホームページに戻ります

新しいプロジェクトを作成する

プロジェクト名を入力してください

ソースコード管理を選択し、git管理を使用し、githubリポジトリのアドレスを入力して、githubユーザーを追加します。

完了してビルド環境を選択します。

実行されたコマンド

sudo docker stop nodeapp || true \
 && sudo docker rm nodeapp || true \
 && cd /root/jenkins_node1/workspace/node \
 && sudo docker build --rm --no-cache=true -t node - < Dockerfile \
 && sudo docker run -d --privileged=true --name nodeapp -p 3000:3000 -v /root/jenkins_node1/workspace/node:/home/project ノード

保存したら、「今すぐビルド」をクリックします。

ビルドが成功すると、ホストディレクトリ /root/jenkins_node1/workspace/node にプロジェクトファイルが表示されます。

ページ情報にアクセスするには、ブラウザにdockerサーバーのアドレスlocalhost:3000を入力します。

起動に失敗した場合は、ログを確認して失敗の原因を特定できます。

docker ログ nodeapp

4. Jenkins + GitHub 自動デプロイ

ローカルコードをGitHubに送信してプッシュした後、Jenkinsが自動的に最新のコードをプルして再デプロイするようにしたい場合は、読み続けてください。

サーバーはインターネットからアクセス可能である必要があります。ローカルでテストしたい場合は、natappまたはngrokを使用してイントラネットに侵入してみてください。

ホームページのユーザーをクリック

ホーム -> ユーザー -> root

設定 -> APIトークンを表示をクリックします

APIトークンの値をコピーします

ホーム -> ノード -> 構成 -> ビルドトリガーに戻り、認証トークンを貼り付けます。

githubプロジェクトページにログインし、「設定」->「Webhook」->「Webhookの追加」を開きます。

Webhookの追加

Jenkinsのセキュリティポリシーを変更する

Jenkinsホームページで、システム管理 -> グローバルセキュリティの設定(システム設定の下にある)を選択し、次の設定を行います。

この時点で、git push が完了すると、Jenkins は自動的にビルドとデプロイを実行します。

5. dockerの一般的なコマンド

Dockerに興味がある人は、さらに学び続けることができます

ミラー関連

クエリ画像

docker 検索 [名前]

画像をプルする

docker pull [名前]

画像のインポート

docker ロード < /home/node.tar.gz

画像のエクスポート

docker 保存 > /home/node.tar.gz

すべての画像を照会

Docker イメージ

画像の削除

docker rmi [名前]

画像名を変更する

docker タグ docker.io/node ノード

コンテナ関連

起動する

# 実行して対話モードに入る docker run -it --name myjava java bash 
# バックグラウンドで実行 docker run -d --name myjava java

ポートマッピング

docker run -it --name myjava -p 9000:8085 -p 9000:8086 java bash

ディレクトリマッピング

docker run -it --name myjava -v /home/project:/soft --privileged docker.io/node bash

バックグラウンドで実行されているコンテナに入る

docker exec -it 名前 bash

自動再起動

docker run --restart=always -it --name myjava -p 9000:8085 -p 9000:8086 java bash

コンテナを一時停止する

docker 一時停止ノード

コンテナを停止して一時停止する

docker ノードの一時停止を解除

コンテナを停止する

docker ノードを停止する

コンテナを起動する

docker start -i ノード

コンテナを表示

ドッカーps -a

Dockerネットワークセグメント関連

ネットワークセグメントの作成

docker ネットワーク作成 net1

ネットワークセグメント情報を表示する

docker ネットワーク検査 net1

ネットワークセグメント情報を削除する

docker ネットワーク rm net1

6. まとめ

最近Node.jsを勉強しているので、Docker+jenkinsを使ってこの自動デプロイメントプロセスを実装したいと考えていました。1日懸命に作業した後、ようやく構成に成功しました。以前は、pm2 はノード プロジェクトの管理に使用され、pm2 はノード プロジェクトを自動的にデプロイするために使用されていました。ご興味があれば、ぜひご覧ください。 pm2 を使用してノード プロジェクトを自動的にデプロイします。これは自分用の要約メモです。書き方が下手な部分があれば指摘してください。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Jenkins+Docker+Gitee+SpringBoot 自動デプロイメント
  • Docker、Nginx、Jenkins をベースにした自動フロントエンド デプロイメント
  • Docker+gitlab+jenkins は、ゼロから自動デプロイメントを構築します
  • Docker+Jenkinsによる自動デプロイの実現方法
  • DockerはJenkinsを構築し、プロジェクトのパッケージ化とデプロイの手順を自動化します

<<:  JavaScript でよく使われるいくつかの文字列メソッドの概要 (初心者必読)

>>:  MySQL 5.7.19 Winx64 ZIP アーカイブのインストールと使用に関する問題の概要

推薦する

MySQL 同期遅延が発生したときに Seconds_Behind_Master が 0 のままになる理由

目次問題の説明原理分析問題分析拡大する総括する問題の説明ユーザーはプライマリ データベースに対して変...

Vue の要素カレンダー コンポーネントを使用したサンプル コード

まず効果図を見てみましょう: 完全なコードは添付されています <テンプレート> <...

JavaScriptアニメーション関数のカプセル化の詳細な説明

目次1. アニメーション機能の原理2. アニメーション関数のシンプルなカプセル化3. アニメーション...

MySQL 最適化接続最適化

記事「MySQL の最適化: キャッシュの最適化」では、システムによってコンパイルされた変数値、また...

CSS アニメーション プロパティの使用方法とサンプル コード (transition/transform/animation)

開発中、優れたユーザー インターフェイスには常にいくつかのアニメーションが組み込まれます。 CSS ...

Vue cli開発に基づく外部コンポーネントVantのデフォルトスタイルの変更の詳細な説明

目次序文1. 少ない2. コンポーネントをインポートする3. 設定ファイルを変更するステップ1: l...

Nginx 最適化サービスで Web ページ圧縮を実装する方法

リソースを節約するためにWebページの圧縮を設定する1.まず、設定を変更しましょう vim /usr...

MySQL 1130例外、リモートログインできない解決策

目次質問: 1. リモートログイン権限を有効にする: 2. MySQLの権限を更新します。 3. テ...

Python MySQL データベース テーブルの変更とクエリ

Python は MySQL に接続してデータベース テーブルを変更およびクエリします。 pytho...

K3s 入門ガイド - Docker で K3s を実行するための詳細なチュートリアル

k3dとは何ですか? k3d は、Docker で K3s クラスターを実行するための小さなプログ...

Vue フロントエンド開発における keepAlive の使用方法の詳細な説明

目次序文keep-avlive フック関数keep-avliveはどのコンポーネントをキャッシュする...

Mysql の読み取り/書き込み分離期限切れに対する一般的な解決策

MySQLの読み書き分離の落とし穴読み取りと書き込みの分離の主な目的は、メイン データベースの負荷を...

OCSP を有効にすると、https 証明書の検証効率が向上し、Let's Encrypt SSL 証明書へのアクセスが遅くなる問題が解決されます。

ここ数日、ウェブサイトを初めて開いたときにアクセスが非常に遅いのですが、その後はページが正常に開きま...

MySQL インデックスのカーディナリティの概念と使用例

この記事では、例を使用して、MySQL インデックス カーディナリティの概念と使用方法を説明します。...

MySQLでクエリキャッシュを実行する方法と失敗を解決する方法

関数を使用する前にパラメータのプロパティを理解して、関数の使い方をより深く理解する必要があることは誰...