以前、フルスタック ノード プロジェクトを実行しましたが、サーバー側のテクノロジ スタックは nginx + koa + postgresql でした。 CentOS 上で環境構築とデプロイがかなり面倒でした。テストサーバーをデプロイし、オンラインになったら本番環境サーバーをデプロイしました。そこには、退屈で、エネルギーを消費し、感謝されない「肉体労働」が数多く含まれています。そこで、ビルドとデプロイメントの作業のこの部分を自動化する方法を考え始め、Docker にたどり着きました。 DockerとはDocker は仮想マシンよりもさらに軽量な仮想化技術です。仮想化される実体はコンテナと呼ばれます。コンテナ自体は、分離されたスコープを持つサンドボックスです。基本的なライブラリとそれが運ぶサービスだけが含まれており、非常に合理化されています。コンテナが実行されるや否や、コンテナはホストマシン内の単なるプロセスとなり、リソースをほとんど占有しません。これにより、優れた操作性と柔軟性を備えた、オペレーティングシステム上でコンテナ クラスターを実行するための条件が整います。 イメージとコンテナの関係は何ですか?イメージはクラス、コンテナはオブジェクトと考えることができます。コンテナはイメージをインスタンス化することで生成されます。もちろん、1 つのイメージから複数のコンテナを生成することもできます。 クライアントサイドDockerサーバー上でない場合、クライアント上で Docker をどのように使用すればよいでしょうか? Docker Desktop は Windows と OSX、さらに Kitematic で使用でき、どちらもデスクトップ管理ツールであり、一般的な操作に非常に便利です。 Docker Desktop と Kitematic は一部の操作のみを視覚化しており、多くの操作はコマンドラインを使用してのみ実行できるため、コマンドラインは依然として必要です。 基本的なDocker操作画像名イメージタグに関して、例えばnginx:1.19.0-alpineの場合、1.19.0はnginxのバージョン番号、alpineはOSのコード名です。
アルパインが一番小さいバージョンで、中には他のバージョンの 4 分の 1 の大きさのものもあります。つまり、ロードされるコンポーネントが少なくなるため、イメージの構築が高速化され、より効率的に実行されるようになり、結果として脆弱性が減少し、セキュリティが向上します。 画像をプルするdocker pull nginx:1.19.0-alpine コンテナを起動する
docker run --name web -p 8080:80 -v /usr/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx:1.19.0-alpine その他の操作
Dockerファイルイメージをビルドするより便利な方法は、イメージの設定ファイルである Dockerfile を使用することです。Dockerfile があれば、いつでもイメージをビルドできます。以下は、構築中に使用されるベース イメージから、非常にシンプルな nginx イメージを構築する方法です。 nginxから nginx.conf をコピー /etc/nginx/nginx.conf Docker の作成プロジェクトに単一のコンテナだけでなく複数のコンテナを実行する必要があり、コンテナが相互に通信する必要がある場合は、より強力な管理ツールが必要になります。たとえば、k8s ですが、現在の小規模なプロジェクトでは、公式の Docker-compose で十分です。 まず、docker-compose.yml 構成ファイルが必要です。たとえば、次のテンプレートは 2 つのコンテナ用です。Image は使用されるイメージ、ports はポート マッピング、volumes はマッピングする必要があるデータ ボリュームを示します。 バージョン: "3" サービス: ウェブアプリ: 画像: ウェブ ポート: - 「8080:80」 ボリューム: - "/データ" レディス: 画像: "redis:alpine" 次に、次のコマンド ラインを使用できます。 docker-compose build [options] [SERVICE...] #プロジェクト内のサービスコンテナをビルド(再構築)します docker-compose up -d # Composeプロジェクトを実行します(バックグラウンド実行) docker-compose up は非常に強力なコマンドで、イメージの構築、サービスの(再)作成、サービスの開始、サービス関連コンテナの関連付けなど、一連の操作を自動的に完了しようとします。リンクされたサービスは、すでに実行されていない限り、自動的に開始されます。ほとんどの場合、このコマンドを通じてプロジェクトを直接開始できると言えます。 nginx-node-postgresプロジェクトをビルドする上記の基盤があれば、独自のプロジェクトを構築することができます。まず、ノードサービスのDockerfileは主に以下の手順を実行します。
ノード:14.5.0-alpine3.12 から # 作業ディレクトリ WORKDIR /usr/src/app # 設定ファイルをコピーします COPY package*.json ./ process.yml をコピーします。 npm set registry を実行します https://registry.npm.taobao.org/ \ && npm をインストール pm2 -g \ && npm インストール # pm2 を使用して CMD を管理します ["pm2-runtime", "process.yml", "--only", "app", "--env", "production"] エクスポーズ3010 次にdocker-compose.ymlを設定します
バージョン: '3' サービス: デシベル: イメージ: postgres:12.3-alpine コンテナ名: postgres 環境: - TZ=アジア/上海 - POSTGRES_PASSWORD=xxxx です ボリューム: - ./postgres/data:/var/lib/postgresql/data ./postgres/init:/docker-entrypoint-initdb.d を参照してください。 ポート: -5432:5432 restart: always #常に再起動してください。本番環境での推奨設定は常に再起動してください。 さらす: - 5432 アプリ: 画像: koa-pg コンテナ名: koa ボリューム: - ./dist:/usr/src/app/dist - ./logs:/usr/src/app/logs 建てる: 。/ 環境: - TZ=アジア/上海 再起動: 常に 依存: -db リンク: -db さらす: - 3010 nginx: イメージ: nginx:1.19.0-alpine コンテナ名: nginx ボリューム: - ./nginx.conf:/etc/nginx/nginx.conf ポート: -8080:80 環境: - TZ=アジア/上海 再起動: 常に 依存: - アプリ リンク: # nginx 転送を構成するには IP ではなくホスト名を使用します - アプリ さらす: - 8080 プロジェクトを設定したら、次のステップはそれを実行することです。 docker-compose を起動する これは、ローカル開発マシンの場合もそうですし、サーバーにデプロイする場合も同様です。必要な数のサーバーをデプロイできます。Docker がインストールされていれば、コマンドライン 1 つだけで解決できます。 いくつかのコンテナを起動するには、docker-compose.yml の設定を変更し、docker-compose up を再度実行します。とても簡単です! これで、Docker を使用して Node プロジェクトをビルドしてデプロイする手順に関するこの記事は終了です。Docker を使用して Node をビルドしてデプロイする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: MySql 8.0 と対応するドライバー パッケージの一致に関する注意事項
目次序文矢印関数一般的な配列操作をマスターするスプレッド演算子オブジェクトの省略形構造化割り当てデー...
設定ファイルを server.xml と content.xml に書き込みます。サーバーを再起動す...
操作前に必ずお読みください:注意:管理に rancher を使用する場合は、k8s クラスターが構築...
CSS には多くの属性があります。特に複数の値を設定する必要がある属性は、長期間使用しないと忘れられ...
目次インストール: 1. ファイアウォールの基本的な使い方2. ファイアウォールd-cmdを設定する...
目次1. binlogの3つのモード1.ステートメントレベルモード2. 行レベルモード3. 混合モー...
HTML でアンカーの位置を設定する方法はいくつかあるので、ここで紹介します。 1. ID ポジショ...
ファイル名が少ないファイルを表示ファイル名を少なく | grep -n コンテンツを検索内容に応じて...
目次1. 書き込み可能: 書き込み可能2. 列挙可能: 列挙可能3. 設定可能: 設定可能オブジェク...
今日、非常に奇妙な状況に遭遇しました。docker イメージを更新した後、docker-compos...
1. 全体的な手順冒頭で、RabbitMQ サービスをインストールして実行する方法を紹介しましたが、...
3D効果を実現するには、主にCSSのpreserve-3dプロパティとperspectiveプロパテ...
DockerデーモンソケットDocker デーモンは、 unix 、 tcp 、 fdの 3 種類の...
目次1. リテラル値でオブジェクトを作成する2. 新しいキャラクターを使ってオブジェクトを作成する3...
目次導入リンク始めるコードを読み進めてくださいプロキシ設定傍受を要求する異なるプレフィックスを持つイ...