[Docker] Utilisez le plug-in docker-maven-plugin pour créer, publier et transférer l'image vers un entrepôt privé


Cet article décrit comment transférer le projet vers un entrepôt Docker privé via le plug-in docker-maven-plugin dans le projet Spring Boot, puis extraire le projet dans l'entrepôt et exécuter le projet à l'aide de Docker Run. L'auteur le construit lui-même et la qualité est garantie.

1. Utilisez le plug-in docker-maven-plugin pour transférer le projet vers le serveur Docker privé

1.1. Créer une image v1.0

1. Pour l'utiliser docker-maven-plugin, vous devez pom.xmlajouter le plug-in ;

<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>

Remarque : faites attention à db:3306

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

2. Avant de créer l'image, nous devons empaqueter le projet, puis le construire. Sinon, une erreur se produira. Utilisez simplement la commande suivante.

mvn package docker:build

3. Une fois l'emballage terminé, nous pouvons voir cette image sur notre local ;

# 本地运行
[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. Bien sûr, nous pouvons également packagedirectement empaqueter l'image lors de l'utilisation de la commande, la modifier pom.xmlet <plugin>ajouter <executions>une configuration sous le nœud ;

Il s'agit d'un ajout supplémentaire ; si vous ne le construisez pas, créez simplement l'image Docker lorsque vous en avez besoin.

<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. Créer une image v2.0

Construire l'image v2.0 est une mise à niveau vers la v1.0. Les inconvénients d'origine sont que les étapes de construction de l'image Docker sont sérieusement couplées au code pom du projet, ce qui n'est pas propice aux modifications ultérieures et le processus de construction provoque la création du fichier pom. être ballonné. Pour remédier à ces lacunes, la v2.0 utilise la méthode DockerFile pour séparer les étapes de construction de l'image docker du fichier pom du projet Spring Boot. Les étapes spécifiques sont les suivantes :

1. Créez un nouveau fichier DockerFile

Créez un nouveau fichier DockerFile sous le projet et personnalisez le contenu. Le contenu de référence est le suivant :

# 该镜像需要依赖的基础镜像
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. Modifiez le fichier pom

Le processus de création d'une image Docker n'a désormais que <dockerFileDir>${project.basedir}</dockerFileDir>cette ligne, qui est très concise.

<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. Empaqueter, créer et afficher des images

Emportez-le en 3 étapes, ce qui est beaucoup plus simple que l'original et semble confortable.

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

1.3. Pousser vers le référentiel miroir

1. Spécifiez la construction et envoyez-la vers l'entrepôt privé

2. Connectez-vous à l'adresse de l'entrepôt privé : http://localhost:8280/ et affichez l'image qui vient d'être poussée.

2. Extrayez l'image Docker du serveur privé pour l'exécuter

Après avoir poussé l'image vers l'entrepôt privé, vous devez extraire l'image localement et l'utiliser.

1. Tirez l'image vers le local

Étant donné que nous avons construit l'image localement, puis l'avons poussée vers l'entrepôt privé, nous devons d'abord supprimer l'image créée à l'origine, puis nous rendre dans l'entrepôt privé pour extraire l'image.

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. Exécutez le conteneur

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

3. Accédez à l'une des interfaces du conteneur

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

Mais malheureusement, la vérification du journal Docker affichera des erreurs liées à la base de données comme prévu.

En effet, lorsque nous avons construit l'image du projet fire-tiny-fabric à l'étape précédente, nous avons spécifié que nous devions nous appuyer sur la base de données mysql, mais nous n'avons pas spécifié la base de données lors de l'exécution de docker, il y aura donc des erreurs dans connexion à la base de données.

4. Réexécutez le conteneur

  • S'il existe une base de données créée à l'aide de Docker, spécifiez la base de données MySQL via –link :

    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"
    

    Remarque : mysql dans mysql:db est le nom du conteneur (–name) et la base de données suivante est la variable spécifiée lors de la construction de Fire-tiny-fabric. Le principe de –link est d'ajouter un nom d'alias à /etc/hosts.

  • S'il s'agit d'une base de données construite localement, précisez l'adresse IP et le port

    Nous utilisons db comme nom de domaine pour nous connecter à la base de données du projet, il nous suffit donc d'ajouter un mappage de nom de domaine de db à l'adresse IP de l'hôte du conteneur.

    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. Références

Mon article : "Comment vérifier quelles versions d'un Docker image.md"

Mon article : "Docker définit le source.md de l'image domestique"

Mon article : "Tutoriel pratique de démarrage rapide de Docker.md"

Mon article : "Docker installe MySQL, Redis, RabbitMQ, Elasticsearch, Nacos et d'autres services courants.md"

Mon article : "Docker Installer Nacos Service.md"

Mon article : "Comment modifier le fichier .md dans Docker"

Mon article : "Méthodes de connexion ou de communication entre Docker containers.md"

Mon article : "Comment conserver les données d'une base de données avec MySQL installé par Docker.md"

Mon article : "Créer Docker Private Repository.md"

Mon article : "Utilisation du plug-in docker-maven-plugin pour créer et publier des images push vers des entrepôts privés.md"

Mon article : "Résoudre l'échec de Docker à accéder au port 9200 après l'installation d'Elasticsearch.md"


Portail : analyse du code source de Nanny Spring5

Bienvenue pour échanger technologie et vie professionnelle avec l'auteur

contacter l'auteur

Je suppose que tu aimes

Origine blog.csdn.net/yuchangyuan5237/article/details/131971906
conseillé
Classement