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 バグの一覧

推薦する

RedisとMemcacheの比較と選び方

最近 redis を使っていて、とても便利だと感じているのですが、インメモリ データベースを選択する...

MySQL マスタースレーブレプリケーションの原理と実践の詳細な説明

目次導入効果原理形状練習するこの記事では、例を使用して、MySQL マスター/スレーブ レプリケーシ...

MySQLのlike演算子の詳細

1. はじめに不明な値または部分的に既知の値をフィルタリングする場合は、like 演算子を使用でき...

htm 初心者ノート(初心者は必ず読んでください)

1. HTMLとは何かHTML (ハイパーテキスト マークアップ言語): ハイパーテキスト マーク...

CentOS 8.0.1905 は ZABBIX 4.4 バージョンをインストールします (検証済み)

Zabbix サーバー環境プラットフォームバージョン: ZABBIX バージョン 4.4システム:...

Linux でプロセスを効果的に管理するための 8 つのコマンド

序文プロセス管理の役割:サーバーの健全性状態を判定する: プロセスの状態 (メモリ、CPU 占有率な...

Ajax の JavaScript ソリューションにおける parsererror エラー ケースの詳細な説明

ajax の parsererror エラー (バックグラウンドからフロントエンドに送信される js...

HTMLとリソースがどのように読み込まれるかを理解します

このブログのすべてのコンテンツは、クリエイティブ コモンズ ライセンスの下でライセンスされています。...

Vue 大画面データ表示例

効率的に要件を満たし、コンポーネント ライブラリの肥大化や車輪の再発明を避けるために、私は以前、大画...

Vue 初心者ガイド: 最初の Vue-cli スキャフォールディング プログラムの作成

1. Vue - 最初の vue-cli プログラムVueの開発はNodeJSに基づいています。実際...

XHTML の珍しいが便利なタグ

Xhtml には、あまり使用されないが非常に便利なタグが多数あります。半分の労力で 2 倍の結果を達...

HTML印刷関連の操作と実装の詳細な説明

原則的にはwindow.print()メソッドを呼び出すことですが、このメソッドは現在のページ全体を...

クラウド CentOS で Docker リモート サービス リンクを有効にするための実装手順

ここでは、dockerがインストールされたcentosサーバーを紹介し、リモートリンクサービスを開始...