検索
ホームページJava&#&チュートリアルSpringboot Web アプリケーション イメージを構築し、コンテナーを使用してデプロイする方法

    Docker の 3 つの主要な概念: イメージ、コンテナ、ウェアハウスを理解しています。イメージはコンテナ操作の基礎です。一般的な開発プロセスは、基本イメージを取得することです。 Docker Hub から取得し、基本イメージに基づいて特定のカスタマイズされた開発 (アプリケーションをイメージに配置するなど) を実行し、新しいイメージを生成し、この新しいイメージに基づいてコンテナーを起動して、アプリケーションを実行します。

    1. イメージを生成する 2 つの方法

    Docker イメージを作成するには通常 2 つの方法があり、1 つは dockerfile 構成ファイルに基づき、docker build を使用して実行されます。これは、最も推奨される本格的なイメージ作成方法です。2 つ目は、docker commit のようなコマンドを使用して、変更されたコンテンツを含む新しいイメージを手動で生成する方法です。

    1.1. commit を利用したイメージ生成

    この方法は、イメージの構築内容を追跡できないこと、また、作業効率が悪く、大規模なイメージ生成には適していません。比較的低いですが、特定の一時的な状況、特に開発中やテスト中に、一時的に新しいソフトウェアをインストールする必要がある場合に、新しいイメージをすばやく生成できるので便利です。

    ここでは、Golang に付属のイメージを生成する例を示し、コミットを使用してイメージを生成する方法を示します。

    1.1.1. Centos ベース イメージをプルする

    まず、Centos ベース イメージをプルする必要があり、Golang のインストールはこのベース イメージに基づいて行われます。

    centos イメージの検索:

    [root@node1 ~]# docker search centos
    INDEX       NAME                                                   DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
    docker.io   docker.io/centos                                       DEPRECATED; The official build of CentOS.       7529      [OK]
    docker.io   docker.io/kasmweb/centos-7-desktop                     CentOS 7 desktop for Kasm Workspaces            33
    docker.io   docker.io/couchbase/centos7-systemd                    centos7-systemd images with additional deb...   7                    [OK]

    STARS の数が最も大きい公式イメージを取得します

    [root@node1 ~]# docker pull centos
    Using default tag: latest
    Trying to pull repository docker.io/library/centos ...
    latest: Pulling from docker.io/library/centos
    a1d0c7532777: Pull complete
    Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
    Status: Downloaded newer image for docker.io/centos:latest
    1.1.2、Centos コンテナを起動して Go
    [root@node1 ~]# docker run -it centos /bin/bash
    [root@311c53f54f2f /]#
    [root@311c53f54f2f /]# go version
    bash: go: command not found
    # をインストールします##here これは、基本的な centos には golang が存在しないことを証明しています。

    yum を使用して golang をインストールすると、次のエラー メッセージが見つかりました。

    [root@311c53f54f2f /]# yum install go
    Failed to set locale, defaulting to C.UTF-8
    CentOS Linux 8 - AppStream                                                                                            71  B/s |  38  B     00:00
    Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist

    これは yum ソースの問題が原因であり、次のコマンドを実行することで解決できます:

    [root@311c53f54f2f yum.repos.d]# sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
    [root@311c53f54f2f yum.repos.d]# sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
    [root@311c53f54f2f yum.repos.d]# yum clean all
    Failed to set locale, defaulting to C.UTF-8
    0 files removed
    [root@311c53f54f2f yum.repos.d]# yum makecache
    Failed to set locale, defaulting to C.UTF-8
    CentOS Linux 8 - AppStream                                                                                           2.6 MB/s | 8.4 MB     00:03
    CentOS Linux 8 - BaseOS                                                                                              2.0 MB/s | 4.6 MB     00:02
    CentOS Linux 8 - Extras                                                                                              7.7 kB/s |  10 kB     00:01
    Metadata cache created.

    Golang は正常にインストールされます

    [root@311c53f54f2f yum.repos.d]# yum install go
    [root@311c53f54f2f yum.repos.d]# go version
    go version go1.16.12 linux/amd64

    1.1.3. 新しいイメージの生成をコミットします
    最初に

    docker ps を使用して現在のコンテナーのコンテナー ID を表示します。ここでは311c53f54f2fです。

    [root@node1 ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    311c53f54f2f        centos              "/bin/bash"         13 minutes ago      Up 13 minutes

    docker commit コマンドを使用して新しいイメージを生成します。

    [root@node1 ~]# docker commit -a "lucas" -m "install golang" 311c53f54f2f centos-go:v1
    sha256:019ab02d451defb75e2ee03948289ed008036ba7ec8a355cae28bdf7fbce07d2

    docker image を再度使用して、centos-go we の新しいイメージを確認します。生成されました。

    [root@node1 ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    centos-go           v1                  019ab02d451d        2 minutes ago       805 MB
    docker.io/busybox   latest              bab98d58e29e        8 days ago          4.86 MB
    docker.io/nginx     latest              904b8cb13b93        13 days ago         142 MB
    docker.io/centos    latest              5d0da3dc9764        18 months ago       231 MB

    1.1.4. 新しいイメージを使用して Golang 環境を確認します
    [root@node1 ~]# docker run -it centos-go:v1 /bin/bash
    [root@daff0519f2ca /]# go version
    go version go1.16.12 linux/amd64
    1.2. Dockerfile を使用してイメージを生成します

    Dockerfile は Docker イメージの構築を含むテキスト ファイルですDocker イメージのビルド プロセスを自動化するための手順。 Dockerfile は、基本イメージ、依存関係のインストール、ファイルのコピー、環境変数の構成、起動コマンドなどの一連の命令を通じてイメージ構築プロセスを記述します。 Dockerfile の構文はシェル スクリプトに似た言語です。

    Dockerfile には、イメージの基本情報、メンテナ情報、イメージ操作コマンド、コンテナ起動コマンドの 4 つの部分が含まれています。 Dockerfile では、# で始まるコメントを使用して、命令の機能を説明したり、その他のコメント情報を提供したりできます。

    以下は一般的な Dockerfile コマンドの一部です:

    • FROM: 基本イメージを指定します (例:

      FROM ubuntu:latest)。FROM ディレクティブは次のとおりです。コメントに加えてください 予期しない最初のコマンド、その後にメンテナ情報コマンドが続きます。

    • MAINTAINER:

      MAINTAINER lucas などのメンテナの情報を指定します。

    • RUN:

      RUN apt-get update && apt-get install -y nginx などのイメージ内のコマンドを実行します。

    • CMD: CMD ["nginx", "-g", "daemon off;"] など、コンテナーの起動時に実行するコマンドを指定します。

    • EXPOSE: コンテナがリッスンするポートを宣言します (

      EXPOSE 80 など)。

    • ENV:

      ENV NODE_ENVproduction などの環境変数を設定します。

    • ADD: ファイルを画像にコピーします (例:

      ADD app.js /app.js)。

    • COPY: ファイルを画像にコピーします (例:

      COPY app.js /app.js)。

    • WORKDIR: 作業ディレクトリを設定します (例:

      WORKDIR /app)。

    • USER:

      USER nginx など、コンテナの起動時に使用するユーザーを設定します。

    • VOLUME:

      VOLUME /data のように、コンテナー データ ボリュームを宣言します。

    • ENTRYPOINT: コンテナの起動時に実行するコマンドを指定します (例:

      ENTRYPOINT ["nginx", "-g", "daemon off;"]) 。

    これらの一般的なコマンドに加えて、Dockerfile には他のコマンドも使用できます。詳細については、Docker の公式ドキュメントを参照してください。

    dockerfile の構成が完了したら、

    docker build を使用してイメージをビルドします。 docker build コマンドは、さまざまなパラメーターを指定してビルド プロセスをカスタマイズできます。たとえば、--no-cache オプションを使用して、イメージのビルド時に Docker がキャッシュを使用しないように強制したり、--build-arg オプションを使用してビルド中に必要な環境変数。 docker build --help コマンドを使用して、使用可能なすべてのオプションを表示できます。

    2. Dockerfile に基づいて springboot イメージを生成する

    ここでは、dockerfile を使用して springboot Web アプリケーション イメージを構築し、docker を使用してコンテナーを起動する方法を示します。

    2.1、准备springboot应用jar包

    我们准备一个基于springboot开发的应用服务,这个服务开放8080端口,访问是返回一个用户的姓名信息。

    为了方便,可以使用spring initializr 在线生成demo代码,在demo代码的基础上开发一个controller返回一个User对象的name信息,由于这块代码比较简单,这里就不详述过程了。

    Springboot Web アプリケーション イメージを構築し、コンテナーを使用してデプロイする方法

    代码完成以后使用mvn clean package进行打包,这里打包成功以后生成了demo-0.0.1-SNAPSHOT.jar,我们使用java -jar demo-0.0.1-SNAPSHOT.jar就可以运行这个应用程序。

    2.2、编写Dockerfile

    在项目根目录下创建一个名为Dockerfile的文件,并在其中添加以下内容:

    FROM openjdk:18-jdk-alpine
    MAINTAINER lucas
    COPY target/demo-0.0.1-SNAPSHOT.jar /usr/app/
    WORKDIR /usr/app
    EXPOSE 8080
    ENTRYPOINT ["java", "-jar", "demo-0.0.1-SNAPSHOT.jar"]

    在上面的Dockerfile中,FROM指令指定了基础镜像为openjdk:18-jdk-alpineCOPY指令将构建好的可执行jar包复制到容器中,WORKDIR指令设置工作目录为/usr/appEXPOSE指令指定了容器运行的端口为8080ENTRYPOINT指令指定了容器启动时要执行的命令为java -jar demo-0.0.1-SNAPSHOT.jar

    在终端中进入项目根目录,然后执行以下命令构建镜像:

    docker build -t demo:latest .

    其中,-t参数指定了镜像的名称和版本号,.参数指定了Dockerfile所在的目录。

    [root@node1 docker]# docker build -t demo:latest .
    Sending build context to Docker daemon 51.05 MB
    Step 1/6 : FROM openjdk:18-jdk-alpine
     ---> c89120dcca4c
    Step 2/6 : MAINTAINER lucas
     ---> Running in 3d0ae6d2a813
     ---> 085b9066ca7b
    Removing intermediate container 3d0ae6d2a813
    Step 3/6 : COPY target/demo-0.0.1-SNAPSHOT.jar /usr/app/
     ---> c5c77f80f179
    Removing intermediate container 00228e4b0aed
    Step 4/6 : WORKDIR /usr/app
     ---> bdb555e3fb18
    Removing intermediate container 35682266f140
    Step 5/6 : EXPOSE 8080
     ---> Running in 499d9888fa01
     ---> 0fca023e8f23
    Removing intermediate container 499d9888fa01
    Step 6/6 : ENTRYPOINT java -jar demo-0.0.1-SNAPSHOT.jar
     ---> Running in 661fdaafa31d
     ---> 61e80950d665
    Removing intermediate container 661fdaafa31d
    Successfully built 61e80950d665

    可以看到构建成功,使用docker images 可以查看到构建成功的镜像。

    Springboot Web アプリケーション イメージを構築し、コンテナーを使用してデプロイする方法

    三、运行容器服务,验证镜像的可用性

    以上步骤已经使用docker build生成了镜像,接下来就可以使用这个镜像启动容器,启动后会自动启动应用程序。

    在终端中执行以下命令启动容器:

    docker run -d -p 8080:8080 demo:latest

    其中,-d参数指定了容器在后台运行,-p参数指定了容器的端口映射,demo:latest参数指定了要运行的镜像名称和版本号。

    访问对应的web服务进行访问验证,结果如下:

    Springboot Web アプリケーション イメージを構築し、コンテナーを使用してデプロイする方法

    以上がSpringboot Web アプリケーション イメージを構築し、コンテナーを使用してデプロイする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
    高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

    この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

    適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

    この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

    カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

    この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

    キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

    この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

    Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

    Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    Dreamweaver Mac版

    Dreamweaver Mac版

    ビジュアル Web 開発ツール

    MantisBT

    MantisBT

    Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

    SAP NetWeaver Server Adapter for Eclipse

    SAP NetWeaver Server Adapter for Eclipse

    Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

    VSCode Windows 64 ビットのダウンロード

    VSCode Windows 64 ビットのダウンロード

    Microsoft によって発売された無料で強力な IDE エディター

    PhpStorm Mac バージョン

    PhpStorm Mac バージョン

    最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール