Docker が Springboot プロジェクトをビルドし、テストをリリースする

SpringBoot プロジェクトを Docker イメージにパッケージ化するには 2 つのオプションがあります。

完全な自動化: まず Docker イメージ ウェアハウスを構築し、次にプロジェクトの Maven 構成でウェアハウス アドレスを構成し、プロジェクトで Dockerfile ファイルを構成します。これにより、アイデアに直接パッケージ化してイメージ ウェアハウスに自動的にアップロードできます。サーバーに移動します ミラーを開始するだけです。

半自動化: 半自動化には 2 つのオプションがあり、1 つは Dockerfile ファイルをプロジェクト内に配置する方法、もう 1 つはプロジェクトの外部に配置する方法です。

プロジェクト内に配置します: springboot pom で maven プラグインのサポートを構成します
。この jar をサーバーにアップロードし、サーバー上に Dockerfile を作成し、docker build コマンドを実行して、この jar を docker イメージにビルドし、画像。

一般に、半自動化は完全自動化よりもよく使用されます。この記事では、半自動化の 2 番目の方法を使用します。一般的に、次のようないくつかの手順があります。

docoerfile を作成します。

(1) プロジェクト内にDockerfileという名前の新しいファイルを作成します

Dockerfile を書きます:

#基础镜像
FROM openjdk:8-jre

#发布到网上时只会把jar包和Dockerfile发布上去
# 把当前目录下的jar包拷贝进docker镜像里
COPY *.jar /ftdocker.jar

#CMD命令用于指定这个容器启动的时候要运行的命令(CMD一行只执行一个命令,可以写多个CMD)
#地址映射
CMD ["--server.port=8088"]

#对外暴露端口
EXPOSE 8088

# ENTRYPOINT命令用于指定这个容器启动的时候要运行的命令(可以追加命令)
#执行命令
ENTRYPOINT ["java", "-Xmx512m", "-jar", "/ftdocker.jar"]

Java プロジェクトを保存するには、プロジェクトを保存するサーバーに新しいフォルダーを作成します。

パッケージ化されたjarパッケージとDockerfileファイルをサーバーにアップロードします。

Dockerfile を使用してDocker イメージをパッケージ化する

  1. #选项及解释

  2. -t的t是tag,表示生成的镜像的名称和版本号

  3. .表示当前构建时上下文的路径为当前目录

  4. docker build -t todocker:0.1 .

レンダリング:

(FROM java:8) を指定すると、Jenkins がサービスをビルドし、Dockerfile がエラーを報告します: java:8-jre のマニフェストが見つかりません: マニフェストが不明です: マニフェストが不明です

1. 問題の説明:
Jenkins ビルド サービス、コンソールがエラーを報告します:

manifest for java:8-jre not found: manifest unknown: manifest unknown

1. スクリーンショット:


2. 問題の解決
これは、Docker が正式に java8 イメージを放棄したためで、jdk1.8 を使用したい場合は、openjdk を使用できます。
解決策は、Dockerfile を FROM openjdk:8-jre に変更することです。

FROM openjdk:8-jre

RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone

ARG JAR_FILE
COPY ${JAR_FILE} /app.jar

ENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-Ddruid.mysql.usePingMethod=false", "-jar", "/app.jar"]
CMD ["--spring.profiles.active=prod"]

次のコマンドを使用して、イメージが正常に構築されたかどうかを確認します。

docker images

レンダリング: 

次のコマンドを使用して、新しい Docker イメージを使用して Docker コンテナを起動します。

#オプションと説明
-d はコンテナがバックグラウンドで実行されていることを示します
-P はランダムに指定されたポート、または -p で指定されたポートを示します--name="name" パラメータは、コンテナのdocker run
を区別するための名前をコンテナに付けるために使用されます-
 
d -p 8012:8012 --name コンテナ名 イメージ名: バージョン

レンダリング:

Docker コンテナ内のプロジェクトにアクセスする

(1) SpringBoot プロジェクトの 8080 ポートを docker コンテナにマッピングするために、-P パラメータで docker ポートをランダムに指定しているため、docker によってどのポートがランダムに指定されているかが不明なので、次のコマンドを使用して、どのポートが指定されているかを確認します。ランダムに指定された docker ポートは (docker コンテナの起動時にポートを指定した場合、この手順を実行する必要はありません)

docker ps
レンダリング: 

(2)curlコマンドでdockerコンテナ内のSpringBootプロジェクトにアクセスし、404という文字が表示されればSpringBootプロジェクトが起動できています。

curl localhost: Docker
レンダリング によってランダムに指定されたポート

(3)curl コマンドを使用して SpringBoot プロジェクトのインターフェイスを呼び出し、呼び出しが成功することを確認します。

curl localhost: docker によってランダムに指定されたポート/インターフェースのパス。レンダリング

その他の問題:

このエラーは、コンテナが既に存在することを意味します。次のコマンドを使用してコンテナを停止、削除し、最後に起動できます。

docker stop name/image_id
docker rm name/image_id

タグで画像を削除

ミラーリングは次のいずれかの方法で削除できます。

docker rmi [image]

または:

docker image rm [image]

強制削除:

docker rmi -f image_id

コンテナ操作コマンドの概要:参照リンク

コンテナを停止します:
docker stop hello1
停止したコンテナを開始します:
docker start hello1
コンテナを入力します:
docker exec -it hello1 /bin/bash
コンテナを削除します:
docker rm -f hello1
ヘルプ コマンド:
docker --help

参考リンク:リンク1リンク2

おすすめ

転載: blog.csdn.net/chenthe1/article/details/132621107