Como enviar uma imagem do docker para um repositório privado

418

Tenho uma imagem do docker marcada como me/my-imagee tenho um repositório particular no dockerhub chamado me-private.
Quando pressiono me/my-image, acabo sempre atingindo o repositório público.

Qual é a sintaxe exata para enviar especificamente minha imagem para meu repositório particular?

Eugene Goldberg
fonte
1
A palavra "privado" nem sequer ocorre na página da web que você vinculou.
Martin Andersson

Respostas:

617

Você precisa marcar sua imagem corretamente primeiro com o seu registryhost:

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

Em seguida, o docker empurre usando a mesma tag.

docker push NAME[:TAG]

Exemplo:

docker tag 518a41981a6a myRegistry.com/myImage
docker push myRegistry.com/myImage
Abdullah Jibaly
fonte
1
então, com esta imagem: 518a41981a6a, qual é a sintaxe real das tags para acessá-lo no repositório privado me, por favor?
Eugene Goldberg
10
docker tag 518a41981a6a me-private.com/myPrivateImage && docker push me-private.com/myPrivateImage
Abdullah Jibaly
2
Corrigi alguns problemas de sintaxe na minha resposta acima também. Além disso, quando você envia para um registro, precisa usar um nome de imagem real e não o ID da imagem.
Abdullah Jibaly
por algum motivo, a imagem ainda vai para o registro público do dockerhub em vez do privado. Apenas para esclarecimentos - meu registro particular também está no dockerhub. Marquei a imagem e fiz o push, mas o feedback indicava que todas as camadas já foram enviadas, o que não seria o caso se a imagem fosse para o registro privado pela primeira vez
Eugene Goldberg
11
Ah, se você estiver usando um registro dockerhub privado, deve ser bem simples. Certifique-se de fazer o docker loginprimeiro e, em seguida, docker tag 518a41981a6a me-private/myPrivateImagedocker push me-private/myPrivateImage
marque a
214

Apenas três etapas simples:

  1. docker login --username username

    • solicita a senha se você omitir o --passwordque é recomendado, pois não o armazena no histórico de comandos
  2. docker tag my-image username/my-repo

  3. docker push username/my-repo

Abhishek Dasgupta
fonte
42
deixe de fora a --passwordbandeira se não quiser que sua senha apareça no histórico. isso solicitará.
AndrewD 12/12
5
não está funcionando como nenhum nome de host do registro de propriedade privada mencionado.
Boris Ivanov
@BorisIvanov, o que você quer dizer?
cowlinator
4
@ cowlinator, esta resposta parece estar usando o Docker Hub em vez de um repositório particular, conforme a pergunta.
Duct_tape_coder 14/02/19
6
Isso não responde à pergunta de como enviar para um repositório privado .
Mark K Cowan
48

Primeiro, acesse sua conta do Docker Hub e faça o repo. Aqui está uma captura de tela da minha conta do Docker Hub: insira a descrição da imagem aqui

Na foto, você pode ver meu repo é "chuangg"

Agora entre no repositório e torne-o privado clicando no nome da sua imagem. Então, para mim, cliquei em "chuangg / gene_commited_image" e depois fui em Configurações -> Tornar privado. Então eu segui as instruções na tela insira a descrição da imagem aqui

COMO CARREGAR SUA IMAGEM DO DOCKER NO DOCKER HUB

Método # 1 = Empurrando sua imagem pela linha de comando (cli)

1) docker commit <container ID> <repo name>/<Name you want to give the image>

Sim, acho que deve ser o ID do contêiner. Provavelmente não pode ser o ID da imagem.

Por exemplo = docker commit 99e078826312 chuangg/gene_commited_image

2) docker run -it chaung/gene_commited_image

3) docker login --username=<user username> --password=<user password>

Por exemplo = docker login --username=chuangg [email protected]

Sim, você precisa fazer o login primeiro. Efetue logout usando o "docker logout"

4) docker push chuangg/gene_commited_image

Método # 2 = Enviando sua imagem usando pom.xml e linha de comando.

Observe que usei um perfil Maven chamado “build-docker”. Se você não quiser usar um perfil, basta remover os <profiles>, <profile>, and <id>build-docker</id>elementos.

Dentro do pai pom.xml:

