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

推薦する

CentOS ベースの OpenStack 環境の展開に関する詳細なチュートリアル (OpenStack のインストール)

エフェクト表示: 環境準備コントローラーノード: 6GB 4時間60GB/30GB/30GB計算ノー...

Reactはいくつかの方法でパラメータを渡します

目次親コンポーネントと子コンポーネント間でパラメータを渡すルーティングパラメータステータスの改善コン...

Linux システムコマンドのメモ

この記事では、Linux システム コマンドについて説明します。ご参考までに、詳細は以下の通りです。...

MySQL 中断された接続警告ログの分析

序文:場合によっては、MySQL に接続されたセッションが異常終了することが多く、エラー ログに「通...

HTML テーブルタグチュートリアル (33): セルの垂直配置属性 VALIGN

垂直方向では、セルの配置を上、中央、下に設定できます。基本的な構文<TD VLIGN=&quo...

MySQL がエラーを報告: ファイルが見つかりません: './mysql/plugin.frm' 解決策

問題を見つける最近、仕事中に問題が見つかりました。問題は、MySQL ディスクがいっぱいだったことで...

HTML マークアップ言語 - テーブルタグ

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

JS 面接の質問: forEach はループから抜け出すことができますか?

この質問をされたとき、私は無知で頭が真っ白になりました。もちろん、正しく答えられませんでした。私はず...

HTML 選択タグにリンクを追加する 3 つの方法

最初のもの:コードをコピーコードは次のとおりです。 <html> <ヘッド>...

MySQL IDは1から増加し始め、不連続IDの問題を素早く解決します

mysql idは1から始まり、不連続なidの問題を解決するために自動的に増加します。強迫性障害の私...

mysql 行列変換サンプルコード

1. 需要3 つのテーブルがあります。一定期間にわたるさまざまな抗生物質感受性の結果、つまり rep...

スクロールバーを非表示にする HTML の簡単な実装

1. 属性付きHTMLタグXML/HTML コードコンテンツをクリップボードにコピー< htm...

CSS 要素の非表示の原則と display:none および visibility:hidden

1. CSS 要素の非表示<br />CSS では、要素を非表示にする (つまり、画面の...

HTMLの基礎知識:ウェブページの基礎知識

HTML は Hypertext Markup Language の略です。これは、実際のプレゼンテ...

Windows の MySQL net start mysql MySQL サービスの起動エラーが発生する システムエラーの解決

目次1- エラーの詳細2-シングルソリューション2.1-ディレクトリ C:\Windows\Syst...