[Docker] docker-maven-plugin プラグインを使用してイメージをビルド、リリースし、プライベート ウェアハウスにプッシュします


この記事では、Spring Boot プロジェクトの docker-maven-plugin プラグインを介してプロジェクトをプライベート Docker ウェアハウスにプッシュし、ウェアハウスにプロジェクトをプルし、docker run を使用してプロジェクトを実行する方法について説明します。作者が自分で作っているので品質は保証されています。

1. docker-maven-plugin プラグインを使用して、プロジェクトをプライベート サーバー Docker にプッシュします。

1.1. ビルドイメージ v1.0

1. 使用したい場合は、プラグインを追加するdocker-maven-plugin必要があります。pom.xml

<build>
     <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.33.0</version>
            <configuration>
                <!-- Docker 推送镜像仓库地址(由于是推送到本地的docker镜像仓库) -->
                <pushRegistry>http://localhost:5000</pushRegistry>
                <images>
                    <image>
                        <!--由于推送到私有镜像仓库,镜像名需要添加仓库地址(相当于告诉去哪里拉取镜像)-->
                        <name>localhost:5000/fire-tiny/${project.name}:${project.version}</name>
                        <!--定义镜像构建行为-->
                        <build>
                            <!--定义基础镜像-->
                            <from>java:8</from>
                            <args>
                                <!-- jar的名称,一般配置为gav的av -->
                                <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                            </args>
                            <!--定义哪些文件拷贝到容器中-->
                            <assembly>
                                <!--定义拷贝到容器的目录-->
                                <targetDir>/</targetDir>
                                <!--只拷贝生成的jar包-->
                                <descriptorRef>artifact</descriptorRef>
                            </assembly>
                            <!--定义容器启动命令-->
                            <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]</entryPoint>
                            <!--定义维护者-->
                            <maintainer>firefish</maintainer>
                            <!--使用Dockerfile构建时打开-->
                            <!--<dockerFileDir>${project.basedir}</dockerFileDir>-->
                        </build>
                        <!--定义容器启动行为-->
                        <run>
                            <!--设置容器名,可采用通配符(一般配置为gav的a)-->
                            <containerNamePattern>${project.artifactId}</containerNamePattern>
                            <!--设置端口映射-->
                            <ports>
                                <port>8080:8080</port>
                            </ports>
                            <!--设置容器间连接(即容器需要连接mysql,需要外部环境提供mysql连接)-->
                            <links>
                                <link>mysql:db</link>
                            </links>
                        </run>
                    </image>
                </images>
            </configuration>
        </plugin>
    </plugins>
</build>

注: db:3306 に注意してください。

spring:
  datasource:
    url: jdbc:mysql://db:3306/fire?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    username: root
    password: root

2. イメージをビルドする前に、プロジェクトをパッケージ化してからビルドする必要があります。そうしないとエラーが発生します。次のコマンドを使用してください。

mvn package docker:build

3. パッケージ化が完了すると、ローカル マシンでイメージが表示されます。

# 本地运行
[root@linux-local work]# docker images
REPOSITORY                                             TAG              IMAGE ID       CREATED             SIZE
localhost:5000/fire-tiny/fire-tiny-fabric              0.0.1-SNAPSHOT   9b7cf9c38c5d   About an hour ago   680MB

4. もちろん、packageコマンドを使用するときにイメージを直接パッケージ化し、それを変更しpom.xmlノードの下に構成を<plugin>追加することもできます。<executions>

これは追加機能です。作成しない場合は、必要に応じて Docker イメージをビルドするだけです。

<plugin>
    <groupId>io.fabric8</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>0.33.0</version>
    <executions>
        <!--如果想在项目打包时构建镜像添加-->
        <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
</plugin>

1.2. ビルドイメージ v2.0

イメージ v2.0 のビルドは v1.0 へのアップグレードです。元々の欠点は、docker イメージをビルドする手順がプロジェクトの pom コードと密接に結合しているため、後の変更には役に立たず、ビルド プロセスによって pom ファイルが作成されることです。肥大化すること。これらの欠点に対処するために、v2.0 では DockerFile メソッドを使用して、Docker イメージの構築ステップを Spring Boot プロジェクトの pom ファイルから分離します。具体的な手順は次のとおりです。

1. 新しい DockerFile ファイルを作成します

カスタマイズされた内容を含む新しい DockerFile ファイルをプロジェクトの下に作成します。参照内容は次のとおりです。

# 该镜像需要依赖的基础镜像
FROM java:8
# 拷贝target下的文件到容器中
ARG JAR_FILE
ADD target/${JAR_FILE} /
# 声明服务运行在8080端口
EXPOSE 8080
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/fire-tiny-fabric-0.0.1-SNAPSHOT.jar"]
# 指定维护者的名字
MAINTAINER mike

2.pomファイルを変更する

Docker イメージを構築するプロセスには<dockerFileDir>${project.basedir}</dockerFileDir>この行のみが含まれており、非常に簡単です。

