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 イメージをパッケージ化する
#选项及解释
-t的t是tag,表示生成的镜像的名称和版本号
.表示当前构建时上下文的路径为当前目录
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