library - docker-compose
Cómo empujar una imagen acoplable a un repositorio privado (8)
Primero inicie sesión en su repositorio privado.
> docker login [OPTIONS] [SERVER]
[OPTIONS]:
-u username
-p password
p.ej:
> docker login localhost:8080
Y luego etiqueta tu imagen para tu repositorio privado
> docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
p.ej:
> docker tag myApp:v1 localhost:8080/myname/myApp:v1
Finalmente empuja tus imágenes taged a tu repositorio privado
>docker push [OPTIONS] NAME[:TAG]
p.ej:
> docker push localhost:8080/myname/myApp:v1
Referencia
Tengo las imágenes de una ventana acoplable etiquetadas como me / my-image, y tengo un repositorio privado en el dockerhub que se llama me-private. Cuando presiono mi yo / mi imagen, termino siempre golpeando el repositorio público.
¿Cuál es la sintaxis exacta para empujar específicamente mi imagen a mi repositorio privado?
Hay dos opciones:
Vaya al concentrador, primero cree el repositorio y márquelo como privado. Entonces cuando empujes a ese repo, será privado. Este es el enfoque más común.
inicie sesión en su cuenta de docker hub y vaya a su configuración global . Hay una configuración que le permite establecer cuál es su visibilidad predeterminada para los repositorios que empuja. De forma predeterminada, se establece en público, pero si lo cambia a privado, todos los repositorios que presione se marcarán como privados de forma predeterminada. Es importante tener en cuenta que deberá tener suficientes repositorios privados disponibles en su cuenta o, de lo contrario, el repositorio se bloqueará hasta que actualice su plan.
Primero ve a tu cuenta de Docker Hub y haz el repositorio. Aquí hay una captura de pantalla de mi cuenta de Docker Hub:
De la foto, puedes ver que mi repo es "chuangg"
Ahora entra en el repositorio y hazlo privado haciendo clic en el nombre de tu imagen. Así que para mí, hice clic en "chuangg / gene_commited_image", luego fui a Configuración -> Hacer privado. Luego seguí las instrucciones en pantalla.
CÓMO CARGAR SU IMAGEN DE DOCKER EN EL CENTRO DE DOCKER
Método # 1 = Empujando su imagen a través de la línea de comando (cli)
1) docker commit <container ID> <repo name>/<Name you want to give the image>
Sí, creo que tiene que ser la identificación del contenedor. Probablemente no puede ser la identificación de la imagen.
Por ejemplo = 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 ejemplo = docker login --username=chuangg [email protected]
Sí, tienes que iniciar sesión primero. Cierre de sesión usando "cierre de sesión"
4) docker push chuangg/gene_commited_image
Método # 2 = Empujando su imagen usando pom.xml y línea de comando.
Nota, usé un perfil de Maven llamado "build-docker". Si no desea utilizar un perfil, simplemente elimine los elementos <profiles>, <profile>, and <id>build-docker</id>
.
Dentro del pom.xml padre:
<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 Command para implementar la imagen de Docker (desde el directorio donde se encuentra su pom.xml) = mvn clean deploy -Pbuild-docker docker:push
Tenga en cuenta que la diferencia entre el Método # 2 y # 3 es que el Método # 3 tiene una <execution>
adicional para la implementación.
Método # 3 = Uso de Maven para implementar automáticamente en Docker Hub
Agrega esto a tu padre 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>
Vaya al directorio C: / Users / Gene.docker / y agregue esto a su archivo config.json:
Ahora en tu Docker Quickstart Terminal type = mvn clean install -Pbuild-docker
Para aquellos de ustedes que no utilizan los perfiles de Maven, simplemente teclee mvn clean install
Aquí está la captura de pantalla del mensaje de éxito:
Aquí está mi pom.xml completo y una captura de pantalla de mi estructura de directorios:
<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>
Aquí está mi directorio de Eclipse:
Aquí está mi 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" ]
Solución para el error n. ° 1 = No sincronizar la <execution>
con la fase de implementación de maven porque maven intenta desplegar la imagen 2x y coloca una marca de tiempo en el contenedor. Es por eso que usé <phase>install</phase>
.
Ref: dock.docker.com
Este tema proporciona información básica sobre la implementación y configuración de un registro.
Ejecutar un registro local
Antes de poder implementar un registro, debe instalar Docker en el host.
Use un comando como el siguiente para iniciar el contenedor de registro:
start_registry.sh
#!/bin/bash
docker run -d /
-p 5000:5000 /
--restart=always /
--name registry /
-v /data/registry:/var/lib/registry /
registry:2
Copia una imagen de Docker Hub a tu registro
Tire de la imagen de
ubuntu:16.04
desde Docker Hub.$ docker pull ubuntu:16.04
Etiqueta la imagen como
localhost:5000/my-ubuntu
. Esto crea una etiqueta adicional para la imagen existente. Cuando la primera parte de la etiqueta es un nombre de host y un puerto, Docker interpreta esto como la ubicación de un registro cuando presiona.$ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
Empuje la imagen al registro local que se ejecuta en
localhost:5000
:$ docker push localhost:5000/my-ubuntu
Eliminar las imágenes almacenadas en caché local. Esto no elimina la imagen
localhost:5000/my-ubuntu
de su registro.$ docker image remove ubuntu:16.04 $ docker image remove localhost:5000/my-ubuntu
Extraiga la imagen
localhost:5000/my-ubuntu
de su registro local.$ docker pull localhost:5000/my-ubuntu
Según docs.docker.com , esto es muy inseguro y no se recomienda .
Edite el archivo
daemon.json
, cuya ubicación predeterminada es/etc/docker/daemon.json
en Linux oC:/ProgramData/docker/config/daemon.json
en Windows Server. Si usaDocker for Mac
oDocker for Windows
, haga clic en elDocker icon -> Preferences -> Daemon
, agregue en elinsecure registry
.Si el archivo
daemon.json
no existe,daemon.json
. Suponiendo que no haya otras configuraciones en el archivo, debería tener los siguientes contenidos:{ "insecure-registries" : ["myregistrydomain.com:5000"] }
Con los registros inseguros habilitados, Docker realiza los siguientes pasos:
- En primer lugar, intente utilizar HTTPS.
- Si HTTPS está disponible pero el certificado no es válido, ignore el error sobre el certificado.
- Si HTTPS no está disponible, vuelva a HTTP.
- En primer lugar, intente utilizar HTTPS.
Reinicie Docker para que los cambios surtan efecto.
Si el registro de la ventana acoplable es privado y está alojado automáticamente , debe hacer lo siguiente:
docker login <REGISTRY_HOST>:<REGISTRY_PORT>
docker tag <IMAGE_ID> <REGISTRY_HOST>:<REGISTRY_PORT>/<APPNAME>:<APPVERSION>
docker push <REGISTRY_HOST>:<REGISTRY_PORT>/<APPNAME>:<APPVERSION>
Ejemplo:
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
Solo tres simples pasos:
docker login --username username --password password
docker tag my-image username/my-repo
docker push username/my-repo
Solución de trabajo simple:
Vaya a https://hub.docker.com/
para crear un repositorio PRIVADO con nombre, por ejemplo, johnsmith/private-repository
Este es el NAME/REPOSITORY
que usará para su imagen al crear la imagen.
Primero,
docker login
En segundo lugar, uso "
docker build -t johnsmith/private-repository:01 .
" (Donde 01 es el nombre de mi versión) para crear la imagen, y uso "docker images
" para confirmar la imagen creada, como en este cuadro amarillo a continuación: (lo siento, no puedo pegar el formato de la tabla sino solo la cadena de texto)
johnsmith / private-repository (REPOSITORY) 01 (TAG) c5f4a2861d6e (ID DE IMAGEN) hace 2 días (CREADO) 305MB (TAMAÑO)
- En tercer lugar, utilizo
docker push johnsmith/private-repository:01
(Su repositorio privado será el ejemplo https://hub.docker.com/r/johnsmith/private-repository/ )
¡Hecho!
Primero debes etiquetar tu imagen correctamente con tu registryhost
:
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
A continuación, empujar docker utilizando esa misma etiqueta.
docker push NAME[:TAG]
Ejemplo:
docker tag 518a41981a6a myRegistry.com/myImage
docker push myRegistry.com/myImage