SpringBoot と Docker の統合の詳細なプロセス

SpringBoot と Docker の統合の詳細なプロセス

最近メモに新しいことがたくさん追加されましたが、新しい環境に慣れておらず、メモを整理する意欲がありません。

1. デモプロジェクト

まず、Docker ホストにデプロイする簡単なプロジェクトを準備し、プロジェクトが正常に実行されるかどうかを確認します。

1.1 インターフェースの準備

Dockerのデプロイが成功したかどうかを確認するためのテストインターフェースを準備する

@レストコントローラ
@リクエストマッピング("/")
パブリッククラスHelloController{

    @GetMapping("/hello")
    パブリック文字列非表示() {
        「Hello World」を返します。
    }
}

1.2 構成の準備

統合管理を容易にするために、application.yml ファイルに Docker ホスト アドレスを追加します (この機能には、依存するプラグインのインストールが必要です)

サーバ:
  ポート: 8080

春:
  応用:
    名前: docker-deploy-test

ドッカー:
  ホスト: http://xxx.xxx.xxx.xxx:2375

2. Dockerがリモート接続を開く

Docker もクライアント/サーブ アーキテクチャ (デーモン デーモン) であり、デフォルトではローカルでのみアクセスできるため、プロジェクトを Docker にデプロイする前に、インターネットからアクセスできるように設定する必要があります。

1.1 設定ファイルを変更する

Dockerホストの設定を編集し、次の設定行を追加します(これは、どのアドレスでもポート2375にアクセスできることを意味します)。

$vim /usr/lib/systemd/system/docker.service
 
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock

1.2 設定を更新して再起動する

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

1.3 認証ログイン

ポート2357を直接開き、誰でもDockerホストにプッシュできるようにします。最初にマイニングイメージをプッシュしたところ、ホストがスタックしてログインできなくなりました。その後、システムイメージを再インストールするしかありませんでした。 Docker は SSL 証明書を使用したログインをサポートしています。外部ネットワーク環境の場合は、必ず SSL を使用してログインしてください (著者は認証用の OpenSSL メモを記録していますが、整理する時間がありませんでした)

3. IDEAにDockerプラグインをインストールする

私が使用した IDEA の 2019 バージョンには Docker プラグインがデフォルトで統合されており、再度インストールする必要はありません。 IDEA が接続するリモート ホストのアドレスとポートを一致させ、最後にリモート Docker ホストに接続されているかどうかを確認します。

ここで新しい Docker を作成し、ホスト アドレスを入力すると自動的に接続されます。接続が成功したと表示されたら、IDEA がホストに接続されていることを意味します。

4. MavenにDockerプラグインを追加する

前の手順の IDEA プラグインは、イメージをビルドおよびデプロイできるほか、Docker を管理することもできます。しかし、著者はMavenプラグインとIDEAプラグインを併用しており、プログラムの構築と展開を容易にしている。

<!-- docker プラグイン -->
<プラグイン>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <バージョン>1.0.0</バージョン>

    <!-- docker:build を Maven パッケージ ライフサイクルにバインドします -->
    <処刑>
        <実行>
            <id>docker-build-image</id>
            <phase>パッケージ</phase>
            <目標>
                <goal>ビルド</goal>
            </目標>
        </実行>
    </処刑>

    <!-- プラグインの設定 -->
    <構成>
        <!-- ビルドされたイメージの名前: タグ-->
        <画像名>${プロジェクト.アーティファクトID}:${プロジェクト.バージョン}}</画像名>
        <!-- dockerfile を保存するパス-->
        <dockerディレクトリ>${project.basedir}</dockerディレクトリ>
        <!-- Docker ホスト アドレス。初期化フェーズ中にプラグインによって application.yml から解析されます -->
        <dockerホスト>${docker.host}</dockerホスト>
        <!-- SSL ログインが有効な場合の SSL 認証証明書アドレス -->
        <!-- <dockerCertPath></dockerCertPath> -->
        <リソース>
            <リソース>
                <!-- イメージの構築に使用されるリソース (つまり、jar パッケージ) と、イメージがコンテナーにプッシュされるディレクトリ -->
                <ターゲットパス>/</ターゲットパス>
                <ディレクトリ>${project.build.directory}</ディレクトリ>
                <include>${project.build.finalName}.jar</include>
            </リソース>
        </リソース>
    </構成>
</プラグイン>

5. Dockerfileを書く

Dockerfileファイルを作成し、次の内容を入力して、プロジェクトのルートディレクトリに配置します。

openjdk:8-jdk-alpine から

メンテナー [著者] [[email protected]]

ARG JAR_FILE=/target/*.jar

${JAR_FILE} app.jar をコピーする

エクスポーズ8080

エントリポイント ["java","-jar","/app.jar"] 

6. プロジェクトをパッケージ化する

Maven プラグインは、パッケージと Docker:build の実行プロセスをバインドします。つまり、プロジェクトが jar にパッケージ化された後、Docker:build が自動的に実行され、イメージがビルドされてリモート Docker ホストに公開されます (プロジェクトが大きい場合は、イメージが Docker ホストにプッシュされるまでの待機時間が長くなります)。

7. コンテナを作成する

IDEA プラグインで Docker を管理できます。右下隅のサービスをクリックすると、接続された Docker でビルドされたイメージが表示されます。次に、このイメージを右クリックしてコンテナーを作成できます。

ポップアップ ボックスで、作成するコンテナーの名前とコンテナーにマップされたポートを入力し、[実行] をクリックしてコンテナーが起動するのを待ちます。起動が完了すると、IDEA プラグインに新しく作成されたコンテナが表示されます。それをクリックすると、コンテナの詳細が表示されます。

8. 展開を確認す​​る

ホストのIPアドレスまたはドメイン名を使用して、リリースされたばかりのテストインターフェースにアクセスします。

SpringBoot と Docker の統合に関するこの記事はこれで終わりです。SpringBoot と Docker の統合に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • SpringBoot アプリケーションの Docker デプロイメントの実装手順
  • Springboot アプリケーションを迅速にデプロイするために Docker とアイデアを統合する詳細なプロセス
  • SpringBoot プロジェクトの Docker クイック デプロイメントの紹介

<<:  HTML で dl(dt,dd)、ul(li)、ol(li) を使用する方法

>>:  hasLayout によって発生する CSS バグの一覧

推薦する

Linux で固定 IP を設定する方法 (テスト済みで効果的)

まず、仮想マシンを開きます xshell5 を開いて仮想マシンに接続します (より便利です。Linu...

実用的なクイックスタートReactルーティング開発

インストールインストールするには、次のコマンドを入力します。 // ネプ npm で react-r...

React refの使用例

目次refとは何かrefの使い方DOM要素に配置するクラスコンポーネントに配置する関数コンポーネント...

MySQL の一時テーブルと派生テーブルについての簡単な説明

派生テーブルについてメイン クエリに派生テーブルが含まれている場合、または SELECT ステートメ...

mysql 5.7.11 winx64.zip インストールと設定方法のグラフィックチュートリアル

MySql データベース システムをインストールして構成します。 1. ダウンロード http://...

グループ化されたクエリでのGROUP BYの使用とSQL実行順序の説明

SQL では、GROUP BY は SELECT の結果のデータをグループ化するために使用されます。...

HTML における if 判断の使用

Django Web開発の過程で、HTMLを書く際にバックエンドから同じ名前のリスト変数が渡されるが...

Angular構造ディレクティブモジュールとスタイルの詳細な説明

目次1. 構造指示モジュールforRoot()を書く3. スタイルの定義ドラッグ時の順序を調整するに...

MySQL max_allowed_pa​​cket 設定

max_allowed_pa​​cket は、受け入れるパケットのサイズを設定するために使用される ...

Hyper-V なしで Windows 10 を動作させるソリューション

Windows10 Home Edition でHyper-vを有効にする方法をまだ探していますか?...

Linux で MySQL をインストールする簡単な方法

Linux に MySQL をインストールする方法をオンラインで検索すると、多くの方法が表示されまし...

シェルを使用して複数のサーバーでバッチ操作を実行する方法

目次SSHプロトコルパスワード接続プロセスsshツールssh公開鍵ログインバッチ操作複数サーバーファ...

HTML で複数のフォームのテキスト ボックスを揃える方法

フォームのコードは図の通りです。スタイルシートがまだ追加されていないため、フォームが整列されておらず...

nginxでイメージサーバーを構築する手順の詳しい説明(ルートとエイリアスの違い)

インストール手順は省略します( yum -y install nginx;を使用して直接インストール...

HTML で選択ドロップダウン ボックスのコンテンツが不完全に表示され、部分的にカバーされる問題の解決策

今日、問題が発生しました。クエリ バーのドロップダウン ボックスの内容が長すぎて、一部が隠れてしまっ...