IDEA が Docker を統合してリモート展開を実現するための手順

IDEA が Docker を統合してリモート展開を実現するための手順

1. Dockerサーバーへのリモートアクセスを有効にする

docker が配置されているリモート サーバーにログインし、 vim /usr/lib/systemd/system/docker.serviceコマンドを使用して構成ファイルを変更します。変更を行う際には、アカウントに適切な権限があることを確認してください。

主な操作は、 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock の行をコメントアウトし、その後に新しい行を追加します。ポート 2375 を開き、docker へのリモート接続をサポートするために -H tcp://0.0.0.0:2375 を追加しました

#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
実行開始=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

設定ファイルを保存したら、設定を再読み込みしてDockerを再起動する必要があります。次のコマンドを使用できます。

systemctlデーモンリロード
systemctl docker.service を再起動します。

2. IDEAにdockerプラグインをインストールする

通常、新しい IDEA は docker プラグインにバインドされています。バインドされていない場合は、IDEA のプラグインで docker プラグインを検索してインストールします。インストール後、システムを再起動して有効にします。

ここに画像の説明を挿入

再起動後、ビルド、実行、展開 ——> DockerパスでDockerプラグインを見つけ、リモートDockerに接続するための新しい構成を追加します。

ここに画像の説明を挿入

接続が成功すると、IDEA プラグイン パネルでリモート Docker ホストのイメージとコンテナ、およびコンテナ操作のログやその他の情報を表示できます。

ここに画像の説明を挿入

3. Dockerイメージのビルドとアップロード

ローカルにパッケージ化された jar を Docker イメージにビルドするには、プロジェクトの pom ファイルにビルド プラグイン構成を追加する必要があります。以下は、SpringBoot プロジェクト モジュールのパッケージ構成です。重要なポイントは次のとおりです。

nathan-api という名前の jar パッケージをビルドします。まず、spring-boot-maven-plugin プラグインを追加し、docker-maven-plugin プラグインを追加して、docker イメージの主要なプロパティを構成します。このプラグインは、com.spotify.docker-maven-plugin jar パッケージをダウンロードすることに注意してください。ダウンロードが失敗した場合は、いくつかのバージョンを変更してみてください。バージョンのリストについては、Maven Central Repository を参照してください。
 <ビルド>
     <finalName>nathan-api</finalName>
     <プラグイン>
         <プラグイン>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
             <バージョン>2.4.2</バージョン>
             <処刑>
                 <実行>
                     <目標>
                         <goal>再パッケージ化</goal>
                     </目標>
                 </実行>
             </処刑>
         </プラグイン>

         <プラグイン>
             <groupId>com.spotify</groupId>
             <artifactId>docker-maven-plugin</artifactId>
             <バージョン>1.1.0</バージョン>
             <!-- プラグインを特定のフェーズにバインドして実行します -->
             <処刑>
                 <実行>
                     <id>ビルドイメージ</id>
                     <!-- ユーザーは mvn package を実行するだけで、mvn docker:build が自動的に実行されます -->
                     <phase>パッケージ</phase>
                     <目標>
                         <goal>ビルド</goal>
                     </目標>
                 </実行>
             </処刑>
             <構成>
                 <!--docker ファイル ディレクトリを指定します-->
                 <dockerディレクトリ>${project.basedir}/docker</dockerディレクトリ>
                 <!-- 生成されたイメージ名を指定します -->
                 <画像名>${プロジェクト.アーティファクトID}</画像名>
                 <!--タグを指定-->
                 <画像タグ>
                     <imageTag>最新</imageTag>
                 </画像タグ>
                 <!-- リモート Docker API アドレスを指定します -->
                 <dockerホスト>http://xxx.168.146.63:2375</dockerホスト>
                 <!-- 以下は、jar パッケージを docker コンテナの指定されたディレクトリにコピーするための構成です -->
                 <リソース>
                     <リソース>
                         <ターゲットパス>/</ターゲットパス>
                         <!--jar パッケージが配置されているパスはターゲット ディレクトリに対応します -->
                         <ディレクトリ>${project.build.directory}</ディレクトリ>
                         <!-- Dockerfile に追加されたファイル名に対応する、含める必要のある jar パッケージ -->
                         <include>${project.build.finalName}.jar</include>
                     </リソース>
                 </リソース>
             </構成>
         </プラグイン>

     </プラグイン>
 </ビルド>

前の手順では、dockerファイルのディレクトリをdocker mavenプラグインで設定し、モジュールのルートディレクトリのdockerフォルダを指定しました。次に、 src と同じレベルのDockerfileという新しいファイルを作成します。内容は次のとおりです。

java:8より
ボリューム /tmp
# パッケージ化されたjarをapp.jarにコピーします。ADD nathan-api.jar app.jar
エクスポーズ 20561
# 以下は、jar パッケージの起動コマンド構成です。ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-Duser.timezone=GMT+8", "-jar", "app.jar"]

上記の設定後、dockerイメージをビルドするアクションがmaven packageコマンドにバインドされたので、パッケージを実行できます。

このステップで、作成者は ADD 失敗: ビルド コンテキストでファイルが見つからないか、.dockerignore によって除外されているというエラーが発生しました。主な問題は、Dockerfile 内の ADD コマンドがコピーする必要があるソース ファイルが見つからないことです。このエラーが発生した場合は、まず Dockerfile で設定されたファイル パスが正しいかどうかを確認し、次に実際にパッケージ化された jar 名が Dockerfile で設定されたファイル名と同じかどうかを確認します。設定を確認し、パスと名前のエラーがないことを確認しました。最後に、IDEA を数回クリーンアップして再起動すると、再び動作しました。なぜと聞かないでください、尋ねることは形而上学です

ここに画像の説明を挿入

Docker イメージがビルドされたら、イメージ ファイルを右クリックして、コンテナーの作成を選択します。新しいコンテナを作成する最も簡単な手順は、コンテナに名前を付け、ホストからコンテナへのポート マッピングを追加することです。作成が成功すると、コンテナは自動的に実行されます。

ここに画像の説明を挿入

これで、docker と IDEA を統合してリモート デプロイメントを実現する手順に関するこの記事は終了です。IDEA docker リモート デプロイメントに関する関連コンテンツの詳細については、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • IDEA が Docker を統合してリモート展開を実現するための詳細な手順
  • IdeaはリモートDockerをデプロイし、ファイルを構成する
  • Docker プラグインを使用して IDEA のクラウド サーバーにプロジェクトをリモートでデプロイする方法
  • IDEA で Spring Boot プロジェクトをデプロイするためにリモート サーバー Docker に接続する方法の詳細なチュートリアル
  • Idea による Springboot の Docker への Java リモート ワンクリック デプロイ
  • Docker イメージとコンテナ サービスの IDEA リモート管理の実装

<<:  ECMAscript の新機能の紹介

>>:  IE6/7 における a.getAttribute(href,2) 問題の分析と解決

推薦する

Vue で手ぶれ補正を実装するためのサンプルコード

手ぶれ防止: 繰り返しのクリックによるイベントのトリガーを防止まず、揺れとは何でしょうか? 震えるの...

テキストエリアの使用に関する注意事項

なぜテキストエリアについて具体的に言及するのでしょうか?なぜなら、textarea ノードは実際には...

el-table ヘッダーでテキストを折り返す 3 つの方法の詳細な説明

目次問題の説明レンダリング3種類のコード要約する問題の説明通常、表のヘッダーは折り返されませんが、ビ...

SQL でテーブルにフィールドとコメントを追加する方法

1. フィールドを追加します。 alter table テーブル名 ADD フィールド名 タイプ;例...

クールな花火効果を実現するjs

この記事では、jsを使用してクールな花火効果を実現するための具体的なコードを参考までに共有します。具...

CSS の inline-block の最小幅値の詳細な説明

序文最近、私は夜に時間を取って「CSS World」という本を読んでいます。この本は非常に興味深く、...

WeChatアプレットは日付と時刻に基づいた並べ替え機能を実装

最近、小さなプログラム プロジェクトを引き継いだのですが、リストを日付と時刻で並べ替えるという要件が...

Linux でファイル権限を変更する chmod コマンドの詳細な分析

Linux chmodコマンドを使用して、ターゲット ファイルにアクセス、読み取り、書き込み、または...

MySQLクエリキャッシュに関するヒント

目次序文QueryCache の概要クエリキャッシュ構成QueryCache の使用queryCac...

適応幅(パーセンテージ)に応じて Div の高さを調整する純粋な CSS

今日のレスポンシブ レイアウトの要件では、サイズを自動的に調整できる多くの要素で高さと幅の適応を実現...

CentOS 8 / RHEL 8 に VirtualBox 6.0 をインストールするための詳細なチュートリアル

VirtualBox は、技術者が異なる種類の複数の仮想マシン (VM) を同時に実行できるようにす...

HTML の水平および垂直中央揃えの問題の概要

最近、センタリングの問題に数多く遭遇したので、後で簡単に見つけられるように、時間をかけてそれらを要約...

React の調整アルゴリズム Diffing アルゴリズム戦略の詳細な説明

目次アルゴリズム戦略単一ノードの差分配列ノードの差分キー値の使用要件アルゴリズム戦略React の調...

MySQL ストアド プロシージャで if ステートメントを使用する詳細な例

この記事では、例を使用して、MySQL ストアド プロシージャでの if ステートメントの使用方法を...

JavaScript の new 演算子の原理と例の詳細な説明

新しい用途new の機能は、コンストラクターを通じてインスタンス オブジェクトを作成することです。イ...