web-dev-qa-db-fra.com

Comment transférer une image de menu fixe dans un référentiel privé

J'ai une image de docker étiquetée moi/mon-image et j'ai un dépôt privé sur le dockerhub nommé me-private Lorsque je pousse mon image de moi, je finis toujours par toucher le dépôt public.

Quelle est la syntaxe exacte pour envoyer spécifiquement mon image dans mon référentiel privé? 

289
Eugene Goldberg

Vous devez d'abord baliser correctement votre image avec votre registryhost:

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

Puis docker Push en utilisant cette même étiquette.

docker Push NAME[:TAG]

Exemple:

docker tag 518a41981a6a myRegistry.com/myImage
docker Push myRegistry.com/myImage
439
Abdullah Jibaly

Juste trois étapes simples:

  1. docker login --username username --password password

  2. docker tag my-image username/my-repo

  3. docker Push username/my-repo

162

Tout d'abord, allez sur votre compte Docker Hub et faites le repo. Voici une capture d'écran de mon compte Docker Hub:  enter image description here

De la photo, vous pouvez voir que mon repo est "chuangg"

Allez maintenant dans le dépôt et rendez-le privé en cliquant sur le nom de votre image. Donc pour moi, j'ai cliqué sur “chuangg/gene_commited_image”, puis je suis allé dans Paramètres -> Rendre privé. Ensuite, j'ai suivi les instructions à l'écran  enter image description here

COMMENT TÉLÉCHARGER VOTRE IMAGE DOCKER SUR LE CENTRE DOCKER

Méthode n ° 1 = Pousser votre image par la ligne de commande (cli)

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

Oui, je pense que cela doit être l'ID du conteneur. Ce ne peut probablement pas être l'ID de l'image.

Par exemple = docker commit 99e078826312 chuangg/gene_commited_image

2) docker run -it chaung/gene_commited_image

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

Par exemple = docker login --username=chuangg [email protected]

Oui, vous devez d'abord vous connecter. Déconnexion à l'aide de «Déconnexion du docker»

4) docker Push chuangg/gene_commited_image

Method # 2 = Pousser votre image en utilisant pom.xml et la ligne de commande. 

Notez que j'ai utilisé un profil Maven appelé «build-docker». Si vous ne souhaitez pas utiliser de profil, supprimez simplement les éléments <profiles>, <profile>, and <id>build-docker</id>

Dans le parent 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>

Docker Terminal Commande permettant de déployer l'image Docker (à partir du répertoire où se trouve votre pom.xml) = mvn clean deploy -Pbuild-docker docker:Push

Notez que la différence entre les méthodes n ° 2 et n ° 3 réside dans le fait que la méthode n ° 3 comporte un <execution> supplémentaire pour le déploiement.

Méthode n ° 3 = Utilisation de Maven pour un déploiement automatique sur Docker Hub

Ajoutez ce truc à votre parent pom.xml:

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

Accédez au répertoire C:\Users\Gene.docker\et ajoutez-le à votre fichier config.json:  enter image description here

Maintenant, dans votre terminal Docker Quickstart type = mvn clean install -Pbuild-docker 

Pour ceux qui n'utilisent pas les profils Maven, il suffit de taper mvn clean install

Voici la capture d'écran du message de réussite:  enter image description here

Voici mon pom.xml complet et une capture d'écran de ma structure de répertoires:

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

Voici mon répertoire Eclipse:  enter image description here

Voici mon 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" ] 

Erreur commune n ° 1:  enter image description here

Solution for Error # 1 = Ne synchronisez pas la phase <execution> avec maven deploy car maven tente alors de déployer l'image 2x et place un horodatage sur le fichier jar. C’est pourquoi j’ai utilisé <phase>install</phase>

41
Gene

Si votre registre docker est privé et auto-hébergé , procédez comme suit:

docker login <REGISTRY_Host>:<REGISTRY_PORT>
docker tag <IMAGE_ID> <REGISTRY_Host>:<REGISTRY_PORT>/<APPNAME>:<APPVERSION>
docker Push <REGISTRY_Host>:<REGISTRY_PORT>/<APPNAME>:<APPVERSION>

Exemple :

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
27
Nicolas Delaforge

