Dockerイメージをパッケージ化し、リモートサーバーにプッシュしてk8sにデプロイする方法

Dockerイメージをパッケージ化し、リモートサーバーにプッシュしてk8sにデプロイする方法

前提条件:

1. Docker サーバーでリモート アクセスが有効になっています。「証明書接続によるリモート Docker サーバー」を参照してください。

2. サーバー上に k8s クラスターが構築されています。この記事では、テストに k8s シングルポイント クラスターを使用します。

前回の記事では、idea docker プラグインを介してリモート docker サーバーに正常にアクセスできることをテストしました。この docker プラグインを使用して docker イメージをパッケージ化してプッシュすることもできますが、この記事では、Maven の docker-maven-plugin プラグインを使用して docker イメージをパッケージ化し、リモート docker サーバーにプッシュする別の方法を使用します。

1. Dockerファイル

Dockerfileファイルは、アプリケーションをDockerイメージにするために使用されます。

# jdk 環境のバージョンを指定して、java8 をベースにイメージを作成します。FROM java:8
# 一時ディレクトリ VOLUME /tmp をマウントします
# 指定された jar パッケージをコンテナに追加します [これは、プロジェクトのパッケージ化によって生成された jar パッケージの完全な名前です]
practice-job-0.0.1-SNAPSHOT.jar /practice-job.jar を追加します。
# コンテナによって公開されるポート番号(プロジェクトによって占有されるポート番号を参照)
エクスポーズ8081
# コンテナの起動後に実行されるコマンド ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/practice-job.jar" ]

2. pom設定

pom ファイルの関連構成は次のとおりです。リモート サーバーの IP アドレスを入力し、上記の Dockerfile のパスと、リモート Docker にアクセスするために必要な pem 証明書ファイルのパスを指定することに注意してください。

    <ビルド>
        <プラグイン>
            <プラグイン>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </プラグイン>
 
            <!--docker-maven-plugin プラグインを使用してサービスをイメージにパッケージ化し、docker サーバーに送信します-->
            <プラグイン>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <バージョン>1.2.2</バージョン>
                <!-- プラグインを特定のフェーズにバインドして実行します -->
                <処刑>
                    <実行>
                        <id>ビルドイメージ</id>
                        <!-- プラグインをパッケージ フェーズにバインドします。つまり、ユーザーは mvn package を実行するだけで、自動的に mvn docker:build が実行されます -->
                        <phase>パッケージ</phase>
                        <目標>
                            <goal>ビルド</goal>
                        </目標>
                    </実行>
                </処刑>
                <構成>
                    <forceTags> 真</forceTags>
                    <!-- 生成されるイメージ名を指定します。生成するイメージ名に変更します。 -->
                    <imageName>練習問題</imageName>
                    <!--タグを指定-->
                    <画像タグ>
                        <imageTag>最新</imageTag>
                    </画像タグ>
                    <!-- Dockerfile パスを指定します -->
                    <dockerディレクトリ>${project.basedir}</dockerディレクトリ>
                    <!-- リモート Docker アドレスを指定します -->
                    <dockerHost>https://パブリックネットワークIP:2376</dockerHost>
                    <!--pem 証明書ファイルのパス アドレスを指定します-->
                    <dockerCertPath>${project.basedir}/src/main/resources/pem</dockerCertPath>
                    <!-- 以下は、jar パッケージを docker コンテナの指定されたディレクトリにコピーするための構成です -->
                    <リソース>
                        <リソース>
                            <ターゲットパス>/</ターゲットパス>
                            <!--jar パッケージが配置されているパスはターゲット ディレクトリに対応します -->
                            <ディレクトリ>${project.build.directory}</ディレクトリ>
                            <!-- Dockerfile に追加されたファイル名に対応する、含める必要のある jar パッケージ -->
                            <include>${project.build.finalName}.jar</include>
                        </リソース>
                    </リソース>
                </構成>
            </プラグイン>
        </プラグイン>
    </ビルド>

3. イメージプッシュ

上記の準備が完了したら、インストールコマンドを実行します。しばらく待つと、以下のコンソールに BUILD SUCCESS と表示され、イメージのプッシュが成功したことが示されます。

次に、リモート サーバーに移動して確認し、docker images コマンドを入力してコンテナー イメージを表示します。

アプリケーション イメージが正常にプッシュされたことがわかります。次のステップはデプロイメント ステージです。

4. k8s デプロイメント

これまで、デプロイメント環境に Docker コンテナしかなかったのであれば、ここではアプリケーション イメージを docker で実行し、プロジェクトを Docker コンテナにデプロイしてアクセスするだけで済みます。しかし、現在のデプロイメント環境は k8s+docker なので、デプロイメント用にアプリケーション イメージを直接実行することはできません。k8s デプロイメントに進みましょう。

まず、practice-job-deployment.yaml と practice-job-service.yaml という 2 つの yaml ファイルを作成する必要があります。これら 2 つのファイルの機能には、k8s の概念が関係しています。k8s の概念については、以降の記事で説明します。ここでは、k8s のほとんどの構成が yaml ファイルに基づいて定義されていることを知っておくだけで十分です。

vi 実践ジョブデプロイメント.yaml

APIバージョン: v1
種類: 名前空間
メタデータ:
  名前: 練習
---
APIバージョン: アプリ/v1
種類: デプロイメント
メタデータ:
  名前: 実践的なジョブ展開
  名前空間: 練習
