Docker を使用してイメージをローカルにパッケージ化してデプロイする方法

Docker を使用してイメージをローカルにパッケージ化してデプロイする方法

初めてDockerを使用してイメージをローカルにパッケージ化してデプロイする

まず、私のラップトップシステムはMACOS 10.15.4です
私がインストールしたdockerのバージョンはv19.03.5です

1. プロジェクトの構造は次のとおりです。

これは React プロジェクトであり、パッケージ化された静的リソース パスは dist ディレクトリです。

ここに画像の説明を挿入

2. フォーカスDockerfileとdocker/nginx.conf ファイル

1. Dockerfileはイメージを構築するために使われるテキストファイルです。詳しい紹介については、リンクを参照してください: Docker Dockerfile

私の Dockerfile の内容は次のとおりです。

nginxから
ワークディレクトリ /usr/src/app/
./docker/nginx.conf /etc/nginx/conf.d/default.conf をコピーします。
./dist /usr/share/nginx/html/ をコピーします。
エクスポーズ80
CMD ["nginx", "-g", "デーモンオフ;"]

Dockerfile 内の大文字の単語はコマンドです。各コマンドの意味は次のように説明されます。

  • FROM: カスタマイズされたイメージはすべて FROM イメージに基づいています。ここで、nginx はカスタマイズに必要な基本イメージです。以降の操作はすべて nginx に基づいています。
  • RUN: 後続のコマンド ラインを実行するために使用されます。形式は 2 つあります。
  • WORKDIR: 作業ディレクトリを指定します。 WORKDIR で指定された作業ディレクトリは、ビルドされたイメージのすべてのレイヤーに存在します。 WORKDIR で指定する作業ディレクトリは事前に作成しておく必要があります。 docker build イメージ構築プロセス中に、各 RUN コマンドによって新しいレイヤーが作成されます。 WORKDIR 経由で作成されたディレクトリのみが保持されます。
  • COPY: コピー命令。コンテキスト ディレクトリからコンテナー内の指定されたパスにファイルまたはディレクトリをコピーします。
  • EXPOSE: ポートを宣言するだけです。目的: イメージ ユーザーがイメージ サービスのデーモン ポートを理解し、マッピングの構成を容易にできるようにします。実行時にランダム ポート マッピングを使用する場合 (つまり、docker run -P)、EXPOSE ポートは自動的にランダムにマッピングされます。
  • CMD: RUN 命令と同様に、プログラムを実行するために使用されますが、2 つは異なるタイミングで実行されます。CMD は docker run 時に実行されます。 RUN は docker build にあります。機能: 起動したコンテナに対して実行するデフォルトのプログラムを指定します。プログラムが終了するとコンテナも終了します。 CMD 命令で指定されたプログラムは、docker run コマンドライン引数で指定されたプログラムによって上書きできます。注意: Dockerfile に複数の CMD 命令がある場合、最後の命令のみが有効になります。

2. docker/nginx.conf

サーバー{
  聞く 80;
  # gzip 設定
  gzip オン;
  gzip_min_length 1k;
  gzip_comp_レベル9;
  gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
  gzip_vary オン;
  gzip_disable "MSIE [1-6]\.";
  クライアントの最大ボディサイズは100mです。

  ルート /usr/share/nginx/html;

  位置 / {
    try_files $uri $uri/ /index.html;
  }
  場所 /api/ {
  	# バックエンドのアドレスは proxy_pass http://www.XXX.com/ です。
  }
}

3. docker buildコマンドを実行してイメージを作成する

実行したコマンドは、 docker build -t mydocker .
-t: イメージにmydockerというタグを付ける
最後にドットを忘れないでください。これは現在のパスにミラーイメージを作成することを意味します。

4. docker runを実行してイメージをデプロイする

実行したコマンドは: docker run -p 80:80 mydocker
-pはローカルマシンにマップされたポートを指定します
docker run -p ローカルポート: ミラーポート ミラー名

5. localhost:80を開いてプロジェクトを確認します

これは私にとって初めての Docker ローカル デプロイメントの経験です。多くの原則と Docker コマンドについてまだよくわかっていません。今後、さらに詳しく学習していきます。

