.NETCore Dockerはコンテナ化とプライベートイメージリポジトリ管理を実装します

.NETCore Dockerはコンテナ化とプライベートイメージリポジトリ管理を実装します

1. Dockerの紹介

Docker は Linux オペレーティングシステムの一部の機能をベースに Go 言語で開発されており、オペレーティングシステムレベルの抽象化を提供し、アプリケーションのインフラストラクチャ (オペレーティングシステムなど) への依存を分離するコンテナ管理テクノロジです。仮想マシンと比較して、Docker はホストマシンのハードウェア リソースを共有し、コンテナーを使用してアプリケーションを実行するための独立したオペレーティング環境を提供します。仮想マシンは、仮想化テクノロジーを使用して分離された仮想マシンを提供し、仮想マシンのオペレーティング システム上で実行環境を提供する Supervisor (仮想マシン ハイパーバイザー) に基づいています。どちらも優れたリソース分離を提供しますが、Docker の方が仮想化のオーバーヘッドが低いことは明らかです。

Docker には、レジスター、イメージ、コンテナという 3 つのコア概念が含まれます。

1. レジストリ: 倉庫。 Docker イメージを保存するために使用されます。たとえば、Docker の公式 Docker Hub は、必要なイメージをダウンロードできるパブリック ウェアハウスです。

2. 画像:画像。開発者はアプリケーションまたはサービスを作成し、それとその依存関係をコンテナ イメージにパッケージ化します。イメージは、アプリケーションの構成とその依存関係の静的な表現です。

3. コンテナ:コンテナ。コンテナは、イメージの実行インスタンスです。これは、オペレーティング システム、実行するプログラム、実行中のプログラムの依存関係、環境変数などが含まれる、分離された、リソース制御されたポータブルなランタイム環境です。

3 つの間の相互作用は次のとおりです。

Docker pull または Docker run コマンドを実行すると、必要なイメージがローカルにない場合は、リポジトリ (通常は DockerHub) からイメージがダウンロード (プル) されます。 Docker は run メソッドを実行してコンテナを取得し、ユーザーはコンテナ内でさまざまな操作を実行します。 Docker は、コンテナをイメージに変換するために commit メソッドを実行します。 Docker は login や push などのコマンドを使用して、ローカル イメージをウェアハウスにプッシュします。イメージは他のマシンやサーバー上でコンテナを生成し、対応するアプリケーションを実行するために使用できます。

2. Dockerのインストール

1. yumソースを使用してインストールします。公式ソースは中国ではアクセスが遅いため、ここにAlibabaのソースを追加します

 > wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 > yum インストール -y docker-ce

2. Dockerを起動する

 //Docker CEを起動する
 > systemctl で docker を起動します
 > systemctl で docker を有効にする
 //Docker のステータスを確認する> systemctl status docker
 // dockerのバージョンを確認する> docker -v

3. Docker が正しくインストールされているかどうかをテストし、次のコマンドを実行します。

> docker run hello-world

a. docker run hello-worldを実行すると、docker はまず hello-world イメージをローカルで検索します。ローカルで利用できない場合は、デフォルトのイメージ リポジトリ Docker Hub からイメージを取得します。イメージをローカルにプルした後、イメージをインスタンス化してコンテナを取得し、Hello from Docker! が出力されます。

b. Docker Engine 、Docker のコア テクノロジーであるイメージとコンテナーを提供します。インストール チュートリアルの最後の手順では、Engine コマンドdocker run hello-worldを実行しました。このコマンドにより、Engine は Docker のコア タスクを完了できます。コマンドは 3 つの部分で構成されています。

c. コンテナは Linux オペレーティング システムの簡易版です。イメージはこのコンテナにロードされるソフトウェアです。このコマンドを実行すると、Engine は次の処理を実行します。

1. hello-worldソフトウェアイメージが存在するかどうかを確認する

2. Docker Hub からイメージをダウンロードします (Docker Hub については後ほど詳しく説明します)

3. このイメージをコンテナにロードして実行する

3. Dockerで.Netcoreプロジェクトを実行する

