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é?
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
Juste trois étapes simples:
docker login --username username --password password
docker tag my-image username/my-repo
docker Push username/my-repo
Tout d'abord, allez sur votre compte Docker Hub et faites le repo. Voici une capture d'écran de mon compte Docker Hub:
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
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:
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:
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 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" ]
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>
.
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
Il y a deux options:
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.
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.
> docker login [OPTIONS] [SERVER]
[OPTIONS]:
-u username
-p password
par exemple:
> docker login localhost:8080
> docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
par exemple:
> docker tag myApp:v1 localhost:8080/myname/myApp:v1
>docker Push [OPTIONS] NAME[:TAG]
par exemple:
> docker Push localhost:8080/myname/myApp:v1
Réf: dock.docker.com
Cette rubrique fournit des informations de base sur le déploiement et la configuration d'un registre.
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
Tirez l'image ubuntu:16.04
à partir de Docker Hub.
$ docker pull ubuntu:16.04
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
Transférez l'image dans le registre local sous localhost:5000
:
$ docker Push localhost:5000/my-ubuntu
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
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é.
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:
Redémarrez Docker pour que les modifications prennent effet.
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)
docker Push johnsmith/private-repository:01
(votre dépôt privé sera ici, par exemple https://hub.docker.com/r/johnsmith/private-repository/ )Terminé!
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