docker-maven-plugin の詳細な使用方法

docker-maven-plugin の詳細な使用方法

Docker-Maven-プラグイン

マイクロサービスをデプロイする方法は 2 つあります。

  • 手動デプロイ: まず、ソース コードのパッケージ化に基づいて jar パッケージ (または war パッケージ) を生成し、Dockerfile ファイルを記述し、ベース イメージに基づいて新しいイメージを作成し、jar パッケージ (または war パッケージ) を仮想マシンにアップロードして、JDK コンテナーにコピーします。 (面倒すぎる)
  • Maven プラグインによる自動デプロイメント。 これは実際の企業開発でもよく使われる手法です。

Mavenプラグインの自動デプロイメント手順

冒頭に書いたように、この方法には抜け穴があり、ハッカーによってマイニングマシンイメージにリモートから簡単に挿入できます。使用時には注意してください。2375が開かれ、IP制限が課されていない場合は、マイニングに引き込まれます。 。 。 CA暗号化ポートの使用をお勧めします

1. ホストマシンのDocker設定を変更し、ポート2375を開いてリモートアクセスを許可します。

Maven コマンドをローカルで実行することは、ホスト マシンに対するリモート操作です。Docker のリモート操作はデフォルトで閉じられています。まずポート 2375 を開きます。

まず、ホストマシン上でコマンドを実行し、構成ファイルを変更します(centos 7)

vi /lib/systemd/system/docker.service

ExecStart= ‐H tcp://0.0.0.0:2375 ‐H unix:///var/run/docker.sockの後に構成を追加します。

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

unix://var/run/docker.sock : unix ソケット。ローカル クライアントはこれを使用して Docker デーモンに接続します。

tcp://0.0.0.0:2375 : TCP ソケット。これは、すべてのリモート クライアントがポート 2375 を介して Docker デーモンに接続できることを意味します。

なる


Centos7の場合は以下を変更します

実行開始=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375

2. 設定を更新してサービスを再起動する

systemctl daemon-reload //Dockerデーモンスレッドをロード systemctl restart docker //Dockerを再起動

3. コンテナファイアウォールを構成する

ポート2375が開かれていても、外部からはアクセスできず、内部からのみアクセスできます。ファイアウォールを設定する必要があります。 Alibaba Cloudが設定されていない場合は、マイニングに引き込まれる可能性があるので注意してください-_-、これは私の学校のサーバーなので、アクセスするにはVPNが必要ですが、問題ありません

これは閉鎖されています。

systemctl stop firewalldコマンドを使用する(ファイアウォールをオフにする)
systemctl enable firewalld (ファイアウォールを無効にすると、起動時に起動しなくなります)

selinuxをオフにする

vi /etc/selinux/config で、SELINUX=enforcing を disabled に変更します。

ここに画像の説明を挿入

再起動が完了したら、ファイアウォールとSELinuxのステータスを確認します。

systemctl status firewalld (ファイアウォールの状態を確認する)
secon (selinux ステータスの確認) 

ここに画像の説明を挿入

Alibaba Cloudはセキュリティの呪いを設定することを推奨しています

この時点でdockerに接続して成功しました

4. pom.xmlに設定を追加する

Dockerfile次の構成で自動的に生成されます。

<ビルド>
        <finalName>テストDocker</finalName>
        <プラグイン>

            <プラグイン>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </プラグイン>

            <!--docker maven プラグイン-->
            <プラグイン>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <バージョン>1.1.0</バージョン>
                <!--構成セクション-->
                <構成>
                    <!--imageName ノードの内容をプライベート ウェアハウスのアドレスとポート、およびイメージ ID と TAG に変更し、プライベート サーバーに直接転送します -->
                    <!-- 最終的に生成されるイメージ名を設定します。Docker イメージでは、プロジェクト名: バージョンを使用します -->
                    <画像名>172.19.240.208:5000/${プロジェクト.アーティファクトId}:${プロジェクト.バージョン}}</画像名>
                    <!-- ベースイメージ、Dockerfile の from--> に相当
                    <baseImage>ascdc/jdk8</baseImage>
                    <!--エントリ ポイント、project.build.finalName は、プロジェクト タグ、testDocker の下のビルド タグの下のファイル名タグの内容です-->
                    <!-- コンテナを起動するのと同等に、java-jar/testDocker.jar が自動的に実行されます -->
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <!--docker プライベート ウェアハウスにプッシュするかどうか-->
                    <pushImage>真</pushImage>
                    <レジストリ URL>172.19.240.208:5000</レジストリ URL>

                    <リソース>
                        <リソース>
                            <ターゲットパス>/</ターゲットパス>
                            <ディレクトリ>${project.build.directory}</ディレクトリ>
                            <!--Docker にアップロードされるファイル。Dockerfile に testDocker.jar を追加するのと同等です /-->
                            <include>${project.build.finalName}.jar</include>
                        </リソース>
                    </リソース>
                    <dockerホスト>http://172.19.240.208:2375</dockerホスト>
                </構成>
            </プラグイン>
        </プラグイン>
    </ビルド>

プライベートリポジトリにプッシュするには3つのポイントがあり、コンテナが開始状態にあることが前提であることに注意してください。

<!-- 1. registryUrl ノードを追加します。内容はプライベート ウェアハウスのアドレスとポートです (ここではポート 5000 を設定しました) -->
<registryUrl>あなたのIP:5000</registryUrl>

<!-- 2. pushImage ノードを追加する-->
<pushImage>真</pushImage>

<!-- 3. imageName ノードの内容をプライベート ウェアハウスのアドレスとポートに変更し、イメージ ID と TAG を追加します。ウェアハウス内の名前はプロジェクト名: version になります -->
<imageName>yourip:5000/${project.artifactId}:${project.version} </imageName>

まず、mvn clean と mvn install を実行し、ローカル リポジトリに配置します。

[外部リンク画像の転送に失敗しました。ソースサイトにはアンチホットリンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-84l0HMwJ-1579593153706)(/Users/zhangye/Library/Application Support/typora-user-images/image-20200120214402887.jpg)]

次に、 mvn docker:buildコマンドを実行してイメージを作成します。アップロードする場合は、 -DpushImageパラメータを追加します。

[外部リンク画像の転送に失敗しました。ソースサイトにはアンチホットリンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-wdYBT027-1579593153707)(/Users/zhangye/Library/Application Support/typora-user-images/image-20200120214544482.jpg)]

実行中にエラーが発生しました

[エラー] プロジェクト demo で目標 com.spotify:docker-maven-plugin:1.1.0:build (default-cli) を実行できませんでした:
例外が発生しました: jdk1.8 のプル アクセスが拒否されました。リポジトリが存在しないか、'docker login' が必要になる可能性があります:
拒否: リソースへの要求されたアクセスが拒否されました -> [ヘルプ 1]

Baidu で確認したところ、ログインが必要だという人がたくさんいました。実際、ログインする必要はなく、リポジトリも存在しません。実際、私の docker には jdk1.8 イメージ ファイルがなく、自分でダウンロードする必要があります。docker search jdk8 でプルするか、tar パッケージを自分でアップロードしてから Dockerfile で作成することができます。私は直接1つを引いた

ここに画像の説明を挿入

docker images

ここに画像の説明を挿入

プロジェクト内のベースイメージ名を変更する

ここに画像の説明を挿入

ビルドとプッシュに成功しました

ここに画像の説明を挿入

[外部リンク画像の転送に失敗しました。ソースサイトにはアンチホットリンクメカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-SAUhrnA3-1579593153710)(/Users/zhangye/Library/Application Support/typora-user-images/image-20200121154702289.jpg)]

ここに画像の説明を挿入

ミラーを見る

ここに画像の説明を挿入

倉庫を見る

ここに画像の説明を挿入

docker-maven-plugin の詳しい使い方については以上です。docker-maven-plugin の使い方についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • docker-maven-pluginプラグインは対応するjarパッケージを取得できません
  • dockerfile-maven-plugin 使用ガイドの概要
  • Maven プラグイン docker-maven-plugin の使用
  • dockerfile-maven-plugin ミニマリスト チュートリアル (推奨)
  • docker-maven-pluginを使用してデプロイメントを自動化する方法を説明します

<<:  幅の比率に応じて高さを変えるCSSを実装するいくつかの方法

>>:  MySQL データベース シェル import_table データ インポート

推薦する

画像をラベルとして使用すると、IE では for 属性が機能しません。

例えば:コードをコピーコードは次のとおりです。 <input type="check...

アイデアを war パッケージにパッケージ化し、tomcat にデプロイしてアクセス パスの問題 (図とテキスト)

Web プロジェクトを war にパッケージ化するアイデアにとって最も重要なことは、アトリフィカを...

Dockerイメージの階層化の原理の詳細な説明

ベースイメージベースイメージには 2 つの意味があります。他のイメージに依存せず、ゼロから構築します...

CSS3 で画像ドロワー効果を実装するためのサンプル コード

いつものように、まずは画像効果を投稿しましょう: このエフェクトの原理は非常にシンプルです。CSS3...

Node.js で Bash スクリプトを書くための究極のソリューション

目次序文zxライブラリ$`コマンド` CD()フェッチ()質問()寝る()スローしない()チョークフ...

mysql8でルートユーザーのパスワードをリセットする手順を完了します

序文最近、多くの新しい同僚がこの質問をしてきました。特に、homebrew を通じて自動的にインスト...

docker に nacos をインストールしてデータベースを構成する詳細なチュートリアル

環境の準備 Docker環境 MySQL 5.7 (公式イメージはmysql8をサポートしていません...

Alipay の新しいホームページのフロントエンドの実践的な概要

もちろん、ページ パフォーマンスの最適化に関する個人的な経験も含まれています。ここでいくつかの点につ...

GobangゲームのWebバージョンを実装するためのJavaScript

この記事では、GobangゲームのWebバージョンを実装するためのJavaScriptの具体的なコー...

JavaScript 配列メソッドの詳細な例

目次導入配列の作成作成方法詳しい説明方法参加する() push() と pop() shift() ...

異なるデータベースで DROP TABLE を書く方法

異なるデータベースで DROP TABLE を書く方法1.MySQL 存在する場合はテーブルを削除 ...

MySQL インデックスの一般的な問題の概要

Q1: データベースにはどのようなインデックスがありますか?メリットとデメリットは何ですか? 1. ...

React onClickにパラメータを渡す問題について話しましょう

背景下のようなリストでは、削除ボタンをクリックすると削除操作を実行する必要があります。 リスト生成:...

CSS 表示属性のインラインブロックレイアウト実装の詳細な説明

CSS 表示プロパティ注: !DOCTYPE が指定されている場合、Internet Explore...

MySQLがデータの削除を推奨しない理由

目次序文InnoDB ストレージ アーキテクチャInnodb テーブルスペースインドストレージディス...