前提条件: 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イベントについて詳しく学ぶ
1. left(name,4)は左の4文字をインターセプトしますリスト: SELECT LEFT(2...
問題の説明プロジェクトのログインページでは、7日間パスワードを記憶する必要がある機能があります。この...
1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...
目次エフェクト表示コードリンクキーコード表形式データコンポーネントのネスト検証方法リセット方法完全な...
目次序文1. 親コンポーネントが子コンポーネントに値を渡す2. サブコンポーネントのprops型制約...
序文職場で次のような状況に遭遇しました。ログ システムのテーブルでは、時間フィールドには日付データで...
この記事では主に、MySQL でテーブルを削除する 3 つの操作、つまり delete ステートメン...
<br />かつて、仏印と東坡氏が仏教について雑談していたとき、東坡氏が突然こう言った。...
データ表示は、常にあらゆる職業の人々が求めているものです。特にフロントエンド開発業界では、データを表...
目次非同期とは何ですか?なぜ非同期性が必要なのでしょうか?非同期IOとは何ですか?イベントループとは...
導入1.<iframe> タグ: iframe は、ページ内に内部フレームを生成するイン...
まず、コマンドラインまたはワークベンチを使用して MySQL にログインできず、「ユーザー '...
前回の記事「1行のCSSコードの魅力」では、たった1行のCSSコードで生成できる美しい(奇妙な感じと...
通常は ul、li を介して選択のデフォルト スタイルを変更して、実現をシミュレートします。このよう...
1. Animate.css の紹介Animate.css は、Web プロジェクトですぐに使用で...