Este artículo presenta el método de usar el complemento Maven para construir imágenes Docker. Lo compartiré contigo. Los detalles son los siguientes:
herramienta
Si desea hacer un buen trabajo, primero debe afilar sus herramientas. Después de la investigación, los siguientes complementos Docker Maven han ingresado a mi campo de visión:
| Nombre del complemento | Dirección oficial |
|---|---|
| Docker-Maven-Plugin | https://github.com/spotify/docker-maven-plugin |
| Docker-Maven-Plugin | https://github.com/fabric8io/docker-maven-plugin |
| Docker-Maven-Plugin | https://github.com/bibryam/docker-maven-plugin |
El autor eligió el primero de tres dimensiones: estrellas, facilidad de uso del documento y frecuencia de actualización.
Construya imágenes de Docker con complementos
Uso simple
Tomemos el proyecto anterior: microservicio-descubrimiento-eureka como ejemplo:
Agregue el siguiente párrafo en pom.xml
<S.) <glugins> <!-El complemento Maven de Docker, sitio web oficial: https://github.com/spotify/docker-maven-plugin-> <glugin> <proupid> com.spotify </groupid> <artifactid> docker-maven-plugin </artifactid> <versión> 0. Regular [A-Z0-9-_.], De lo contrario, la compilación no tendrá éxito-> <!-Ver: https://github.com/spotify/docker-maven-plugin invalidal repositorio name ... solo [a-z0-9-_. <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resources> </figuration> </glugin> </glugins> </build> Ejecutar el comando:
MVN Clean Package Docker: Build
Encontraremos que la consola tiene algo como lo siguiente:
[Información] Imagen de construcción Microservicio-Descubrimiento-eureKASTEP 1: Desde Javapulling desde biblioteca/javadigest: sha256: 581a4afcbbedd8fdf194d597cb5106c1f91463024fb3A49a2d9f025165eb675fstatus: descargado jaava para jaava: javina para java para jaava para jaava: javina para jaava: jawa. ---> EA40C858F006SP 2: ADD /MICROSERVICE-DISSCOVERY-EUREKA-0.0.1-SNAPSHOT.JAR // ---> D1C174083B CAREMOVING CONTENEDOR intermedio 91913D847C20Step 3: Entrada Java -Jar /Microservice-Discubrevery-eureka-0.0.1-snapshot.jar ---> Ejecutando en 0f2aeccdfd46 ---> d57b027ca65aremoving contenedor intermedio 0f2aeccdfd46successucessucessUscessent D57B027Ca65a [info] integrado en microservicio-discoverko-eeureka [info-eeureka] integrado d57b027ca65a construido en microservicio-discoverkainka [info-eeureka] integrado d57B027CA65A. --------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------
Felicitaciones, la construcción fue exitosa.
Ejecutamos imágenes de Docker y encontramos que la imagen se ha construido con éxito:
ID de imagen de la etiqueta del repositorio creado Sizemicroservice-Discubrevery-eureka Última D57B027CA65A hace aproximadamente un minuto 681.5 MB
Empiece el espejo
Docker Run -P 8761: 8761 Microservicio-Descubrimiento-eureka
Encontraremos que la imagen Docker comenzará muy rápidamente.
Prueba de acceso
Visite http: // Docker Host IP: 8761 para ver la interfaz Eureka normalmente.
Construir con Dockerfile
El método anterior es la forma más fácil. Muchas veces, todavía necesitamos construirlo con la ayuda de Dockerfile. Primero, creamos el archivo DockerFile en el directorio/Microservice-Discubovery-eureka/src/main/docker.
De Java: 8volume/tmpadd Microservice-Discubrevery-eureka-0.0.1-snapshot.jar App.Jarrun Bash -c 'touch /app.jar'expose 9000Entrypoint ["java", "-djava.security.egd = archivo:/dev /./ urandom", "-jar", ","/"/jajar"
Modificar pom.xml
<S.) <glugins> <!-El complemento Maven de Docker, sitio web oficial: https://github.com/spotify/docker-maven-plugin-> <glugin> <proupid> com.spotify </groupid> <artifactid> docker-maven-plugin </artifactid> <versión> 0. regular [a-z0-9-_.], De lo contrario, la compilación no tendrá éxito-> <!-ver: https://github.com/spotify/docker-maven-plugin invalidal repositorio nombre ... solo [a-z0-9-_.] están permitidos-> <iceneName) que dockerker-dockerfer-file </imageName> is located--> <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resources> </configuration> </glugin> </glugins> </build>Los otros pasos son los mismos. De esta manera, puede usar DockerFile para construir imágenes de Docker.
Push Docker Image en Dockerhub
Primero modifique la configuración del archivo de configuración global de Maven.
<SERVERS> <SERVER> <DI> DOCKER-HUB </id> <sserername> su nombre de usuario de DockerHub </ssonername> <Assword> su contraseña de DockerHub </sbubase> <figuration> <Email> su buzón de DockerHub </loalic> </configuración> </servidor> </servers>
Crea un repositorio en Dockerhub
El proyecto pom.xml se modifica a lo siguiente: tenga en cuenta que la ruta del nombre de imagen debe ser consistente con la ruta del repositorio
<S.) <glugins> <!-El complemento Maven de Docker, sitio web oficial: https://github.com/spotify/docker-maven-plugin-> <glugin> <proupid> com.spotify </groupid> <artifactid> docker-maven-plugin </artifactid> <versión> 0. Regular [A-Z0-9-_.], De lo contrario, la compilación no tendrá éxito-> <!-Ver: https://github.com/spotify/docker-maven-plugin inválido repositorio del repositorio ... solo [a-z0-9-_. <imageName>eacdy/test</imageName> <!-- Specify the path where the Dockerfile is located --> <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <Incluye> $ {Project.Build.FinalName} .JAR </clice> </ recurse> </rugsures> <!- Las siguientes dos líneas se utilizan para Docker Push a Dockerhub. -> <serverid> Docker-Hub </ververid> <RegistryUrl> https://index.docker.io/v1/ </registryurl> </configuración> </plugin> </glugins> </build> Ejecutar el comando:
MVN Clean Package Docker: Build -Dpushimage
Después de que la construcción sea exitosa, encontraremos que la imagen de Docker ha sido empujada a Dockerhub.
Empujar la imagen a un repositorio privado
En muchos escenarios, necesitamos llevar el espejo a un repositorio privado. Para explicar la integridad, el repositorio privado utiliza un repositorio privado que configura la autenticación de inicio de sesión.
Al igual que presionando a DockerHub, primero debemos modificar el archivo de configuración global de Maven configuración.xml y agregar el siguiente párrafo
<Servers> <verver> <id> Docker-Registry </id> <ssername> su nombre de usuario DockerHub </ssonername> <Scassions> su contraseña de DockerHub </contraseña> <figuration> <Email> su cuadro de correo de DockerHub </loalic> </senturation> </servidor> </servers>
Cambiar el pom.xml del proyecto a lo siguiente,
<glugin> <MoupRid> com.spotify </groupid> <artifactid> docker-maven-plugin </artifactid> <versión> 0.4.12 </versión> <necuteation> <!-La ruta es: dirección de apositorio privado/la ruta de espejo que desea-> <ImagenEnse> reg.itmuch.com/test-pull-registry </icicename> <CockerDirectory> $ {Project.Basedir}/src/main/docker </dockerDirectory> <surers> <contrationce> <targetPath>/</targetPath> <sirectory> $ {proyect.build.directory} </directory> <produce> $ {Project.BuLild.FinalName} .jar </include> </recursos> </recursos> < con el archivo de configuración de Maven configuración.xml-> <serverid> Docker-Registry </serverid> </figuration> </tugin> implementar:
MVN Clean Package Docker: Build -Dpushimage
Espere un momento y tendrá éxito.
Si desea descargar la imagen del servidor privado, ejecute:
Docker Iniciar sesión Reg.itmuch.com # Luego ingrese el número de cuenta y la contraseña Docker Tire de reg.itmuch.com/test-pull-registry
Atar el complemento para ejecutar en una fase
En muchos escenarios, tenemos tales necesidades, por ejemplo, al ejecutar el paquete MVN Clean, construiremos automáticamente una imagen Docker para nosotros. ¿Está bien? La respuesta es sí. Solo necesitamos unir el objetivo del complemento a una cierta fase.
La llamada fase y objetivo se pueden entender de la siguiente manera: el formato de comando Maven es: Fase MVN: Objetivo, por ejemplo, MVN Package Docker: Build, entonces, el paquete y el Docker son ambas fases, y Build Is GoL.
Aquí hay un ejemplo:
Primero configure las propiedades:
<Properies> <Docker.image.prefix> reg.itmuch.com </docker.image.prefix> </propiies>
Configuración del complemento:
<DIARD> <GULTINS> <LEGRIN> <MOUMPOMID> COM.SPOTIFY </Groupid> <AtifactId> Docker-Maven-Plugin </arfactId> <Excaciosions> <ecution> <id> build-image </id> <fase> paquete </fase> <potes> <potes> build </auts> </seTe> </jecution> </secution> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <baseImage>java</baseImage> <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint> <resources> <resource> <targetPath>/</targetPath> <Directory> $ {Project.Build.Directory} </Directory> <Incluye> $ {Project.Build.FinalName} .JAR </include> </ recursos> </ recursos> </figuration> </glugin> </glugins> </build>Como arriba, solo necesitamos agregar:
<ecucesions> <secution> <id> build-iMage </id> <fase> paquete </fase> <pets> <pote> build </poal> </puses> </secution> </ejecutions>
Hazlo. Este ejemplo se refiere al objetivo de compilación de Docker, vinculado a la fase del paquete. En otras palabras, el usuario solo necesita ejecutar el paquete MVN y ejecutar automáticamente MVN Docker: Build.
Excepciones comunes
No se puede conectar a 2375 (generalmente en Win7)
La copia del código es la siguiente:
Conéctese a localhost: 2375 [localhost/127.0.0.1, localhost/0: 0: 0: 0: 0: 0: 0: 0: 1] falló: conexión rechazada: conectar -> [ayuda 1]
Pasos de solución:
Ingrese Docker-Machine Env
$ Env: docker_tls_verify = "1" $ env: docker_host = "tcp: //192.168.99.100: 2376" $ env: docker_cert_path = "c: /users/administrator/.docker/machine/machines/default
Agregar configuración para complementos
< <DockerCertPath> c: /users/administrator/.docker/machine/machines/default </dockerCertpath>
Después de la modificación, la configuración del complemento se convierte en:
<glugin> <uproupid> com.spotify </proupid> <artifactid> docker-maven-plugin </artifactid> <versión> 0.4.12 </versión> <figuration> <imageName> eacdy/test </imagename> <dockerDirectory> $ {proyecto Problema de conectarse a Localhost: 2375, asegúrese de ser consistente con Docker-Machine Env-> <Cockerhost> https://192.168.99.100:2376 </dockerhost> <DockerCertPath> c: /users/administrator/.docker/machine/machines/default </dockerCertpathpath> <TargetPath>/</TargetPath> <Directory> $ {Project.Build.Directory} </Directory> <Incluye> $ {Project.Build.FinalName} .JAR </include> </ recursos> </ recursos> <!- Las siguientes dos líneas se usan para Docker Push a Dockerhub. -> <serverid> docker-hub </veridid> <registristryurl> https://index.docker.io/v1/ </registryurl> </configuración> </plugin> Referencia: https://github.com/spotify/docker-maven-plugin/issues/116
CONSEJOS
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.