Il y a deux options:

  1. Accédez au hub, créez d'abord le référentiel et marquez-le comme privé. Ensuite, lorsque vous appuyez sur ce dépôt, il sera privé. C'est l'approche la plus courante.

  2. connectez-vous à votre compte hub docker et accédez à votre paramètres généraux . Un paramètre vous permet de définir votre visibilité par défaut pour les référentiels que vous poussez. Par défaut, il est défini sur public, mais si vous le changez en mode privé, tous vos référentiels que vous Push seront marqués comme privés par défaut. Il est important de noter que vous devez disposer d'un nombre suffisant de mises en pension privées sur votre compte, sinon la mise en pension sera verrouillée jusqu'à la mise à niveau de votre plan.

13
Ken Cochrane

Commencez par vous connecter à votre référentiel privé.

> docker login [OPTIONS] [SERVER]

[OPTIONS]: 
-u username 
-p password

par exemple:

> docker login localhost:8080

Et puis marquez votre image pour votre référentiel privé

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

par exemple:

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

Enfin, placez vos images synchronisées dans votre référentiel privé.

>docker Push [OPTIONS] NAME[:TAG]

par exemple:

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

Référence

3
crane-yuan

Réf: dock.docker.com

Cette rubrique fournit des informations de base sur le déploiement et la configuration d'un registre.

Exécuter un registre local

Avant de pouvoir déployer un registre, vous devez installer Docker sur l'hôte.

Utilisez une commande comme celle-ci pour démarrer le conteneur de registre:

start_registry.sh

#!/bin/bash

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

Copier une image de Docker Hub dans votre registre

  1. Tirez l'image ubuntu:16.04 à partir de Docker Hub.

    $ docker pull ubuntu:16.04
    
  2. Marquez l'image en tant que localhost:5000/my-ubuntu. Cela crée une balise supplémentaire pour l'image existante. Lorsque la première partie de la balise est un nom d’hôte et un port, Docker l’interprète comme l’emplacement d’un registre lors du transfert.

    $ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
    
  3. Transférez l'image dans le registre local sous localhost:5000:

    $ docker Push localhost:5000/my-ubuntu
    
  4. Supprimez les images mises en cache localement. Cela ne supprime pas l'image localhost:5000/my-ubuntu de votre registre.

    $ docker image remove ubuntu:16.04
    $ docker image remove localhost:5000/my-ubuntu
    
  5. Extrayez l'image localhost:5000/my-ubuntu de votre registre local.

    $ docker pull localhost:5000/my-ubuntu
    

Selon docs.docker.com , ceci est très non sécurisé et n'est pas recommandé.

  1. Editez le fichier daemon.json, dont l'emplacement par défaut est /etc/docker/daemon.json sous Linux ou C:\ProgramData\docker\config\daemon.json sous Windows Server. Si vous utilisez Docker for Mac ou Docker for Windows, cliquez sur Docker icon -> Preferences -> Daemon, ajoutez le insecure registry.

    Si le fichier daemon.json n'existe pas, créez-le. En supposant qu'il n'y ait pas d'autres paramètres dans le fichier, il devrait avoir le contenu suivant:

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

    Lorsque les registres non sécurisés sont activés, Docker franchit les étapes suivantes:

    • Commencez par utiliser HTTPS .
      • Si HTTPS est disponible mais que le certificat n'est pas valide, ignorez l'erreur concernant le certificat.
      • Si HTTPS n'est pas disponible, utilisez HTTP.
  2. Redémarrez Docker pour que les modifications prennent effet.

3
David Ding

Solution de travail simple:

Allez ici https://hub.docker.com/ pour créer un référentiel PRIVÉ avec le nom par exemple johnsmith/private-repository c'est le NAME/REPOSITORY que vous utiliserez pour votre image lors de la construction de l'image.

  • D'abord, docker login

  • Deuxièmement, j'utilise "docker build -t johnsmith/private-repository:01 ." (où 01 est le nom de ma version) pour créer l'image, et j'utilise "docker images" pour confirmer l'image créée, comme dans le cadre jaune ci-dessous: (désolé, je ne peux pas coller le format de tableau, mais le texte chaîne seulement)

johnsmith/private-repository (REPOSITORY) 01 (TAG) c5f4a2861d6e (IMAGE ID) il y a un jour (CREATED) 305MB (SIZE)

Terminé!

3
Dung

Créer un référentiel sur dockerhub:

$docker tag IMAGE_ID UsernameOnDockerhub/repoNameOnDockerhub:latest

$docker Push UsernameOnDockerhub/repoNameOnDockerhub:latest

Note : ici "repoNameOnDockerhub": le référentiel portant le nom que vous mentionnez a être présent sur dockerhub 

"dernière": est juste tag 

0
Anurag Manikkame