仕様:
  レプリカ: 1
  セレクタ:
    一致ラベル:
      アプリ: practice-job-pod
  テンプレート:
    メタデータ:
      ラベル:
        アプリ: practice-job-pod
    仕様:
      ホストネットワーク: true
      コンテナ:
        - 名前: 練習ジョブコンテナ
          image: practice-job:latest #イメージ名 + バージョンimagePullPolicy: Never #イメージのソースを示します。NotPresent がローカルで利用できない場合は、ハブ ウェアハウスからプルされます。Never はローカル ポートからのみを意味します。
            - コンテナポート: 8081
          環境:
            # ログファイルのパスを指定します - 名前:logging.path
              値: /var/logs

vi 練習ジョブサービス.yaml

APIバージョン: v1
種類: サービス
メタデータ:
  名前: 実践ジョブサービス
  名前空間: 練習
  ラベル:
    アプリ: 練習ジョブサービス
仕様:
  タイプ: NodePort
  セレクタ:
    アプリ: practice-job-pod
  ポート:
    - 名前: http
      プロトコル: TCP
      port: 8081 #サービス(内部)ポート targetPort: 8081 #ポッドポート nodePort: 32001 #サービス(外部)ポート

次に、コマンドを個別に実行します。

kubectl apply -f 実践ジョブのデプロイメント.yaml
kubectl apply -f 練習ジョブサービス.yaml 

コマンドを実行します: kubectl get pod --all-namespaces。ポッドを確認すると、プロジェクトのポッドが正常に実行されたことがわかります。

アプリケーションの実行ログを表示するには、kubectl logs practice-job-deployment-77d685767-glvgm -n practice コマンドを実行します。形式は次のとおりです: kubectl logs <pod name> -n <pod namespace>。

コマンドを実行します: docker ps プロジェクトがすでにコンテナ内で実行されていることがわかります

コマンド kubectl get service --all-namespaces を実行します。アプリケーションに対応するサービスが正常に開始され、公開されているポートが 32001 であることがわかります。これは、先ほど yaml ファイルで構成したポートです。

最後に、ブラウザはパブリック ネットワーク IP:32001/doc.html にアクセスします。このパスは私のプロジェクト専用であり、プロジェクトによってパスは異なります。ファイアウォールで対応するポートを開く必要があることに注意してください。

この時点で、アプリケーションはローカルの Docker イメージからパッケージ化され、サーバーにプッシュされ、その後 k8s+docker コンテナーにデプロイされます。

これで、docker イメージをパッケージ化してリモート サーバーにプッシュし、k8s にデプロイする手順に関するこの記事は終了です。より関連性の高い docker イメージのパッケージ化と k8s へのデプロイについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • docker を使用して Spring Boot をデプロイし、Skywalking に接続する方法
  • Dockerでk8sをデプロイする方法
  • Dockerコンテナのk8sデプロイメントの実装
  • Docker 学習ノート k8s デプロイ方法
  • Skywalking は Docker イメージをコンテナ化してデプロイし、テストから可用性まで k8s を構築します。

<<:  最もよく使用されるJavaScriptイベントについて詳しく学ぶ

>>:  ウェブサイトに天気予報を挿入する方法

推薦する

Nodejs で WeChat アカウント分割を実装するためのサンプルコード

会社のビジネスシナリオでは、WeChat アカウント分割機能を使用する必要があります。公式 Web ...

CSSスクロールバーのスタイルをカスタマイズする方法の詳細な説明

この記事では、CSS スクロールバー セレクターを紹介し、Webkit ブラウザーと IE ブラウザ...

WMLタグの概要

構造関連タグ--------------------------------------------...

Vue3.0でカスタム命令を書くための簡単な手順

序文Vue には、v-if、v-bind、v-on などの豊富な組み込みディレクティブが用意されてい...

MySQL 時間統計方法の概要

データベースの統計を行う場合、多くの場合、年、月、日に基づいてデータを収集し、echart を使用し...

Markodwnによるタイトル配置による同期スクロールのアイデアの詳細な説明

序文私が作成中の Markodwn エディターに同期スクロール機能を追加する必要があります。Baid...

Dockerで構築されたコンテナにpingツールをインストールする

Centos や Ubuntu など、Docker が pull する Base イメージは最もシン...

MySql8.0.19 インストールピットレコードを共有する

前回の記事ではMySql8.0.19のインストール手順を紹介しました。必要な方はクリックしてご覧くだ...

MySQLのストレージエンジンについてお話しましょう

基礎リレーショナル データベースでは、各データ テーブルはファイルに相当し、異なるストレージ エンジ...

Spring jdbc のデータベース操作オブジェクト モデルの詳細な例

Spring jdbc のデータベース操作オブジェクト モデルの詳細な例Spring Jdbc デー...

Facebookの情報アーキテクチャの分析

<br />原文: http://uicom.net/blog/?p=762 Faceb...

CSS3 で Taobao に空白スペースを実装する方法

Taobao用の空白スペースを作成します。 ブラウザページを縮小すると、コンテンツ領域は縮小されませ...

Vue で Excel ストリーム ファイルをダウンロードし、ダウンロード ファイル名を設定する方法

目次概要1. URL経由でダウンロード2. aタグのダウンロード属性とblobコンストラクタを組み合...

Linux で履歴レコードを表示し、タイムスタンプを追加するためのヒント

Linux で履歴レコードを表示し、タイムスタンプを追加するためのヒントbashに詳しい人なら、hi...

Win10 64 ビットで圧縮パッケージを使用して最新の MySQL 8.0.18 をインストールするチュートリアル (画像とテキスト付き)

WIN10 64ビットに最新のMySQL8.0.18をインストールダウンロード公式サイトから最新バ...