<build>
     <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>io.fabric8</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>0.33.0</version>
            <configuration>
                <!-- Docker 推送镜像仓库地址(由于是推送到本地的docker镜像仓库) -->
                <pushRegistry>http://localhost:5000</pushRegistry>
                <images>
                    <image>
                        <!--由于推送到私有镜像仓库,镜像名需要添加仓库地址(这个相当于告诉别人拉取镜像的时候去哪里拉取)-->
                        <name>localhost:5000/fire-tiny/${project.name}:${project.version}</name>
                        <!--定义镜像构建行为-->
                        <build>
                            <!--使用Dockerfile构建时打开-->
                            <dockerFileDir>${project.basedir}</dockerFileDir>
                        </build>
                    </image>
                </images>
            </configuration>
        </plugin>
    </plugins>
</build>

3. イメージをパッケージ化し、構築し、表示する

3 ステップの 1 セットで取り外しが可能で、オリジナルよりもはるかにシンプルで、見た目も快適です。

# 打包构建
mvn clean package docker:build
# 查看本地镜像
docker images

1.3. ミラーウェアハウスへのプッシュ

1. ビルドを指定してプライベートウェアハウスにプッシュする

2. プライベート ウェアハウス アドレス http://localhost:8280/ にログインし、プッシュしたばかりのイメージを表示します。

2. プライベート サーバーの Docker イメージをプルして実行します

イメージをプライベート ウェアハウスにプッシュした後、イメージをローカルにプルして使用する必要があります。

1. イメージをローカルにプルします

イメージをローカルで構築してからプライベート ウェアハウスにプッシュしたため、最初に構築されたイメージを削除してから、プライベート ウェアハウスに移動してイメージをプルする必要があります。

docker rmi "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"
docker pull "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"

2. コンテナを実行する

docker run --rm -d --name fire-tiny-fabric -p 8080:8080 "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"

3. コンテナ内のいずれかのインターフェイスにアクセスします

curl -X GET --header 'Accept: application/json' 'http://localhost:8080/brand/list?pageNum=1&pageSize=3'

しかし、残念ながら、docker ログを確認すると、予想どおりデータベース関連のエラーが表示されます。

これは、前のステップで fire-tiny-fabric プロジェクトのイメージを構築したときに、mysql データベースに依存する必要があると指定しましたが、docker run でデータベースを指定しなかったため、エラーが発生するためです。データベース接続。

4. コンテナを再実行します

  • docker を使用して構築されたデータベースがある場合は、-link を通じて mysql データベースを指定します。

    docker run --rm -d --name fire-tiny-fabric -p 8080:8080 \
    --link mysql:db \
    "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"
    

    注: mysql:db の mysql はコンテナの名前 (-name) であり、次の db は fire-tiny-fabric のビルド時に指定された変数です。–link の原則は、エイリアス名を /etc/hosts に追加することです。

  • ローカルに構築されたデータベースの場合は、IP アドレスとポートを指定します

    プロジェクト内のデータベースに接続するためのドメイン名として db を使用するため、db からホスト IP アドレスへのドメイン名マッピングをコンテナに追加するだけで済みます。

    spring:
      datasource:
        url: jdbc:mysql://db:3306/fire?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
        username: root
        password: root
    
    # 域名db与主机ip的映射
    docker run --rm -d --name fire-tiny-fabric -p 8080:8080 \
    --add-host=db:192.168.1.6 \
    "localhost:5000/fire-tiny/fire-tiny-fabric:0.0.1-SNAPSHOT"
    
# 测试接口
curl -X GET --header 'Accept: application/json' 'http://localhost:8080/brand/list?pageNum=1&pageSize=3'

3. 参考文献

私の記事: 「Docker image.md のバージョンを確認する方法」

私の記事:「Dockerが国内イメージソース.mdを設定する」

私の記事: 「Docker クイック スタート実践チュートリアル.md」

私の記事: 「Docker は MySQL、Redis、RabbitMQ、Elasticsearch、Nacos およびその他の共通サービスをインストールします。md」

私の記事: 「Docker が Nacos service.md をインストールする」

私の記事: 「Docker でファイル .md を変更する方法」

私の記事:「Dockerコンテナ間の接続または通信方法.md」

私の記事: 「Docker によってインストールされた MySQL がデータベース data.md を永続化する方法」

私の記事: 「Docker Private Warehouse.md の作成」

私の記事: 「docker-maven-plugin プラグインを使用してイメージをビルド、公開、プライベート ウェアハウス.md にプッシュする」

私の記事: 「Docker が Elasticsearch.md をインストールした後にポート 9200 にアクセスできない問題を解決する」


ポータル: Nanny スタイルの Spring5 ソース コード分析

著者とテクノロジーや仕事生活について交流することを歓迎します

著者に連絡する

おすすめ

転載: blog.csdn.net/yuchangyuan5237/article/details/131971906