Como enviar uma imagem do docker para um repositório privado
Qual é a sintaxe exacta para empurrar especificamente a minha imagem para o meu repo privado?
8 answers
Primeiro tem de marcar correctamente a sua imagem com a sua registryhost
:
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
Depois acoplar com a mesma etiqueta.
docker push NAME[:TAG]
Exemplo:
docker tag 518a41981a6a myRegistry.com/myImage
docker push myRegistry.com/myImage
docker login --username username --password password
docker tag my-image username/my-repo
docker push username/my-repo
Método #1 = empurrar a sua imagem através da linha de comandos (cli)
1) docker commit <container ID> <repo name>/<Name you want to give the image>
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]
4) docker push chuangg/gene_commited_image
Método #2 = empurrar a sua imagem usando pom.xml e linha de comandos.
Nota, usei um perfil Maven chamado "build-docker". Se não quiser usar um perfil, basta remover os elementos<profiles>, <profile>, and <id>build-docker</id>
.
Dentro do pom pai.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 terminal do acoplador para implantar a imagem do acoplador (a partir da pasta onde o seu pom.o xml está localizado)= mvn clean deploy -Pbuild-docker docker:push
Nota, a diferença entre o Método #2 e #3 é que o Método #3 tem um <execution>
extra para a implantação.
Método #3 = Usando o Maven para implantar automaticamente no acoplador Hub
Adiciona isto ao teu pai.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>
Vá para C:\Users\Gene.Docker\ directory e adicione isto à sua configuração.ficheiro json:
Agora no seu tipo de Terminal de arranque rápido do acoplador=mvn clean install -Pbuild-docker
Para aqueles que não usam perfis Maven, basta digitar mvn clean install
<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 directório do Eclipse.:
Aqui está o meu ficheiro de 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" ]
Solução para erro #1= não sincronize o <execution>
com a fase de implantação do maven porque então o maven tenta implantar a imagem 2x e coloca uma data no frasco. Foi por isso que usei.
Se o seu registo de acoplagem for privado e se estiver hospedado {[5] } , deve fazer 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
Existem duas opções:
Vá para o hub, e crie o repositório primeiro, e marque-o como privado. Depois, quando chegar ao repo, será privado. Esta é a abordagem mais comum.
Entre na sua conta do Hub do docker e vá para a sua configuração global . Existe uma configuração que lhe permite definir qual é a sua visibilidade padrão para os repositórios que você carrega. Por padrão é definido para público, mas se você alterá - lo para privado, tudo os seus repositórios que você carrega serão marcados como privados por padrão. É importante notar que você terá que ter repos privados suficientes disponíveis em sua conta, ou então o repo será bloqueado até que você atualize seu plano.
Primeiro autentique-se no seu repositório privado.
> docker login [OPTIONS] [SERVER]
[OPTIONS]:
-u username
-p password
Eg:
> docker login localhost:8080
E depois marca a tua imagem para o teu repositório privado
> docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Eg:
> docker tag myApp:v1 localhost:8080/myname/myApp:v1
Finalmente empurre as suas imagens enjauladas para o seu repositório privado
>docker push [OPTIONS] NAME[:TAG]
Eg:
> docker push localhost:8080/myname/myApp:v1
Referência
Solução de trabalho simples:
Vá aqui https://hub.docker.com/
para criar um repositório privado com nome, por exemplo johnsmith/private-repository
este é o NAME/REPOSITORY
que irá usar para a sua imagem ao construir a imagem.
Primeiro,
docker login
Em segundo lugar, eu uso "
docker build -t johnsmith/private-repository:01 .
"(onde o 01 é o meu nome de versão) para criar imagem, e eu uso "docker images
" para confirmar a imagem criada, como neste campo amarelo abaixo: (desculpe, não posso colar o formato da tabela, mas apenas o texto de texto)
Johnsmith/private-repository (REPOSITORY) 01 (TAG) c5f4a2861d6e(ID da imagem) 2 days ago (CREATED) 305MB (SIZE)
- Em Terceiro Lugar, eu uso
docker push johnsmith/private-repository:01
(O teu acordo privado estará aqui, exemplo https://hub.docker.com/r/johnsmith/private-repository/)
Ref: dock.docker.com
Este tópico fornece informações básicas sobre a implantação e configuração de um registo
Gerir um registo local
Antes de poder instalar um registo, tem de instalar o Docker no servidor.Use um comando como o seguinte para iniciar o contentor do registo:
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 o seu registo.
-
Puxe a imagem
ubuntu:16.04
do Docker Hub.$ docker pull ubuntu:16.04
-
Marca a imagem como
localhost:5000/my-ubuntu
. Isto cria uma marca adicional para a imagem existente. Quando a primeira parte da tag é um nome de máquina e porta, o Docker interpreta isso como a localização de um registro, ao empurrar.$ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
-
Empurre a imagem para o registo local em
localhost:5000
:$ docker push localhost:5000/my-ubuntu
-
Remova as imagens em 'cache' local. Isto não remove a imagem
localhost:5000/my-ubuntu
do seu registro.$ docker image remove ubuntu:16.04 $ docker image remove localhost:5000/my-ubuntu
-
Retire a imagem
localhost:5000/my-ubuntu
do seu registo local.$ docker pull localhost:5000/my-ubuntu
De Acordo com docs.docker.com, esse é muito inseguro e é não recomendado.
-
Edite o ficheiro
daemon.json
, cuja localização por omissão é/etc/docker/daemon.json
no Linux ouC:\ProgramData\docker\config\daemon.json
no servidor do Windows. Se utilizarDocker for Mac
ouDocker for Windows
, carregue emDocker icon -> Preferences -> Daemon
, adicione oinsecure registry
.Se o ficheiro
daemon.json
não existir, cria-o. Assumindo que não existem outras configurações no arquivo, ele deve ter o seguinte conteúdo:{ "insecure-registries" : ["myregistrydomain.com:5000"] }
Com registos inseguros activados, o acoplador passa pelos seguintes passos:
- Primeiro, tente usar HTTPS.
- Se o HTTPS estiver disponível mas o certificado for inválido, ignore o erro acerca do certificado.
- Se o HTTPS não estiver disponível, volte para HTTP.
Reiniciar o acoplador para as alterações a tomar efeito.