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 RouterはMySQLの読み取りと書き込みの分離を実装します

目次1. はじめに2. MySQLルーターを構成する2.1 MySQLルーターのインストール2.2 ...

Linuxはnode.jsを完全に削除し、yumコマンドで再インストールします。

最初のステップ組み込みのパッケージ管理機能で一度削除する yum 削除 nodejs npm -y ...

Zabbixについて管理者ログインパスワードを忘れた場合、パスワードをリセットする

Zabbix 管理者ログイン パスワードのリセットに関する問題は次のとおりです。 1. 問題の説明:...

HTMLで境界線を設定する3つの方法の詳細な説明

HTML で境界線を設定する 3 つの方法 境界線の幅: 1px 2px 2px; 境界線のスタイル...

Reactの状態の理解についての簡単な分析

複雑なコンポーネント (クラス コンポーネント) と単純なコンポーネント (関数コンポーネント) を...

React Hooks に基づく小さな状態管理の詳細な説明

目次React Hooks に基づく状態共有の実装ユーザーエクスペリエンスこの記事では、主に Rea...

vscode を使用したリモート Linux 開発の実装

過去に別れを告げるvscode にリモート SSH が導入される前は、Linux サーバー開発者の多...

Linux (CentOS) システムで MySQL データベース ディレクトリの場所を変更する方法

CentOS システムで MySQL データベース ディレクトリの場所を変更する方法1. まず、My...

HTML テーブルタグチュートリアル (26): セルタグ

<TD> タグの属性は、テーブル内のセルのプロパティを設定するために使用されます。表 &...

Dockerがコンテナを起動するたびに、IPとホストが指定した操作が実行されます。

序文Dockerを使ってHadoopクラスタを起動するたびに、ネットワークカードの再バインド、IPの...

MySQL 入門 - SQL 実行プロセス

目次1. プロセス2. コアアーキテクチャ2.1 サーバー層の基本コンポーネントの紹介3. ステート...

Element における複数データ読み込み最適化の実装

目次シナリオコードの実装要約:シナリオ最近、ElementUI をベースにしたバックグラウンド管理シ...

bash を使って日付をカウントダウンする方法

重要なイベントまであと何日あるか知りたいですか? Linux bash と date コマンドが役に...

HTML 基本コントロール入門_PowerNode Java アカデミー

<input> タグ<input> タグはユーザー情報を収集するために使用さ...

Centos7.3 で mysql5.7.18 をインストールして初期パスワードを変更する方法

この記事では、Centos7.3でのmysql5.7.18のインストールと初期パスワードの変更につい...