1. microsoft/dotnet イメージをプルし、インストールが完了するまで数分間待ちます。docker docker imagesを実行して、ローカル コンピューターに microsoft/dotnet イメージが既に含まれていることを確認します。

> docker pull microsoft/dotnet

2. microsoft/dotnet イメージを実行します。docker docker run <image>を使用してイメージを起動し、-it パラメータを指定して対話型モードで起動します (コンテナーに入ります)。以下のコマンドを順番に実行します。

 > docker run -it microsoft/dotnet //dotnet イメージを起動します> dotnet new mvc -n mvctest //mvctest という名前の .NET Core MVC プロジェクトを作成します> cd mvctest //mvctest フォルダーに移動します> dotnet run //.NET Core MVC プロジェクトを起動します

実行結果は下の図に示されています。

アプリケーションを終了するにはキーボードのCtrl+Cを押し、現在のコンテナを終了するにはexitと入力します。

上記の簡単な手順で、.NET Core MVC プロジェクトの作成と操作が完了します。この時点で、.NET Core SDK が Linux ホストにインストールされていないことに疑問を感じるかもしれません。MVC プロジェクトはどのように作成されるのでしょうか?ここで Docker の魔法が起こります。イメージ リポジトリから取得した dotnet イメージには、.NET Core プロジェクトの作成、ビルド、実行に必要なすべての依存関係とランタイム環境が含まれています。

コンテナを終了した後、find -name mvctest (mvctest ファイルを検索する) を実行すると、見つからないことがわかります。つまり、先ほど作成した .NET Core MVC プロジェクトはコンテナー内に作成され、ホスト マシンから完全に分離されます。この時点で、コンテナにソースコードをインストールするのは面倒すぎると思われるかもしれません。コンテナでホストマシンのソースコードプロジェクトを実行させることはできますか?まあ、それは良い質問ですね。もちろん可能です。この質問に答えてみましょう。

4. ホスト上に.NET Coreプロジェクトを作成する

ホスト上に .NET Core プロジェクトを作成するには、Linux ホストに .NET Core SDK をインストールする必要があります。

1. ホストに.NET Core SDKをインストールする

yum ソースを追加します: sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

インストールを開始します: yum install -y dotnet-sdk-2.1

インストールされているバージョンを確認します。次の図はインストールが正しいことを示しています。

2. .NET Coreプロジェクトを作成する

 > mkdirデータ
 > CDデータ
 > dotnet new mvc -n mvctest // mvctest という名前の .NET Core MVC プロジェクトを作成します。> cd mvctest // mvctest フォルダーに移動します。> dotnet run // .NET Core MVC プロジェクトを開始します。

注: コード .UseUrls("http://*:5000") を Program.cs ファイルに追加し、次に示すようにブラウザーでアクセスします。

次のステップは、このディレクトリ内のソース コード プロジェクトをマウントしてコンテナーに共有することです。

3. ホストプロジェクトをコンテナにマウントする


Docker イメージを起動するときに、Docker では -v パラメータを使用して、ホストのファイルをコンテナ内の指定されたディレクトリにマウントできます。言い換えれば、コンテナがアクセスできるようにホスト上の指定されたファイルを共有することと同等である。

// コマンド内の `\` と `Enter` キーを組み合わせると改行が形成され、新しい行に長いコマンドを入力できるようになります。
 > docker run -it \
 > -v /data/mvctest/:/app \
 > マイクロソフト/ドットネット:最新

上記のコマンドは、/data/mvctest/ フォルダー内のファイルをコンテナーの \app ディレクトリにマウントします。


上記の実行結果から、コンテナ内のアプリ ディレクトリにホスト マシン上のソース コード プロジェクトが含まれていることがわかります。

前述のように、コンテナがホストディレクトリのコピーを持つのではなく、共有形式であるため、ホスト上のディレクトリへの変更はコンテナにすぐに反映されます。しかしその一方で、コンテナ内の共有ディレクトリへの変更はホストマシンに反映されず、コンテナの分離特性が損なわれます。

このような単純なシナリオを通して、このシナリオを日常のコーディングにどのように適用できるかを考えるほど賢いでしょうか?はい、継続的ビルド (CI) に使用できます。基本的な考え方は、git を介してソース コードをホスト マシンにクローンし、ソース コード ディレクトリをコンテナーにマウントして構築することです。