<profiles>
        <profile>
            <id>build-docker</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>io.fabric8</groupId>
                        <artifactId>docker-maven-plugin</artifactId>
                        <version>0.18.1</version>
                        <configuration>
                            <images>
                                <image>
                                    <name>chuangg/gene_project</name>
                                    <alias>${docker.container.name}</alias>
                                    <!-- Configure build settings -->
                                    <build>
                                        <dockerFileDir>${project.basedir}\src\docker\vending_machine_emulator</dockerFileDir>
                                        <assembly>
                                            <inline>
                                                <fileSets>
                                                    <fileSet>
                                                        <directory>${project.basedir}\target</directory>
                                                        <outputDirectory>.</outputDirectory>
                                                        <includes>
                                                            <include>*.jar</include>
                                                        </includes>
                                                    </fileSet>
                                                </fileSets>
                                            </inline>
                                        </assembly>
                                    </build>
                                </image>
                            </images>
                        </configuration>
                        <executions>
                            <execution>
                                <id>docker:build</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>build</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

Comando do terminal do Docker para implantar a imagem do Docker (no diretório em que seu pom.xml está localizado) = mvn clean deploy -Pbuild-docker docker:push

Observe que a diferença entre os métodos 2 e 3 é que o método 3 possui um extra <execution>para a implantação.

Método # 3 = Usando o Maven para implantar automaticamente no Docker Hub

Adicione este material ao seu pom.xml pai:

    <distributionManagement>
        <repository>
            <id>gene</id>
            <name>chuangg</name>
            <uniqueVersion>false</uniqueVersion>
            <layout>legacy</layout>
            <url>https://index.docker.io/v1/</url>
        </repository>
    </distributionManagement>


    <profiles>
        <profile>
            <id>build-docker</id>
            <build>
                <plugins>

                    <plugin>
                        <groupId>io.fabric8</groupId>
                        <artifactId>docker-maven-plugin</artifactId>
                        <version>0.18.1</version>
                        <configuration>
                            <images>
                                <image>
                                    <name>chuangg/gene_project1</name>
                                    <alias>${docker.container.name}</alias>
                                    <!-- Configure build settings -->
                                    <build>
                                        <dockerFileDir>${project.basedir}\src\docker\vending_machine_emulator</dockerFileDir>
                                        <assembly>
                                            <inline>
                                                <fileSets>
                                                    <fileSet>
                                                        <directory>${project.basedir}\target</directory>
                                                        <outputDirectory>.</outputDirectory>
                                                        <includes>
                                                            <include>*.jar</include>
                                                        </includes>
                                                    </fileSet>
                                                </fileSets>
                                            </inline>
                                        </assembly>
                                    </build>
                                </image>
                            </images>
                        </configuration>
                        <executions>
                            <execution>
                                <id>docker:build</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>build</goal>
                                </goals>
                            </execution>
                            <execution>
                                <id>docker:push</id>
                                <phase>install</phase>
                                <goals>
                                    <goal>push</goal>
                                </goals>
                            </execution>

                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

Vá para o diretório C: \ Users \ Gene.docker \ e adicione-o ao seu arquivo config.json: insira a descrição da imagem aqui

Agora, no seu Docker Quickstart Terminal, digite = mvn clean install -Pbuild-docker

Para aqueles que não estão usando perfis Maven, basta digitar mvn clean install

Aqui está a captura de tela da mensagem de sucesso: insira a descrição da imagem aqui

Aqui está o meu pom.xml completo e uma captura de tela da minha estrutura de diretórios:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.gene.app</groupId>
<artifactId>VendingMachineDockerMavenPlugin</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>Maven Quick Start Archetype</name>
<url>www.gene.com</url>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.gene.sample.Customer_View</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>

                    <source>1.7</source>
                    <target>1.7</target>

                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>


<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.8.2</version>
        <scope>test</scope>
    </dependency>

</dependencies>

<distributionManagement>
    <repository>
        <id>gene</id>
        <name>chuangg</name>
        <uniqueVersion>false</uniqueVersion>
        <layout>legacy</layout>
        <url>https://index.docker.io/v1/</url>
    </repository>
</distributionManagement>