ちょっとした問題を追記しておきます。今日、突然会社のプライベートクラウドにイメージをプッシュできなくなりました。ネットワーク環境の問題だったので、同僚にプッシュを手伝ってもらいました。
まずパッケージ化されたイメージをローカルに保存します。

docker save 10.10.10.52:5000/zhanwu-study/prod:4.1.2 > study.tar

次に、現在のディレクトリに生成された study.tar ファイルを DingTalk 経由で同僚に送信します。同僚は study.tar ファイルをローカル コンピューターにダウンロードし、次のコマンドを実行します。

docker load < study.tar

バージョンを更新します (新しいイメージは生成されず、2 つのバージョンは同じイメージになります)。

docker タグ 10.10.10.52:5000/zhanwu-study/prod:4.1.2 10.10.10.52:5000/zhanwu-study/prod:4.1.3

次に、プライベート クラウドにプッシュします。

docker push 10.10.10.52:5000/zhanwu-study/prod:4.1.3

これで、docker を使用してイメージをローカルにパッケージ化してデプロイする方法についての説明は終わりです。より関連性の高いローカル docker パッケージ化およびデプロイ イメージについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Dockerの国内イメージソースを変更する方法
  • Dockerはイメージ名とTAG操作の名前を変更します
  • Dockerイメージ内のファイルを表示する方法
  • Docker buildx を使用してマルチプラットフォーム イメージをビルドし、プライベート リポジトリにプッシュする方法
  • Azure Container Registry を使用してイメージを保存する際の問題

<<:  VUE ユニアプリコア知識の簡単な紹介

>>:  XHTML 入門チュートリアル: テキストの書式設定と特殊文字

推薦する

冗長カーネルを削除するLinuxディープインの実装方法

前の記事では、deepin linux に新しいカーネルを手動でインストールする方法について説明しま...

VUE無限レベルツリーデータ構造表示の実装

目次コンポーネントの再帰呼び出しレンダリングメソッドの使用プロジェクトに取り組んでいると、左側のメニ...

Linux lseek関数の使い方の詳しい説明

注:記事に誤りがある場合は、メッセージを残して指摘してください。ご協力ありがとうございます。名前名前...

VMware 仮想マシンに固定 IP アドレスを設定する方法 (グラフィック チュートリアル)

1. メニューバーで「編集」→「仮想ネットワーク エディター」を選択して仮想ネットワーク エディタ...

Day.js をベースにした JavaScript での日付処理のよりエレガントな方法

目次day.js を使用する理由モーメントデイ.js day.js がなければどうなるでしょうか? ...

nginx でネストされた if メソッドを実装する方法

Nginx はネストされた if ステートメントをサポートしておらず、if ステートメントでの論理判...

ファイルアップロードスタイルの詳細を実装するjs

目次1. 概要2. オブジェクト作成のパラメータ3. 監視例4. 使用方法5. ソースコード1. 概...

HTMLとリソースがどのように読み込まれるかを理解します

このブログのすべてのコンテンツは、クリエイティブ コモンズ ライセンスの下でライセンスされています。...

CocosCreator 入門チュートリアル: ネットワーク通信

ネットワーク通信の概要オンライン ゲームを開発する場合、必然的にネットワーク通信に対処する必要があり...

Vue3+Vue-cli4 プロジェクトで Tencent スライダー検証コードを使用する方法

導入:従来の画像検証コードと比較して、スライダー検証コードには次の利点があります。サーバーは検証コー...

フォームのmethod=post/getの違い

フォームは、get と post の 2 つのデータ転送方法を提供します。どちらもデータを送信する方...

MySQL データ操作 - DML ステートメントの使用

例示するDML(データ操作言語)とは、データベースの追加、削除、変更を行うための操作命令のことです。...

CSS3ダイヤモンドパズルはdivのみを回転し、背景画像は回転しない機能を実現します

需要背景プロジェクトはVueを使用して作成され、ビジネス要件にはパズル効果があります。デフォルトの背...

マインスイーパゲームを実装するための jQuery プラグイン (3)

この記事では、jQueryプラグインを使用してマインスイーパゲームを実装する方法に関する3番目の記事...