4. Dockerfileの助けを借りて

次の記事では、この操作を Dockerfile の依存なしにアップグレードし、1 つのコマンドで完了させます。

Dockerfile は、コンテナ内で実行する一連の操作を定義するために使用されます。最初のDockerfileを作成しましょう

 > cd /data/mvctest/ //作成したMVCプロジェクトディレクトリを入力してください> touch Dockerfile //touchコマンドを使用してDockerfileを作成します
 > vi Dockerfile //viコマンドを使用してDockerfileを編集します

VI 編集インターフェイスに入ったら、次のコードをコピーし、shift + Ins コマンドを使用して貼り付けます。次に、ESE を押して編集モードを終了し、Shift + : を押して、wq と入力して保存し、編集インターフェイスを終了します。

microsoft/dotnet:latest から
 ワークディレクトリ /app
 コピー ./app
 ドットネット復元を実行する
 エクスポーズ5000
 環境変数 ASPNETCORE_URLS http://*:5000
 エントリポイント ["dotnet","run"]

上記のコマンドを一つずつ説明します。

FROMを使用してコンテナが使用するイメージを指定します

WORKDIRを使用して作業ディレクトリを指定します

COPY コマンドを使用して、現在のディレクトリ (. は現在のディレクトリを表します) をコンテナー内の /app ディレクトリにコピーします。

RUNコマンドを使用してコンテナ内で実行するコマンドを指定します。

EXPOSEを使用してコンテナによって公開されるポート番号を指定します。

ENV を使用して環境パラメータを指定します。これは、.NETCore プロジェクトに、すべてのネットワーク インターフェイスのポート 5000 をリッスンするように指示するために使用されます。

ENTRYPOINTを使用してコンテナのエントリポイントを指定します

Dockerfile が準備できたので、現在のプロジェクトを配布および展開用のイメージにパッケージ化できます。

イメージをパッケージ化するには、docker build -t <name> <path> コマンドを使用します。

> docker build -t mvctest.web .

上記のコマンドは、Docker に現在のディレクトリをミラーにパッケージ化し、 hellodocker.webという名前を付けるように指示します。コマンドを実行したら、 docker imagesと入力して新しくパッケージ化されたイメージを確認します。


イメージが作成されたら、それを直接実行できます。

> docker run -d -p 80:5000 mvctest.web

上記の命令は、新しくパッケージ化されたイメージを実行し、-p パラメータを介してコンテナのポート 5000 をホストのポート 80 にマッピングします。-d パラメータは、Docker にイメージをバックグラウンド タスクとして実行するように指示します。ポート80はデフォルトのWebポートなので、ブラウザからIPに直接アクセスすることで、コンテナ内で実行されているMVC Webサイトにアクセスできます。

これまで、Docker の助けを借りて .NET Core プロジェクトのコンテナーの展開を完璧に完了しました。後で、イメージを他のマシンに展開します。

5. イメージをウェアハウスにプッシュする


Docker Hub にアカウントを登録し、ローカルにパッケージ化されたイメージをアカウントのリポジトリに配置してください。

1. 登録後、コマンドを実行する

> docker login


2. コマンドを再度実行する

> docker push


プッシュは失敗しました。これは、イメージの命名が仕様に準拠していないことを示しています。プッシュする前に、イメージに <user>/<repo> 形式で名前を付ける必要があることがわかりました。名前を変更するには?タグ付けして名前を変更します

上記の情報は、プッシュが成功したことを示しています。以下に示すように、独自のウェアハウスを確認してください。

最後に、マシンを変更し、次のコマンドを直接実行して、複数のデプロイメントを完了します。

> docker run -p 8081:5000 79522860/mvcdemo.web

上記のイメージリポジトリが準備できました。とても便利ですね。業務と組み合わせると、さらに多くのイメージが必要になることがわかります。コンテナの分散展開のために、コンテナを1つずつ起動する必要がありますか?いいえ、構成ファイルを通じてワンクリックでイメージとコンテナをデプロイすることもできます。これについては次の記事で説明します。

6. 一般的なDockerコマンド

