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でデジタルプラスとマイナスボタンを実装するための最適なソリューション

推薦する

MySQL 5.5.27 インストール グラフィック チュートリアル

1. MYSQLのインストール1. ダウンロードしたMySQLインストールファイルmysql-5.5...

CentOS の Nginx 公式 Yum ソースの設定を詳しく解説

私はプロジェクトの展開にAlibaba Cloudから購入したCentOSを使用しています。最近、プ...

impress.js プレゼンテーション層フレームワーク (デモツール) - 初めての体験

半年もブログを書いていなかったので、少し恥ずかしいです... 正月休みは、Dota をプレイしたり ...

Mysql 5.7.19 無料インストール版 (64 ビット) の設定方法に関する詳細なチュートリアル

公式サイトから mysql-5.7.19-winx64 をダウンロードします。これはシステムの 64...

IE8対応のボーダー半径処理方法

canisue (http://caniuse.com/#search=border-radius)...

Linux で Multitail コマンドを使用するチュートリアル

MultiTail は、tail コマンド機能と同様に、複数のドキュメントを同時に監視するために使用...

MySQL の列から行への変換のヒント (共有)

序文:多くのビジネス テーブルでは、歴史的またはパフォーマンス上の理由により、最初のパラダイムに違反...

JavaScript を使用して動的な QQ 登録ページを作成する

目次1. はじめに1. 基本レイアウト2. 写真を自動的に切り替える3. コンテンツを追加する4. ...

動的な色切り替えの実装コードをサポートするために、CSS で SVG 画像を参照します。

表示する svg 画像を追加すると、React はファイルが見つからないというメッセージを表示します...

Linux で指定されたフォルダの各サブフォルダ内のファイル数を表示する

カウントスクリプト #!/bin/sh 引数の数=$# [ $numOfArgs -ne 1 ]の場...

ソースコードから MySQL 8.0.20 をコンパイルしてインストールする詳細なチュートリアル

前回の記事では、次のことを紹介しました。 MySQL8.0.20 インストール チュートリアルとイン...

MySQLインデックスとは何ですか?わからない場合は聞いてください

目次概要二分木からB+木へクラスター化インデックス非クラスター化インデックスジョイントインデックスと...

And キーワードを使用した MySQL の複数条件クエリ ステートメント

AND キーワードを使用した MySQL 複数条件クエリ。MySQL では、AND キーワードを使用...

jQueryアニメーションを理解するのに役立つ記事

目次1. 要素の表示と非表示を制御する show() hide() 2. 要素の透明度を制御する f...