前提条件: 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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: 最もよく使用されるJavaScriptイベントについて詳しく学ぶ
Vueドロップダウンリストの2つの実装最初の方法はv-forを使用する <el-select ...
2 つのテーブルを関連付けるときに、外部キーを作成できませんでした。このブログから、問題は、ポイント...
プロジェクトでは、何らかの不可逆的な理由により、テーブルに保存されたデータがページの表示要件を満たす...
方法1: MySQL では、次のコマンド ラインで MySQL サーバーを起動することにより、アクセ...
目次初期化初期化状態()初期化プロパティ()初期化データ()観察する()オブザーバーリアクティブを定...
Redis の紹介Redis は完全にオープンソースで無料であり、BSD プロトコルに準拠しており、...
目次DockerコンテナのエクスポートDockerコンテナのインポートこの記事では主に、コンテナ...
MySQL メモリ テーブルと一時テーブルの使用メモリテーブル: セッション 1 $ mysql -...
序文データベース トランザクションに関して言えば、トランザクションの ACID 特性、分離レベル、解...
データは企業の中核資産であり、企業にとって最も重要なタスクの 1 つです。注意しないと、データが意図...
目次1. クロージャを使用する2. ES6クラスを使用する3. ES2020提案を使用する4. We...
すべてのオーケストレーション ファイルと構成ファイルは、私の Github からアクセスできます。構...
目次DockerのインストールNvidia-docker のインストールDockerのインストール1...
垂直分割垂直分割とは、データテーブルの列を分割すること、つまり、多くの列を持つテーブルを複数のテーブ...
この記事では、チャット機能を簡単に実装するためのVue+Websocketの具体的なコードを参考まで...