1. コンテナ関連業務

 > docker ps //現在実行中のコンテナを表示します> docker ps -a //すべてのコンテナのステータスを表示します> docker start/stop id/name //コンテナを起動/停止します> docker attach id //コンテナに入ります(exitを使用して終了すると、コンテナも実行を停止します)
 > docker rm id/name //コンテナを削除します。実行中の場合は、まず停止します。> docker rm $(docker ps -a -q) //停止したコンテナを削除します。> docker logs -f hello-world //指定したコンテナのログレコードを表示します。

> docker run -it --name hello_001 hello-world //創建一個容器,并指定標簽

-i: コンテナとの対話を可能にします (STDIN)

-t: 新しいコンテナ内の疑似端末または端末を指定します

--name: コンテナに名前を付けます。省略可能です。省略した場合、Docker はランダムな名前を生成します。

2. 画像関連の操作

 > docker images //ローカルイメージを表示> docker rmi id/name //イメージを削除します。タグが指定されていない場合は、最新のタグがデフォルトで削除されます> docker rmi $(docker images -q) //すべてのイメージを削除します。注意してください> docker rmi $(docker images -f "dangling=true" -q) //名前のないイメージをすべて削除します(ビルドプロセス中に生成された中間イメージの可能性があります)
 > docker start/stop id/name //コンテナを起動/停止する> docker attach id //コンテナに入る(exitを使用して終了するとコンテナも停止します)

ID タグによるミラーリング。以下は、ID 0e5574283393 のローカル イメージの「fedora」リポジトリへのタグ名 version1.0 です。

> docker tag 0e5574283393 fedora/httpd:version1.0

名前タグによるミラーリング。リポジトリ「fedora」にローカルにミラーリングするには、名前「httpd」タグを使用し、そのタグ名は version1.0 です。

> docker tag httpd fedora/httpd:version1.0

参照されるhttpdのタグ名が指定されていないため、デフォルトの参照はhttpd:latestであることに注意してください。

名前とタグ名でイメージにタグを付けます。httpd という名前のローカル イメージにタグを付け、タグ名を test にします。リポジトリは fedora で、タグ名は version1.0.test です。

> docker tag httpd:test fedora/httpd:version1.0.test

イメージをプライベート リポジトリにタグ付けします。パブリック Docker レジストリではなくプライベート レジストリにイメージをプッシュします。イメージにタグを付けるには、レジストリのホスト名とポートを指定する必要があります。

> docker tag 0e5574283393 myregistryhost:5000/fedora/httpd:version1.

3. Docker CEをアンインストールする

a. Dockerパッケージをアンインストールする

> yum remove docker-ce

b. ホスト上のイメージ、コンテナ、ボリューム、またはカスタム構成ファイルは自動的に削除されません。 すべてのイメージ、コンテナ、ボリュームのコマンドを削除する

> rm -rf /var/lib/docker

6. 追加知識の普及

1. Docker公式イメージライブラリのアドレス

https://hub.docker.com/r/microsoft/dotnet/

2. microsoft/dotnetイメージバージョンの違い

a. microsoft/dotnet:<バージョン>-sdk (microsoft/dotnet:2.1-sdk)

このイメージには、.NET Core とコマンドライン ツール (CLI) を含む .NET Core SDK が含まれています。 このイメージは開発シナリオにマッピングされます。 このイメージは、ローカル開発、デバッグ、ユニット テストに使用できます。 このイメージはシナリオの構築にも使用できます。 microsoft/dotnet:sdk を使用すると、常に最新バージョンが提供されます。

b. microsoft/dotnet:<バージョン>-runtime (microsoft/dotnet:2.1-runtime)

このイメージには .NET Core (ランタイムとライブラリ) が含まれており、運用環境で .NET Core アプリを実行するために最適化されています。

c. microsoft/dotnet:<バージョン>-runtime-deps

ランタイム依存関係イメージには、.NET Core に必要なすべてのネイティブ依存関係を含むオペレーティング システムが含まれています。 このイメージはスタンドアロン アプリケーション用です。

3. 画像の高速化

