この記事はWeChatの公開アカウント「Sea Monster Who Writes Code」から転載したもので、著者はSea Monster Who Writes Codeです。この記事を転載する場合は、コードを書いているSea Monsterの公式アカウントまでご連絡ください。 序文多くの人が Docker のデプロイメントについて頭を悩ませていると思います。私も同じです。 最近、私は非常に興味深い現象を発見しました。ある技術を習得したいと思って習得した後、別の技術を習得しなければならない問題が発生すると、その人がそれまでどれだけ熱心に熱心に学習していたとしても、この時点で諦めてしまう可能性が 99% あります。私はこの現象を「学習の窓」と呼びたいと思います。 多くの人にとって、Web サイトの作成と Vue.js の学習は「学習の窓口」となります。この「学習期間」を過ぎると、彼らはもう学習したくなくなります。「たくさん学んだのに、なぜ最後にデプロイメントを学習しなければならないのか?」 したがって、この記事では Docker のデプロイメントに関するいくつかの点について説明します。 必要国際的な慣行によれば、私たちはいくつかのことだけを完了する非常に単純な要件から始めます。 ToDo リストを表示 + ToDo を追加 ウェブサイト訪問を記録する 上記は、これ以上ないほど古典的な Todo リスト アプリケーションです。 要件を分析します。ToDo リストはデータベースを使用して完了する必要があり、Web サイト訪問の記録は高速読み取りキャッシュを使用して完了する必要があります。 技術の選択現在、私のフロントエンドテクノロジースタックは React.js なので、フロントエンドでは React.js を使用しています。 Express には独自のスキャフォールディングがあるため、バックエンドでは Express が使用されます。 データベースに関しては、M1 Mac を使用しているため、MySQL イメージをプルすることができず、代わりに一時的に MariaDB を使用しています。 キャッシュは誰もがよく知っているので、redis を使用してキャッシュを実行します。 フロントエンド実装フロントエンドの実装は非常にシンプルで、リクエストの送信には axios が使用されます。
バックエンド実装バックエンドは少し面倒で、解決すべき問題は次のとおりです。
まず main.ts でルーティングを構成します。
トラフィック ルーティングでは、高速な読み取りと書き込みを実現するために Redis が必要です。
todo ルートは、sequelize ライブラリを使用してデータベースに接続し、初期化します。
ローカルで実行本来、次のコマンドを使用してローカル アプリケーションを実行できます。
しかし、ローカルに mariadb と redis がないので、少し困難です。 コンテナを起動する以前は、通常、次のコマンドを使用して、Mac に mariadb と redis をインストールしていました。
その後、プロジェクトをローカルで実行する前に、コンピューター上で設定 (ユーザー名、パスワードなど) を行う必要があり、非常に面倒です。そして、設定が間違っていたら、再インストールしなければなりません。 。 。 Docker の機能の 1 つは、mariadb と redis を異なるイメージにパッケージ化し、DockerHub を使用して統合管理することです。 Docker を使用すると、サービスをすばやく構成できます。 以前は、コンピューターにインストールできる MySQL は 1 つだけでした。これで、8 つの MySQL コンテナ (異なるポートを使用) を同時に実行できるようになりました。必要なものを削除したりインストールしたりできます。疑わしい場合は、まずコンテナを再起動してください。再起動しても問題が解決しない場合は、イメージを使用してコンテナを構築します。ビルドが機能しない場合は、最新のイメージをプルして再度ビルドしてください。とてもかっこいいですね。 では、早速Redisを起動してみましょう。
次に、mariadb を起動します。
パラメーター -p はポート マッピング: ローカル マシン: コンテナー、-e は環境変数を指定し、-d はバックグラウンド実行を意味することを説明します。 もう一度実行します:
http://localhost:3000 でページを見ることができます: 大丈夫みたいですよ〜 docker-composeもし今、マシンが与えられたら、それをどのように展開するか想像してみてください。最初に上記の 2 つの docker コマンドを実行し、次に以下の 2 つの npm コマンドを実行する必要があります。面倒だ。 ワンクリックでmariadbコンテナとredisコンテナを起動できますか?ここで docker-compose.yml が登場します。dev-docker-compose.yml ファイルを作成します。
この yml ファイルに記述されている内容は、実際には上記の 2 つの docker コマンドと同等です。利点は2つあります。
今後は、ローカル サービスを実行するときに、mariadb と redis をワンクリックで起動できます。
Dockerファイルしかし、本番環境ではこれら 2 つの npm コマンドを毎回実行するのは依然として面倒です。これら 2 行も docker-compose に統合できますか? 注: 通常の開発プロセスでは、npm run build を使用して本番環境でアプリケーションをビルドし、ビルドされた JS を実行します。プロセスを簡略化するために、npm run start を例として使用します。 docker-compose はイメージを通じてコンテナを作成するので、React アプリと Express アプリも 2 つのイメージにパッケージ化して、docker-compose を使用して個別にコンテナを作成してもよいのではないでしょうか。 簡単に言えば、コンテナの構築は「CICD またはビルド パイプライン」と呼ばれることが多いのですが、この「パイプライン」の鍵となるのは npm run start 1 つだけです。 「パイプライン」を記述するファイルは Dockerfile と呼ばれます (キャメルケースで記述されていないことに注意してください)。 注: 通常のイメージ構築と起動は、プロジェクト全体の CICD の一部である必要があります。これは単なる例です。プロジェクトの CICD には、コマンドの実行やアプリケーションの構築に加えて、コード チェック、感度低下チェック、メッセージ プッシュ公開などの、より複雑な一連のプロセスも含まれています。 まず、React Dockerfile を整理します。
とても簡単です。コンテナはコンピュータ内のコンピュータとも見なすことができるため、コンピュータ上のファイルを「コンテナ コンピュータ」にコピーすることは非常に必要な手順であることに注意してください。 Express App の Dockerfile は上記のものとほぼ同じです。
次に、prod-docker-compose.yml ファイルを変更します。
上記の構成は理解するのが難しくないはずですが、注意すべき詳細がいくつかあります。
次に、次のコマンドを実行して、ワンクリックで起動します。
次の --build は、実行するたびにイメージをビルドすることを意味します。 しかし、ブーム:
なぜ接続できないのですか? 接続できない問題を解決する接続できない理由は、ここでは localhost と 127.0.0.1 を使用しているためです。 各コンテナはホストの 127.0.0.1 ネットワーク内にありますが、コンテナは互いの IP アドレスを介して通信し、相互にアクセスする必要があります。公式サイトの紹介によると、コンテナ名を通じて他のコンテナの IP アドレスを取得できるとのことです。 したがって、Express App のホストは 127.0.0.1 ではなく、docker-todo-redis と docker-todo-mariadb である必要があります。以下では、環境変数 NODE_ENV を使用して、アプリが Docker で起動されたかどうかを区別します。 mariadb 接続を変更します。
次に、Redis 接続を変更します。
次に、/server/Dockerfile に NODE_ENV=docker を追加します。
次に、「ワンクリック スタート」コマンドを実行して、本番環境を起動します。
要約する簡単に言えば、Dockerfile は Docker イメージを構築するために使用され、私たちが普段使用する CICD やパイプラインに多少似ています。 docker-compose の機能は、1 回のクリックで N 個のコンテナを「プルアップ」することです。 上記の例全体は Github で公開されており、クローンして自分で試してみることができます。 |
<<: Kubernetes で Apache Spark を実行する方法
>>: 政府クラウドとパブリッククラウドの市場規模は2020年に81.4億人民元に達した
2015 年 4 月 30 日、Green Alliance Technology は 2014 年...
概要: Android チャネル操作では何に注意すべきでしょうか? 1. チャンネルのゲームプレイと...
1. Kubernetesとは Kubernetes は、大規模なコンテナ化されたアプリケーションの...
検索キーワードを購入し、Baidu(Weibo)のプロモーションプラットフォームを活用することで、多...
アドバンテックは、2018年11月1日~2日に開催されたアドバンテックIoT共創サミットにおいて、プ...
背景AnalyticDB for PostgreSQL (略称 ADB PG) は、PostgreS...
場合によっては、Web サイトにリンク可能なコンテンツが不足していることがあります。これを解決するに...
cmivps は香港データセンターに独立したサーバーを追加しました。これらの香港サーバーは、2*e5...
6月9日から10日まで、「金融電子化」誌が主催し、福建省農村信用協同組合連合会と福建海峡銀行が共催す...
オラクルの第4四半期決算報告によると、同社の業績は前年同期比でわずかに遅れをとったものの、非GAAP...
今では SEO を学ぶことは 4 年前ほど難しくありません。当時、SEO トレーニングに参加したとき...
desivps は現在、米国ロサンゼルスのデータセンターで、無制限のトラフィック、1Gbps の帯域...
現在のオンライン募集の普及は、実は私たちがこの業界に入った当初は想像もしていなかったことです。という...
Fiberstateは新しいビジネスです。主な業務は、ソルトレイクシティのコンピュータールームでのサ...
デスクトップ PC の絶対的な中核ビジネスとして、検索は常にインターネット企業やウェブマスターによる...