Linux システム Docker への ASP.NET Core アプリケーションのデプロイのプロセス分析

Linux システム Docker への ASP.NET Core アプリケーションのデプロイのプロセス分析

1. システム環境

1. Tencent Cloud 軽量アプリケーションサーバー CentOS7.6

2. 運用プロセスと途中で遭遇した問題

1. SSHリモートLinux

ssh <ユーザー名>@<IPアドレスまたはドメイン名>

次の問題が発生した場合:

この問題の原因: known_hosts はリモート ホストの公開鍵を記録するファイルです。システムは以前に再インストールされており、保存された公開鍵は再インストールされていないシステムのシステム公開鍵のままです。ssh に接続すると、最初に公開鍵が検証されます。公開鍵が正しくない場合は、エラーが報告されます。解決策: shh-keygen コマンドssh-keygen -R IPを使用します。実行後、次の図が表示されます。

次に、ssh を使用して Linux にリモート接続します。


2. システムを更新する

sudo yum アップデート

3. Gitをインストールする

sudo yum -y gitをインストールします

4. Nginx をインストールし、サービスを有効にして開始します。

sudo yum nginxをインストール
sudo systemctl nginx を有効にする
sudo systemctl nginxを起動します

5. Dotnet SDKをインストールする

これをコンピューターごとに 1 回だけ実行する必要があります。

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum インストール dotnet-sdk-5.0

6. Docker環境をインストールする

1) Docker ソースをインストールします。

まず、アンインストール コマンドを実行します。以前にインストールしたことがある場合、またはシステムに付属している場合は、クリーンにアンインストールする必要があります。

sudo yum 削除 docker-ce

その後、指定されたソースをインストールできます。公式バージョンと Alibaba Cloud バージョンがあります。ここでは Alibaba Cloud バージョンを使用してみます。より高速になると聞きました。
ステップ1: 必要なシステムツールをインストールする

sudo yum install -y yum-utils デバイスマッパー永続データ lvm2

ステップ2: ソフトウェアソース情報を追加する

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

ステップ3: Docker-CEを更新してインストールする

sudo yum makecache fast (オプション)
sudo yum -y をインストールします。

ステップ4: Dockerサービスを開始する

sudo サービス docker 開始

Dockerの起動を設定する

systemctl ドッカーを有効にする

Dockerを起動する

systemctl ドッカーを起動する

バージョンを表示

docker --バージョン

Docker 共通コマンド

すべてのDockerイメージを表示
imageid で画像を削除する

docker rmi [イメージID]

すべての画像を削除

sudo docker rmi $(docker イメージ -q)

すべてのコンテナの実行ステータスを表示する

ドッカーps -a

コンテナIDでコンテナ(インスタンス)を削除する

docker rm [コンテナID]

すべてのコンテナを削除

docker rm $(sudo docker ps -a -q)

2) Hello Worldをテストする

Docker が正常に実行できるかどうかを確認します (hello-world イメージを実行します。ローカル マシンに hello-world イメージがない場合、システムが自動的に hello-world イメージをプルします)

docker で hello-world を実行する

現時点では、次のことを確認できます。
現在サーバー上で利用可能な画像は何ですか?

Docker イメージ

どのコンテナが存在するかを確認するにはどうすればいいですか?

ドッカーps -a

これは、先ほど見た出力コンテンツを含むコンテナです。コンテナ ID は eb180038a3ce、イメージは hello-world、ステータスは exited です。

7. 自分の画像を公開する

1) Docker サポートを追加します。

プロジェクトで公開するインターフェースをカスタマイズする

APIレイヤーを右クリックしてDockerサポートを追加し、Linuxを選択します。

Dockerfileを変更する

FROM: プロジェクトのソースミラーであることを意味します。
WORKDIR: イメージの作業ディレクトリ。
COPY: ファイルをコピーします(Dockerfile が配置されているディレクトリ内のファイルをイメージ内の作業ディレクトリにコピーします)
EXPOSE: コンテナが開きたいポート(プロジェクトのポート 8081 を使用します)
ENTRYPOINT: コンテナの起動後に実行されるコマンド (dotnet Docker.Core.Api.dll コマンドがここで実行されます)

2 つのスクリプト ファイル: Docker.Core.Publish.Linux.sh と Docker.Core.Publish.Docker.sh


Dockerfile: 右クリックして、常にプロパティを開き、常に出力 (bin) ディレクトリにコピーします。次に、プロジェクトを GitHub または Gitee に公開します。GitHub に公開してから、Gitee に移動してプロジェクトの同期を強制します。中国からプロジェクトをクローンする方が速いです。

2) リリース

Git を使用してサーバー上のコードをプルし、リリース コマンドを実行します。私はバッチ ファイルを使用して、1 回のクリックで直接生成します (主にファイルの欠落を防ぐため)。

リリースコマンドを実行します。

生成された公開フォルダー PublishFiles を確認できます。
次のステップは、Docker イメージをコンパイルすることです。

3) イメージを作成する

公開フォルダーの PublishFiles フォルダーに移動し、このファイルが正常かどうかをテストします。

dotnet Docker.Core.Api.dll

すべてが正常であれば、現在のフォルダー内でビルドを開始します (その点に注意してください)。

docker build -t lenceas/apkimg 。

ここで、lenceas/apkimg はミラー名です。
Dockerfile には 5 つのステップがあるため、ここでも正確に 5 つのステップがあります。
次に、マシン上の画像を確認します。

ここにはさらに 2 つのイメージがあります。1 つはイメージ ID 48252cd5c2d0 で、プロジェクト ファイルのサイズは 209 MB です。もう 1 つは Dockerfile のソース イメージです。