国内ネットワークの問題により、Docker イメージのその後のプルは非常に遅くなります。この問題を解決するためにアクセラレータを構成できます。私は NetEase ミラー アドレス http://hub-mirror.c.163.com を使用します。

新しいバージョンの Docker では、デーモンを構成するために/etc/docker/daemon.json(Linux)または %programdata%\docker\config\daemon.json (Windows) が使用されます。

これを設定ファイルに追加してください (そのようなファイルがない場合は、まず作成してください)。

{
"レジストリミラー": ["http://hub-mirror.c.163.com"]
}

#設定ファイルを更新してdockerを再起動します

systemctlデーモンリロード

systemctl dockerを再起動します

**********aliyunを使用する場合は、Alibaba Cloudアカウントにログインして独自のミラーアドレスを取得する必要があります***********

要約する

以上が、エディターが紹介した .NETCore Docker コンテナ化とプライベートイメージリポジトリ管理です。皆様のお役に立てれば幸いです。ご質問がございましたら、メッセージを残していただければ、エディターがすぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • .Net Core は Docker コンテナを展開します
  • ASP.NET Core 開発 Docker デプロイ
  • DockerはMysql、.Net6、Sqlserverなどのコンテナをデプロイします
  • .Net6 プロジェクトを Docker にデプロイする
  • Docker に .NET 5 をデプロイする方法
  • .Net Core で Docker を使用するための予備チュートリアル
  • docker を使用して Asp.net コア アプリケーションをデプロイするための完全な手順
  • Docker コンテナで ASP.NET Core を実行する手順
  • Docker を使用した .Net 開発と展開

<<:  Windows10でのMySQL 5.7.21のインストールと設定のチュートリアル

>>:  Vue 3.0 カスタムディレクティブの使い方

推薦する

Baidu百科事典UIの開発動向について議論する

<br />百度百科事典の正式版がついにオンラインになりました。2年間の「テスト版」の帽...

Dockerはコード検出プラットフォームSonarQubeを構築し、Mavenプロジェクトのプロセスを検出します

1 はじめに優れたコーディング習慣は優れたプログラマーが備えるべき資質ですが、コードの品質を保証する...

Docker クロスホストネットワークの実装 (手動)

1. Macvlan の紹介Macvlan が登場する前は、イーサネット カードに複数の IP ア...

MySQL 5.7.25 圧縮版のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 5.7.25圧縮版のインストールと設定方法を参考までに紹介します。具体的な...

Dockerはjenkins+mavenコード構築および展開プラットフォームを構築します

目次Docker の基本概念Docker インストール プロセス (Centos6.9)カーネルのア...

MySQLデータベースのマスタースレーブレプリケーションの長い遅延に対する解決策

序文MySQL マスター スレーブ レプリケーションの遅延は、業界では長年の問題となっています。遅延...

Vue Router の 10 の高度なヒントのまとめ

序文Vue Router は、Vue.js の公式ルーティング マネージャーです。 Vue.js の...

docker を使用して複数のネットワーク インターフェースを持つコンテナーを起動する方法の例

コンテナにネットワークインターフェースを追加する1 デフォルトのネットワークモードでコンテナを実行す...

Centos7にnginxをインストールする方法

必要な環境をインストールする1. gccのインストールnginx をインストールするには、公式サイト...

HTML 基本要約推奨事項 (タイトル)

HTML: タイトル見出しは <h1> - <h6> などのタグによって定...

MySQLの数値型自動増分における落とし穴

テーブル構造を設計する場合、数値型は最も一般的な型の 1 つですが、数値型をうまく使用するのは想像す...

Linux echo テキスト処理コマンドの使用法と例

Linux ヘルプ ドキュメントでの echo の説明は、Python や Java などのプログラ...

ElementUI の el-dropdown に複数のパラメータを実装する方法

最近、業務上のボタンの増加により、ページレイアウトにボタンが多すぎて、ページが美しくなく、ユーザーエ...

Nginx+FastDFSでイメージサーバーを構築

設置環境セントス環境依存性: yum -y gccをインストールします yum インストール -y ...

Linux での MySQL 5.6.27 インストール チュートリアル

この記事では、LinuxでのMySQL 5.6.27のインストールチュートリアルを参考までに紹介しま...