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

推薦する

要素シャトルフレームのパフォーマンス最適化の実装

目次背景解決新しい質問高度な背景シャトル ボックスが大量のデータを処理すると、レンダリングされる D...

インスピレーションを得るための7つのクールなダイナミックウェブサイトデザイン

デザインの分野では、毎年さまざまなデザインのトレンドや流行があります。たとえば、近年のレスポンシブデ...

CSSメディアクエリのアスペクト比を小さくする方法

CSS メディア クエリには非常に便利なアスペクト比、aspect-ratio があり、幅と高さを直...

jQueryは何に使われるのですか?jQueryは実際にはjsフレームワークです

jQuery 入門jQuery ライブラリは、簡単なマークアップ行を使用して Web ページに追加で...

熟練デザイナーの7つの原則(1):フォントデザイン

まあ、あなたはデザインの達人かもしれませんし、あるいはそれは大げさすぎるかもしれませんが、少なくとも...

jQueryは記事の折りたたみと展開の機能を実装します

この記事の例では、記事の折りたたみと展開の機能を実現するためのjQueryの具体的なコードを参考まで...

MySQL 5.7 で my.ini ファイルが見つからない場合の解決策

my.ini とは何ですか? my.ini は、MySQL データベースで使用される設定ファイルです...

Vue は動的な円形のパーセンテージ進捗バーを実装します

最近、小さなプログラムを開発しているときに、次の設計図のような円形のパーセンテージ進捗状況バーを実装...

Docker+Nginx を使ってシングルページアプリケーションをデプロイする

開発から導入まで自分で行うシングルページアプリケーションを開発する場合、ビルドを実行した後 npm ...

MySQL で絵文字表現を挿入できない理由と解決策

失敗のシナリオMySQL データベースに絵文字表現を挿入するために JDBC を呼び出すと、例外ja...

他の人が私のウェブページを保存したり、サイトをコピーしたりするのを防ぐためのヒント

現在、インターネット上でウェブサイトをコピーすることは非常に一般的です。では、他人が私たちのウェブサ...

Centos7.2 で mysql5.7 データベースをインストールするための詳細な手順

サーバー上の mysql はバージョン 8.0.12 でインストールされており、ローカルのものはバー...

Vueは双方向データバインディングを実装します

この記事の例では、双方向データバインディングを実装するためのVueの具体的なコードを参考までに共有し...

Vueは左上と右上のスライドナビゲーションを実装します

ナビゲーションなどは日々の開発でよく使うので、記録として記事を書きます。ナビゲーションは終了/開始位...

Centos8 システムの VMware インストール チュートリアル図 (中国語グラフィカル モード)

目次1. ソフトウェアとシステムイメージ2. 仮想マシンを作成する3. CentOS8をインストール...