Use o plugin maven dockerfile-maven-plugin no IDEA para criar e enviar a imagem Docker para o armazém privado (Harbor)

fundo

Um projeto pai-filho construído com maven. Existem vários subprojetos no projeto pai. A função a ser realizada agora é empacotar um determinado projeto como uma imagem docker e, em seguida, enviá-lo para um armazém espelho Docker (armazém espelho Harbour).

dockerfile-maven-plugin

No pom pai, importe o plugin:

<pluginManagement>
     <plugins>
         <plugin>
             <groupId>com.spotify</groupId>
             <artifactId>dockerfile-maven-plugin</artifactId>
             <version>${docker.maven.plugin.version}</version>
             <executions>
                 <execution>
                     <id>default</id>
                     <goals>
                         <!--如果package时不想用docker打包,就注释掉这个goal-->
                         <goal>build</goal>
                         <goal>push</goal>
                     </goals>
                 </execution>
             </executions>
             <configuration>
                 <contextDirectory>${project.basedir}</contextDirectory>
                 <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
                 <repository>${docker.repostory}/${docker.registry.name}/${project.artifactId}</repository>
                 <buildArgs>
                     <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                 </buildArgs>
             </configuration>
         </plugin>
     </plugins>
 </pluginManagement>

Dentre eles, a configuração de atributos do plug-in é a seguinte:

<properties>
    <!--Harbor仓库的地址,ip:port-->
    <docker.repostory>192.168.1.6:9001</docker.repostory>
    <!--上传的Docker镜像前缀,此前缀一定要和Harbor中的项目名称一致,表示打包后的Docker镜像会上传到Harbor的哪个项目中-->
    <docker.registry.name>fyk_project</docker.registry.name>
    <docker.maven.plugin.version>1.4.10</docker.maven.plugin.version>
</properties>

Desta forma, em cada subprojeto, basta realizar algumas outras configurações personalizadas, como configurar o rótulo da imagem, conforme segue:

<finalName>fyk-config</finalName>
<plugins>
    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>dockerfile-maven-plugin</artifactId>
        <configuration>
            <tag>${docker.image.tag}</tag>
        </configuration>
    </plugin>
</plugins>

As propriedades de configuração aqui são:

<properties>
    <!--Docker镜像的标签,也就是版本-->
    <docker.image.tag>v1.0.0</docker.image.tag>
</properties>

Neste ponto, no IDEA, a configuração maven do dockerfile-maven-plugin está concluída. No entanto, o espelhamento e o espelhamento push não podem ser feitos neste momento e as outras duas configurações precisam ser espelhadas.

Faça uma configuração de espelho

Depois de concluir a configuração do plug-in maven do IDEA, agora começamos a fazer a imagem.
Antes de mais nada é preciso entender: a produção da imagem e a operação push são todas feitas pelo Docker, portanto o ambiente Docker deve estar instalado. Simplificando, dockerfile-maven-plugin apenas simplifica a complexidade da operação direta do Docker.Isso deve ser feito pelo Docker e deve ser feito pelo Docker.
Então, depois de entender esse ponto, você sabe que não é necessário instalar o ambiente Docker localmente, desde que exista um ambiente Docker.
Como basta ter um ambiente Docker, aqui eu utilizo o ambiente Docker no servidor (claro, você também pode usar o ambiente Docker local, usar o ambiente Docker local não requer configuração adicional, basta seguir o tutorial para instalar o Docker localmente). Para utilizar o ambiente Docker do servidor, é necessário configurar uma variável de ambiente (por padrão, o plug-in está conectado ao ambiente Docker local, ou seja, 127.0.0.1), a configuração da variável de ambiente é a seguinte, basta alterar para o seu próprio ambiente Docker do servidor (pode exigir reiniciar o computador ):
DOCKER_HOST tcp://192.168.1.6:2375
insira a descrição da imagem aqui
Neste momento, mais uma etapa é necessária para criar a imagem Docker. Escreva o Dockerfile: crie um Dockerfile no diretório do subprojeto (mesmo nível do arquivo pom), o conteúdo é o seguinte:

FROM frolvlad/alpine-oraclejdk8
EXPOSE 10000
ADD target/fyk-config.jar /fyk-config.jar
ENTRYPOINT exec java -jar /fyk-config.jar

Ok, agora execute o comando mvn clean package package para criar a imagem. Após a execução do comando, você pode visualizar a imagem no ambiente Docker. A seguir está a imagem que acabei de criar:
insira a descrição da imagem aqui

Envie a imagem para o armazém

Como o warehouse que desejo enviar é privado e requer nome de usuário e senha, preciso adicionar a seguinte configuração no arquivo de configuração maven (arquivo de configuração) :

<servers>
	<server>
		<id>192.168.1.6:9001</id>
		<username>fyk</username>
		<password>Fyk123456</password>
		<configuration>
			<email>[email protected]</email>
		</configuration>
	</server>
</servers>

O id aqui é o IP e a porta do warehouse.
Após a configuração, execute o comando:

mvn dockerfile:push

O significado deste comando é enviar a imagem para o armazém de espelhos. A imagem enviada é a imagem que acabou de ser gerada no Docker (na instância, este comando envia a imagem no Docker para o warehouse e não importa como a imagem é criada). Depois de executar este comando, verifique o armazém do Harbour:
insira a descrição da imagem aquiNeste ponto, o IDEA usa o plug-in maven dockerfile-maven-plugin para criar e enviar a imagem do Docker para o armazém privado (Harbor) e ele é concluído.

pergunta

Não é possível conectar-se ao serviço Docker remoto?
Este problema pode ser causado pelo firewall (isto é simples, desligue o firewall ou abra uma parede dupla-face, se a parede não puder ser aberta, instale o Docker localmente); se a parede estiver aberta, pode ser que o Docker não tenha acesso remoto habilitado: abra
o acesso remoto do docker :
digite /lib/systemd/system/docker.service

vim /lib/systemd/system/docker.service

Encontre a linha ExecStart e modifique-a para o seguinte

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

reinicie o daemon

systemctl daemon-reload

reiniciar a janela de encaixe

systemctl restart docker

Verifique
http://ip:2375/images/json com um navegador
até agora, o acesso remoto do docker está aberto.


Durante o processo de operação, uma determinada etapa da operação falha, por exemplo, a falha solicita que o login do docker seja necessário e assim por diante.
Na verdade, esse problema não tem nada a ver com o plugin dockerfile-maven-plugin. Primeiro de tudo, entenda que o plug-in é apenas para simplificar a operação, deve ser feito pelo Docker, ou deve ser feito pelo Docker. Portanto, se houver muitos desses problemas, você pode fazer upload manualmente de uma imagem para o warehouse no ambiente docker para tentar. Se o upload for bem-sucedido, então, de acordo com o método descrito neste artigo, tudo deverá ser bem-sucedido. Se o upload manual falhar, provavelmente há algo errado com seu ambiente. Por exemplo, se o login do docker for solicitado, basta fazer login. Para perguntas específicas, você pode consultar outros materiais novamente.


Erro: Obtenha https://192.168.1.6:9001/v2/: http: o servidor deu resposta HTTP ao cliente HTTPS
No arquivo do ambiente Docker (no servidor): /etc/docker/daemon.json, adicione:
"inseguro - registros":["192.168.1.6:9001"]
da seguinte forma:
insira a descrição da imagem aqui


Acho que você gosta

Origin blog.csdn.net/fyk844645164/article/details/107878063
Recomendado
Clasificación