<profiles>
    <profile>
        <id>build-docker</id>
        <properties>
            <java.docker.version>1.8.0</java.docker.version>
        </properties>
        <build>
            <plugins>

                <plugin>
                    <groupId>io.fabric8</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>0.18.1</version>
                    <configuration>
                        <images>
                            <image>
                                <name>chuangg/gene_project1</name>
                                <alias>${docker.container.name}</alias>
                                <!-- Configure build settings -->
                                <build>
                                    <dockerFileDir>${project.basedir}\src\docker\vending_machine_emulator</dockerFileDir>
                                    <assembly>
                                        <inline>
                                            <fileSets>
                                                <fileSet>
                                                    <directory>${project.basedir}\target</directory>
                                                    <outputDirectory>.</outputDirectory>
                                                    <includes>
                                                        <include>*.jar</include>
                                                    </includes>
                                                </fileSet>
                                            </fileSets>
                                        </inline>
                                    </assembly>
                                </build>
                            </image>
                        </images>
                    </configuration>
                    <executions>
                        <execution>
                            <id>docker:build</id>
                            <phase>package</phase>
                            <goals>
                                <goal>build</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>docker:push</id>
                            <phase>install</phase>
                            <goals>
                                <goal>push</goal>
                            </goals>
                        </execution>

                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

Aqui está o meu diretório Eclipse: insira a descrição da imagem aqui

Aqui está o meu Dockerfile:

FROM java:8

MAINTAINER Gene Chuang
RUN echo Running Dockerfile in src/docker/vending_machine_emulator/Dockerfile directory

ADD maven/VendingMachineDockerMavenPlugin-1.0-SNAPSHOT.jar /bullshitDirectory/gene-app-1.0-SNAPSHOT.jar 

CMD ["java", "-classpath", "/bullshitDirectory/gene-app-1.0-SNAPSHOT.jar", "com/gene/sample/Customer_View" ] 

Erro comum nº 1: insira a descrição da imagem aqui

Solução para o erro # 1 = Não sincronize a <execution>fase with maven deploy, pois o maven tenta implantar a imagem 2x e coloca um carimbo de data / hora no jar. Por isso eu usei <phase>install</phase>.

Gene
fonte
46

Se o registro do docker for privado e auto-hospedado , faça o seguinte:

docker login <REGISTRY_HOST>:<REGISTRY_PORT>
docker tag <IMAGE_ID> <REGISTRY_HOST>:<REGISTRY_PORT>/<APPNAME>:<APPVERSION>
docker push <REGISTRY_HOST>:<REGISTRY_PORT>/<APPNAME>:<APPVERSION>

Exemplo:

docker login repo.company.com:3456
docker tag 19fcc4aa71ba repo.company.com:3456/myapp:0.1
docker push repo.company.com:3456/myapp:0.1
Nicolas Delaforge
fonte
15

Existem duas opções:

  1. Entre no hub e crie o repositório primeiro e marque-o como privado. Então, quando você passar para esse repositório, ele será privado. Essa é a abordagem mais comum.

  2. faça login na sua conta do hub docker e acesse as configurações globais . Há uma configuração que permite definir qual é a sua visibilidade padrão para os repositórios que você envia. Por padrão, é definido como público, mas se você o alterar para privado, todos os seus repositórios que você enviar serão marcados como privados por padrão. É importante observar que você precisará ter repositórios particulares suficientes disponíveis em sua conta, caso contrário, o repositório será bloqueado até que você atualize seu plano.

Ken Cochrane
fonte
1
É verdade que a pergunta postada não é tão direta quanto se poderia desejar, mas não tenho dúvida de que o principal problema do questionador é o fato de os repositórios no Docker Hub serem públicos por padrão. No entanto, todos os que estão neste segmento estão principalmente ocupados lançando wikis para registros privados , além de tocar no docker pushcomando. Mas se entendi corretamente a pergunta, nenhuma dessas respostas está correta e a postada acima por Ken Cochrane é a única que deve ser aceita.
Martin Andersson
Exatamente o que estou procurando. Como o @MartinAndersson mencionou, as respostas acima na linha de comando ainda permitirão que sua imagem enviada seja pública, se você estiver pressionando o DockerHub.
Shaung Cheng
9

Crie um repositório no dockerhub:

$docker tag IMAGE_ID UsernameOnDockerhub/repoNameOnDockerhub:latest

$docker push UsernameOnDockerhub/repoNameOnDockerhub:latest

Nota : aqui "repoNameOnDockerhub": o repositório com o nome que você está mencionando deve estar presente no dockerhub

"mais recente": é apenas tag

Anurag Manikkame
fonte
7

Ref: dock.docker.com

Este tópico fornece informações básicas sobre a implantação e configuração de um registro

Execute um registro local

Antes de implantar um registro, você precisa instalar o Docker no host.

Use um comando como o seguinte para iniciar o contêiner do registro:

start_registry.sh

#!/bin/bash

docker run -d \
  -p 5000:5000 \
  --restart=always \
  --name registry \
  -v /data/registry:/var/lib/registry \
  registry:2

Copie uma imagem do Docker Hub para seu registro

  1. Puxe a ubuntu:16.04imagem do Docker Hub.

    $ docker pull ubuntu:16.04
    
  2. Marque a imagem como localhost:5000/my-ubuntu. Isso cria uma marca adicional para a imagem existente. Quando a primeira parte da tag é um nome de host e uma porta, o Docker interpreta isso como o local de um registro, ao pressionar.

    $ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
    
  3. Envie a imagem para o registro local em execução em localhost:5000:

    $ docker push localhost:5000/my-ubuntu
    
  4. Remova as imagens armazenadas em cache localmente. Isso não remove a localhost:5000/my-ubuntuimagem do seu registro.

    $ docker image remove ubuntu:16.04
    $ docker image remove localhost:5000/my-ubuntu
    
  5. Puxe a localhost:5000/my-ubuntuimagem do seu registro local.

    $ docker pull localhost:5000/my-ubuntu
    
Implantar um registro HTTP simples

De acordo com docs.docker.com , isso é muito inseguro e não é recomendado .

  1. Edite o daemon.jsonarquivo, cuja localização padrão é /etc/docker/daemon.jsonno Linux ou C:\ProgramData\docker\config\daemon.jsonno Windows Server. Se você usar Docker for Macou Docker for Windows, clique em Docker icon -> Preferences -> Daemon, adicione o insecure registry.

    Se o daemon.jsonarquivo não existir, crie-o. Supondo que não haja outras configurações no arquivo, ele deve ter o seguinte conteúdo:

    {
      "insecure-registries" : ["myregistrydomain.com:5000"]
    }
    

    Com registros inseguros ativados, o Docker executa as seguintes etapas:

    • Primeiro, tente usar HTTPS.
      • Se HTTPS estiver disponível, mas o certificado for inválido, ignore o erro sobre o certificado.
      • Se HTTPS não estiver disponível, volte ao HTTP.
  2. Reinicie o Docker para que as alterações entrem em vigor.

David Ding
fonte
6

Primeiro, faça login no seu repositório privado.

> docker login [OPTIONS] [SERVER]

[OPTIONS]: 
-u username 
-p password

por exemplo:

> docker login localhost:8080

E depois marque sua imagem para seu repositório privado

> docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

por exemplo:

> docker tag myApp:v1 localhost:8080/myname/myApp:v1

Por fim, envie suas imagens em ordem para o seu repositório privado

>docker push [OPTIONS] NAME[:TAG]

por exemplo:

> docker push localhost:8080/myname/myApp:v1

Referência

guindaste-yuan
fonte
4

Solução de trabalho simples:

Vá aqui https://hub.docker.com/para criar um repositório PRIVADO com nome, por exemplo, johnsmith/private-repositoryeste é o que NAME/REPOSITORYvocê usará para sua imagem ao criar a imagem.

  • Primeiro, docker login

  • Segundo, eu uso " docker build -t johnsmith/private-repository:01 ." (onde 01 é o nome da minha versão) para criar a imagem e " docker images" para confirmar a imagem criada, como nesta caixa amarela abaixo: (desculpe, não posso colar o formato da tabela, mas apenas a string de texto )

johnsmith / private-repository (REPOSITORY) 01 (TAG) c5f4a2861d6e (ID DE IMAGEM) 2 dias atrás (CRIADO) 305MB (SIZE)

Feito!

Estrume
fonte