4) イメージをDockerハブリポジトリにプッシュする

ステップ1: Docker hubにアカウントを登録する ステップ2: リポジトリを作成する

ステップ3: サーバーイメージのプッシュまずアカウントにログインします(以前にログインしたことがある場合は、ログアウトして再度ログインできます)

押す:

docker push lenceas/apkimg:latest

診る:
結果を表示するには管理バックエンドにログインします

正常にプッシュされたことがわかります。このようにして、イメージをどこでも使用できるようになります。
イメージができたので、コンテナは実行のみ可能なので、コンテナを作成できます。

8. コンテナを生成して実行する

1) コンテナを生成する

このイメージを使ってコンテナを生成してみましょう。

docker run -it -p 8081:8081 lenceas/apkimg

出力が表示されます。エラーがなければ、おめでとうございます。現在のプロセスを終了し、どのコンテナが存在するかを確認します。

この時点で、追加のコンテナ ID e45b93658007 があり、イメージは lenceas/apkimg コンテナであることがわかりますが、プロジェクト コンテナは終了状態にあり、開く必要があります。

ドッカーを起動します e45b93658007

ステータスはすでに実行中なので、インターフェースが正常かどうかをテストするにはどうすればよいでしょうか? curl コマンドを使用できます:

curl http://localhost:8081/WeatherForecast

ここまで到達したら、おめでとうございます。NetCore の Docker デプロイメントは基本的に完了です。最後のステップは nginx プロキシです。このプロセスは Docker によってすでに保護されているため、他のデーモン プロセスは必要ありません。

9. Nginx プロキシサービス

nginx.conf ファイルを次の 2 つの方法で変更します。
1. ファイルを編集するための vim コマンド: vim xxx
編集開始を挿入: i
保存して終了します: :wq!
2. FTP 経由でローカル コンピューターにダウンロードし、構成を変更します。具体的な構成はここでは書きませんので、オンラインで検索してください。

次のステップは、Nginx サービスを再起動することです。まず、構文エラーを検出できます。

nginx -t

nginx -s リロード

上記は、ASP.NET Core アプリケーションの Linux Docker デプロイメントの詳細です。ASP.NET Core アプリケーションの Docker デプロイメントの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Linux+Jexus での Asp.Net Core の公開と展開
  • MacOS+Linux+Nginx での Asp.Net Core の公開と展開
  • Linux CentOS の Docker に Asp.Net Core (.Net6) をデプロイする
  • .net core API を Linux にデプロイする方法
  • Linux サーバーに .Net Core WebApi をデプロイする方法
  • Linux サーバー上で Docker を使用して .net Core プロジェクトを展開するプロセス全体
  • NetCore1.1+Linux 導入の初体験
  • Linux で .net core 環境を展開するための詳細な手順
  • Asp.Net Core の公開と展開の詳細な説明 (MacOS + Linux + Nginx)
  • ASP.NET Core に関する予備調査 (Linux での公開と展開)
  • ASP.NET Core プログラムを Linux システムにデプロイする

<<:  Webデザインの経験: Webコードを効率的に書く

>>:  純粋なCSSでデジタルプラスとマイナスボタンを実装するための最適なソリューション

推薦する

Ubuntu の Docker で mysql5.6 をインストールする方法

1. mysql5.6をインストールする docker 実行 mysql:5.6すべてのアイテムのダ...

Vueフィルターとカスタム命令の使用

目次フィルター01.とは02. やり方(1)フィルターを定義する(2)使用方法(3)フィルタパラメー...

Dockerの匿名マウントと名前付きマウントの具体的な使用法

目次データ量匿名マウントと名前付きマウントデータボリュームの場所データ量匿名マウントと名前付きマウン...

Vueは3階層メニューを再帰的に実装する

この記事の例では、3階層メニューを再帰的に実装するVueの具体的なコードを参考までに共有しています。...

Centos7 システムでの python2 と python3 の共存

最初のステップは、Python のバージョン番号とインストール パスを確認することです。 上記のビュ...

jQuery を使用してカルーセル効果を実装する

本日ご紹介するのは、jQuery を使用してシンプルなカルーセルを実装する方法です。実装の原則は次の...

Mac での MySql の詳細なインストールと構成

1.ダウンロードしてインストールする公式ウェブサイトからコミュニティ エディションの dmg インス...

MYSQL の解凍版における中国語の文字化け問題の解決方法

MYSQLの解凍バージョンがインストールされます1: 解凍後、my.ini ファイルをコピーし、バイ...

ウェブページレイアウトデザインのシンプルな原則

この記事では、Web ページ レイアウト デザインのいくつかの簡単な原則をまとめ、Web ページ デ...

MySQL で 1000 万件のレコードをすばやくクエリする方法

目次通常のページングクエリ最適化する方法大きなオフセット使用ID制限大量データ問題の最適化通常のペー...

カルーセル例の JS 実装

この記事では、カルーセルチャートの小さなケースを実装するためのJSの具体的なコードを参考までに共有し...

Maven モードで Tomcat ソースコードを実行する方法

序文最近、Tomcat の起動プロセスを分析していました。Tomcat のソース コードはアイデア次...

Linux システムにおける時間設定の概要

1. 時間の種類は次のように分けられます。 1. ネットワーク時間(タイムゾーンの設定、ntpサーバ...

MySQLでANDとORを組み合わせる問題を解決する

以下のように表示されます。 SELECT prod_name,prod_price FROM pro...

CSS フォント、テキスト、リストのプロパティの詳細な紹介

1. フォントのプロパティcolorは、div{color:red;}のようにテキストの色を指定しま...