2019年10月24日、docker19.03.4は、
3.0 .netcore ドッキングウィンドウ・コン振り付けコンテナNginxは、MySQLのコンテナ、Webコンテナを使用し、asp.netコア3.0 Webサイトプロジェクトのコンテナの展開:要約
依存構造の紹介
samplemsという名前のWebサイト全体のプロジェクト、3個のコンテナ(依存順序による)の合計必要があります。
1.MySQL容器、という名前をsamplems.mysql
から、mysql
(公式)ミラー
2.web容器、という名前samplems.web
から、samplemsweb
(増築所有)ミラー
3名前の.nginx容器、samplems.nginx
から、samplemsnginx
画像(自分自身の外に構築)
3つのコンテナにドッキングウィンドウ・コン振り付けを使用するには、ブリッジネットワーク(名前の確立はsamplems-net
)3連絡します
ディレクトリ構造
展開するために必要なファイルを格納するために使用される展開フォルダ内のCentOS上の新展開、以下で説明するように、ファイル構造に展開は徐々に:(後に確立されます)
│ docker-compose.yml //compose编排文件
│
├─web //web 目录
│ │ Dockerfile //web docker配置文件
│ │
│ └─publish //web 发布文件(发布生成的内容)
│ ...
│ appsettings.json //发布文件中包含appsettings.json,其中有数据库连接配置
│ ...
│
└─nginx //nginx目录
│ Dockerfile //nginx docker配置文件
│
└─confs //nginx 配置文件目录
nginx.conf //nginx全局配置
samplems.conf //web项目对应的nginx配置文件
2段階の展開:
必要な画像の1建設
2.アレンジメントコンテナをドッキングウィンドウ、構成
必要な画像の構築
MySQLのミラー
このプロジェクトは、さらに修正パッケージ、直接プル(ダウンロード)公式画像なしで直接、MySQLの公式ミラーイメージを使用しています。
docker pull mysql
ミラーリングウェブ
Webプロジェクトの準備
以下でのVisual Studioは、MySQLデータベースの接続文字列のWebプロジェクト(中appsettings.json)で:
server=samplems.mysql;database=samplems;user=root;password=mysql@samplems
注意点:
- サーバー= samplems.mysql、このアドレスは、私たちのMySQLの船名です。
- ここでパスワード以降ドッキングウィンドウ-compose.ymlが一致するようにMySQLのパスワードを指定しました。
- 明示的に指定されていない接続文字列ポートは、それがデフォルトポート3306であります
ときにWebパブリッシングプロジェクト、ターゲット・ランタイムを選択するlinux-x64
か、可移植
次のように、フォルダを公開/デプロイ/ウェブに入れて、ターゲット・システムにコピーされたコンテンツを公開:
私は、Webプロジェクト名WebMvcのためにここにいるので、どこWebMvc.dllです以下DockerfileはDOTNET命令内のオブジェクト。
Dockerfileを書きます
以下のように、新しいDockerfileファイルの下に/ webフォルダを展開。
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
WORKDIR /app
COPY ./publish/ /app
EXPOSE 80
ENTRYPOINT ["dotnet","WebMvc.dll"]
平均以上の五の文章は以下のとおりです。
- ベースのmcr.microsoft.com/dotnet/core/aspnet:3.0ミラー(それがnetcore3.0 Webプロジェクトであるため)、自動的に画像をダウンロードします
- コンテナ内で動作するように/アプリケーションディレクトリ
- /ウェブ/の/アプリのすべての内容をコピーするフォルダを公開
- 80暴露コンテナ港
- WebMvc.dllが作業ディレクトリに、それは任意のパスを必要としないためDOTNET実行asp.netコアWebプロジェクトを使用して、ここでは、「WebMvc.dll」であります
建物のウェブミラー
デプロイ/ Webファイルに反映フォルダのビルドが:( samplemswebの間に次の命令やスペースに注意してください。、Samplemswebは)我々がイメージ名という名前のものです
docker build -t samplemsweb .
下図のように:
nginxのミラー
nginxの設定ファイル
展開/ nginxの/会議通話数/新しいファイルnginx.conf、このファイルには、コンフィギュレーション・ファイルnginxのは、次のとおりです。
user nginx;
worker_processes 1;
#error_log
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
client_max_body_size 256m;
client_body_buffer_size 50m;
access_log /var/log/nginx/access.log main;
#以下是 websocket 支持配置
#map $http_upgrade $connection_upgrade {
# default upgrade;
# '' close;
#}
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
以下のように、新しい文書の下で/ nginxの/会議通話数/ samplems.confをデプロイします。
# 设定负载均衡后台服务器列表
upstream composeserver {
#指定支持的调度算法
ip_hash;
server samplems.web:80;
}
#虚拟主机的配置
server {
listen 80;
location / {
proxy_pass http://composeserver;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#以下是 websocket 支持配置
#proxy_http_version 1.1;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection $connection_upgrade;
}
}
弊社のWebコンテナ、80の背面に、すなわちコンテナ港の名前ですSamplems.web
Dockerfileを書きます
新Dockerfileファイルのデプロイ/ nginxのフォルダ、次のように:
FROM nginx:latest
COPY ./confs/samplems.conf /etc/nginx/conf.d/default.conf
COPY ./confs/nginx.conf /etc/nginx/nginx.conf
上記の3つの文章があることを意味します:
- 最新の画像の建物に基づいてNginxは、自動的に画像をダウンロードします
- 会議通話数/ samplems.confコピーファイル/etc/nginx/conf.d/default.confへ
- /etc/nginx/nginx.confに会議通話数/ nginx.confコピーファイル
nginxのミラーの構築
次のコマンド:(ノートとの間samplemsnginx。スペースを使用してミラーの構築、Samplemsnginxは)我々がイメージ名という名前のものです
docker build -t samplemsnginx .
終了し、ドッキングウィンドウビューミラーリスト:
これまでのすべてのミラーが確立されています
ドッキングウィンドウ-compose.ymlを書きます
デプロイフォルダの新しいドッキングウィンドウ-compose.ymlファイルには、次のように:
version: '3.4'
services:
samplems.mysql:
image: mysql
container_name: samplems.mysql
ports:
- "3306:3306"
restart: always
environment:
- MYSQL_ROOT_PASSWORD=mysql@samplems
- TZ=Asia/Shanghai
volumes:
- /app/data/mysql:/var/lib/mysql
networks:
- samplems-net
samplems.web:
image: samplemsweb
container_name: samplems.web
restart: always
depends_on:
- samplems.mysql
environment:
- TZ=Asia/Shanghai
networks:
- samplems-net
samplems.nginx:
image: samplemsnginx
container_name: samplems.nginx
restart: always
ports:
- "80:80"
- "443:443"
environment:
- TZ=Asia/Shanghai
volumes:
- /app/logs/nginxlogs:/var/log/nginx
depends_on:
- samplems.web
networks:
- samplems-net
networks:
samplems-net:
driver: bridge
上に示したコード、サービスsamplems.mysql、samplems.web、samplems.nginx 3つ持っているファイル全体構造YML大別バージョン、サービス、ネットワーク3、
samplems.mysql:
- ミラーイメージは、ここでは、参照を表し、公式のMySQLです
- CONTAINER_NAME:コンテナ名(このフィールドの同様に定義される2つの他の容器)
- ホストポートのポート番号が3306、容器ポート3306にマッピングされたマップ(同様に、この分野の他の二つのコンテナを定義)
- 再起動:コンテナ出口(このフィールドの二つの他の船舶と同じ定義)を常に再起動した後、必ず再起動ポリシーを指定
- 環境はMySQLの@のsamplemsのためのMySQLのrootアカウントのパスワードで定義され、ここでパスワードWebプロジェクトは、一貫性を必要とします
- 定義された環境地域アジア上海コンテナ(このフィールドの二つの他のコンテナと同じ定義)、コンテナのゾーンを防ぎ、タイムゾーンは、ホストが、時間のずれを得ることはありません
- ボリュームは、データボリューム、(データがまだ存在していても、削除されるので、mysqlのコンテナ)ホスト/アプリ/データ/ mysqlのに書き込まれたファイルは/ var / libに/ mysqlのに書き込まれるすべてのコンテナをマウント
- カスタムブリッジネットワーク(このフィールドの二つの他のコンテナと同じ定義)を使用してsamplemsネットネットワーク
samplems.web:
- ここで参照画像は、ウェブの私たち自身のビルドの鏡です
- depends_onショーコンテナ最初samplems.mysqlを開始し、その後、samplems.webを開始
samplems.nginx:
- ここで参照画像は、nginxのの私たち自身のビルドの鏡です
- ポート80ポートは、デフォルトのHTTPポート443をデフォルトのHTTPSポートです
- ボリュームは、データボリュームをマウント、ファイルは/ var / log / nginxのに書き込まれるすべてのコンテナは、このログファイルにホスト/アプリ/ログ/ nginxlogsに書き込まれ、主nginxのです
- depends_onショーコンテナ最初samplems.webを開始し、その後、samplems.nginx、このようにして、はmysql-> WEB->のnginxの開始のためのオーダーを開始
コンテナを開始
すべての準備が完了しているこの時点では、コンテナのデプロイフォルダの開始時に次のコマンドを実行します。
docker-compose up -d
次の図は、3つの緑が行われるには、3つのコンテナには成功したスタートを表す:
使用ドッキングウィンドウは、ps、コンテナの実行状態を表示するには、それが実行されています。
ホストファイアウォールのポート80を開きます。
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo systemctl restart firewalld
CentOSのブラウザはIPアドレスにアクセスするには、Webページを表示することができます: