記事ディレクトリ
1. 新しい SpringBootDemo プロジェクトを作成してパッケージ化する
通常、以下を実行します。
maven clean
maven compile
maven package
プロジェクトはローカルにターゲット ディレクトリを生成し、その下にプロジェクト jar パッケージが生成されます。
非常に簡単なデモを例として挙げます:
ページ:
2. Dockerfileを使ってパッケージ化する(基本的な使い方)
ターゲットと同じレベル、つまり、プロジェクトのルート ディレクトリに新しいファイルを作成し、「Dockerfile」
という名前を付けます。 次の基本パラメータ:
FROM openjdk:8
# 指定可以被宿主机文件挂载目录
VOLUME /opt/demo/
# 指定路径
WORKDIR /opt/demo/
# 添加 springboot-web-demo-0.0.1-SNAPSHOT.jar 包到workdir 以 web.jar保存
ADD ["springboot-web-demo-0.0.1-SNAPSHOT.jar", "web.jar"]
EXPOSE 8090
ENTRYPOINT ["java", "-jar", "/web.jar"]
次に、リモート ツール (私は Xftp7 を使用しています) を使用して、jar パッケージと Dockerfile ファイルを Linux サーバーの新しく作成したディレクトリにドラッグします。コマンド ラインで
ディレクトリを入力し、イメージ作成を実行します。
docker build -t web:test . # 镜像名:tag 当下目录
鏡をチェックしてください:
docker images
次に、実行を開始します。
docker run -d -p 8090:8090 --name test web
ポートを外部にマップします。
コンテナーの名前は test で、イメージは生成された Web
ブラウザー アクセスです:
失敗しました。
(私のプロジェクトのポートは 8080 ですが、8090 が公開されており、対応していません)
ここでポート マッピングの問題に注意してください。
- プロジェクト application.yml のポートは EXPOSE ポートと一致している必要があります。
- コンテナ起動時 -p host port:container port ホストポートは任意に指定でき、コンテナポートがEXPOSEのポートとなります。
それ以外の場合、コンテナは正常に起動できますが、ポートは公開されず、アクセス時にプロジェクト自身のポートが引き続きアクセスされます (Linux では、外部の世界はポートにアクセスできません)。
dockerfile を再変更し、実行するイメージをパッケージ化した後、次のようにします。
curl ip:port
ブラウザアクセス:
要約:
1. ローカルMavenパッケージ+Dockerfile作成
2. Docker環境下のサーバーにアップロード
3. イメージ作成
4. 実行
プロジェクトの展開に何の利便性ももたらさないことがわかりますか? これだけではdockerの利点を反映できません。
さらなる Maven ソースコードのパッケージ化方法
Linux Docker 環境では、git と maven をインストールし、以下を使用できます:
① git を使用してウェアハウス コードをプルする;
② mvn パッケージング コマンドを使用して手順 1 と 2 を削除できる;
③ ミラー イメージを作成する
④ run を使用してコンテナを実行する
しかし、まだ十分に単純ではありません。
Maven がインストールされていない環境の場合は、以下のようなスクリプトを手動でインストールしてください。
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo
# yum-config-manager --enable epel-apache-maven
// 安装maven
# yum install -y apache-maven
1. 元のコードを Docker 環境にアップロードします (通常は git/svn がソース コードを直接プルします)
2. maven パッケージ
mvn clean パッケージ
生成されたjarは同じレベルのターゲットディレクトリにあります
3. docker コマンドを実行して、
イメージ dockerfile の内容を生成します。
ミラーを作成するコマンド
3. さらに詳しく (Maven プラグインのパッケージ化)
IDEA コードを開発した後、docker-maven プラグインを使用して、1 行のコマンドでイメージを直接コンパイルおよびパッケージ化し、Docker ホスト環境にプッシュします。
その後、Docker で run コマンドを実行するだけでプロジェクトを実行できます。
docker-maven-プラグイン
Docker クライアントはそれに統合されており、docker コマンドは docker API インターフェイスを通じて送信されます。
スプリングブート-Maven-プラグイン
これは Spring Boot の公式プラグインであり、特定のバージョンの 2.x (2.3.x) で Docker イメージをビルドする機能を提供します。
以下に、Maven プラグインの例を示します。 docker-maven-plugin の使用法を実現します。
前提条件
1. Docker サービスを Windows にインストールする必要があります
2. Docker サービスは http ウェアハウス インターフェイスを設定する必要があります Windows 上の Docker サービスの設定は次のとおりです (従来の設定モードにはファイルを変更する権限がありません)
ローカル環境の設定
1. Windows に docker-toolbox をインストールします。ただインストールしてください。
2. Docker クイックスタート ターミナルを開き、初期化が完了するまで待ちます。
3. 次のように docker-machine env コマンドを入力して、docker サービスの API インターフェイスと証明書の場所を返します。 4.
docker-machine ssh コマンドを入力して sh 環境に入り、http ウェアハウス パスを構成します。
ファイル構成を変更します。 (現在のユーザーは root ではなく docker です。root にアップグレードするには sudo が必要です):
sudo vi /var/lib/boot2docker/profile
5. 変更が完了したら、保存します。Docker サービスを再起動します
sudo /etc/init.d/docker restart
プロジェクト環境設定 Maven プラグイン
次のように、 docker-maven-plugin プラグインの構成をプロジェクト pom に追加します。
1. その中で、imageName はイメージの完全なパス名を構成します。つまり、プライベート ライブラリの名前を指定します
。 2. dockerHost とdockerCertPath は docker の API の設定と証明書の値に対応します
パッケージの実行
アイデアを例に挙げると、プロジェクト全体が組み立てられた後は、Maven の最初、2 番目、および 3 番目のステップを操作するだけ、つまりウェアハウスに直接ミラーリングするだけで済み、プロセス全体が非常に便利です。
複数のクリックを保存し、1 つの mvn コマンドでパッケージ化とアップロードを直接完了することもできます。
mvn clean package docker:build -DpushImage
ミラーウェアハウスの結果を確認する
これまでのところ、サーバー環境では docker run イメージを直接実行してコンテナーを起動できます。
4. まとめ
この記事を書いた後、すでに何人かのブロガーがこれらの方法を記事にまとめていることに気づきました。ここにリンクを貼っておきます。興味がある方はご覧ください: docker を使用してプロジェクトを Linux にデプロイする (超詳細
)
さらに、次の記事も参照できます (オプションで、読んでも読まなくても構いません):
1. docker-maven-plugin プラグインを使用して、プロジェクトを Docker イメージにコンパイルし、リモート Linux サーバーに送信します
2 . Maven プロジェクトをパッケージ化してアップロードするための Docker プラグインのアイデア
3. Docker のパッケージ化とプッシュ用の Maven