it-roy-ru.com

Как перенести образ докера в частный репозиторий

У меня есть образы докеров, помеченные как me/my-image, и у меня есть личный репозиторий в dockerhub с именем me-private. Когда я толкаю свое «я»/«мой образ», я всегда оказываюсь в публичном репо.

Каков точный синтаксис для передачи моего изображения в частное хранилище? 

289
Eugene Goldberg

Сначала вам нужно правильно пометить свое изображение с помощью registryhost:

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

Затем нажмите Docker, используя тот же тег.

docker Push NAME[:TAG]

Пример:

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

Всего три простых шага:

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

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

  3. docker Push username/my-repo

162
Abhishek Dasgupta

Сначала зайдите в свою учетную запись Docker Hub и сделайте репо. Вот скриншот моей учетной записи Docker Hub: enter image description here

На картинке видно, что мой репо - «чуанг»

Теперь зайдите в репозиторий и сделайте его приватным, нажав на название вашего изображения. Поэтому я нажал «chuangg/gene_commited_image», а затем перешел в «Настройки» -> «Сделать личным». Затем я следовал инструкциям на экране enter image description here

КАК ЗАГРУЗИТЬ ИЗОБРАЖЕНИЕ DOCKER НА DOCKER HUB

Method # 1 = Проталкивание вашего изображения через командную строку (cli)

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

Да, я думаю, что это должен быть идентификатор контейнера. Вероятно, это не может быть идентификатор изображения.

Например = docker commit 99e078826312 chuangg/gene_commited_image

2) docker run -it chaung/gene_commited_image

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

Например = docker login --username=chuangg [email protected]

Да, вы должны войти в систему в первую очередь. Выйти из системы с помощью «Docker Logout»

4) docker Push chuangg/gene_commited_image

Method # 2 = Нажать на ваше изображение, используя pom.xml и командную строку. 

Обратите внимание, я использовал профиль Maven под названием «build-docker». Если вы не хотите использовать профиль, просто удалите элементы <profiles>, <profile>, and <id>build-docker</id>

Внутри родительского 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 Команда для развертывания образа Docker (из каталога, где расположен ваш pom.xml) = mvn clean deploy -Pbuild-docker docker:Push

Обратите внимание, что разница между методом № 2 и № 3 заключается в том, что метод № 3 имеет дополнительный <execution> для развертывания.

Method # 3 = Использование Maven для автоматического развертывания в Docker Hub

Добавьте этот материал в ваш родительский 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>

Перейдите в каталог C:\Users\Gene.docker\и добавьте его в файл config.json: enter image description here

Теперь в вашем терминале быстрого запуска Docker введите = mvn clean install -Pbuild-docker 

Для тех из вас, кто не использует Maven Profiles, просто наберите mvn clean install

Вот скриншот сообщения об успехе: enter image description here

Вот мой полный pom.xml и скриншот моей структуры каталогов:

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

Вот мой каталог Eclipse: enter image description here

Вот мой 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" ] 

Распространенная ошибка № 1: enter image description here

Решение для ошибки № 1 = не синхронизировать <execution> с фазой развертывания maven, потому что тогда maven пытается развернуть образ 2x и помещает метку времени в банку. Вот почему я использовал <phase>install</phase>

41
Gene

Если ваш реестр Docker является частным и самостоятельно размещенным вы должны сделать следующее:

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

Пример :

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

Есть два варианта:

  1. Зайдите в хаб, сначала создайте репозиторий и отметьте его как приватный. Затем, когда вы нажмете на этот репо, он будет закрытым. Это самый распространенный подход.

  2. войдите в свою учетную запись docker hub и перейдите в глобальные настройки . Существует настройка, которая позволяет вам настроить видимость по умолчанию для репозиториев, которые вы отправляете. По умолчанию он установлен как публичный, но если вы измените его на приватный, все ваши репозитории, которые вы нажимаете, будут помечены как приватные по умолчанию. Важно отметить, что у вас должно быть достаточно личных репо, доступных на вашей учетной записи, иначе репо будет заблокировано до тех пор, пока вы не обновите свой план.

13
Ken Cochrane

Сначала войдите в свой личный репозиторий.

> docker login [OPTIONS] [SERVER]

[OPTIONS]: 
-u username 
-p password

например:

> docker login localhost:8080

А затем пометьте свое изображение для вашего личного хранилища

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

например:

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

Наконец-то отправьте ваши изображения в ваш личный репозиторий

>docker Push [OPTIONS] NAME[:TAG]

например:

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

Ссылка

3
crane-yuan

Ссылка: dock.docker.com

В этом разделе приведены основные сведения о развертывании и настройке реестра.

Запустите локальный реестр

Прежде чем вы сможете развернуть реестр, вам нужно установить Docker на хосте.

Используйте команду, подобную следующей, чтобы запустить контейнер реестра:

start_registry.sh

#!/bin/bash

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

Скопируйте изображение из Docker Hub в свой реестр

  1. Извлеките изображение ubuntu:16.04 из Docker Hub.

    $ docker pull ubuntu:16.04
    
  2. Отметьте изображение как localhost:5000/my-ubuntu. Это создает дополнительный тег для существующего изображения. Когда первая часть тега является именем хоста и портом, Docker интерпретирует это как местоположение реестра при нажатии.

    $ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
    
  3. Нажмите на изображение в локальном реестре, работающем с localhost:5000:

    $ docker Push localhost:5000/my-ubuntu
    
  4. Удалите локально кэшированные изображения. Это не удаляет изображение localhost:5000/my-ubuntu из вашего реестра.

    $ docker image remove ubuntu:16.04
    $ docker image remove localhost:5000/my-ubuntu
    
  5. Вытащите образ localhost:5000/my-ubuntu из вашего локального реестра.

    $ docker pull localhost:5000/my-ubuntu
    

Согласно docs.docker.com , это очень небезопасно и не рекомендуется.

  1. Отредактируйте файл daemon.json, расположение которого по умолчанию: /etc/docker/daemon.json в Linux или C:\ProgramData\docker\config\daemon.json на Windows Server. Если вы используете Docker for Mac или Docker for Windows, нажмите Docker icon -> Preferences -> Daemon, добавьте insecure registry.

    Если файл daemon.json не существует, создайте его. Предполагая, что в файле нет других настроек, он должен иметь следующее содержимое:

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

    При включенной незащищенной регистрации Docker выполняет следующие шаги:

    • Сначала попробуйте использовать HTTPS .
      • Если HTTPS доступен, но сертификат недействителен, игнорируйте ошибку о сертификате.
      • Если HTTPS недоступен, вернитесь к HTTP.
  2. Перезапустите Docker, чтобы изменения вступили в силу.

3
David Ding

Простое рабочее решение:

Перейдите сюда https://hub.docker.com/, чтобы создать PRIVATE-репозиторий с именем, например johnsmith/private-repository, это NAME/REPOSITORY, который вы будете использовать для своего изображения при создании изображения.

  • Во-первых, docker login

  • Во-вторых, я использую «docker build -t johnsmith/private-repository:01 .» (где 01 - это название моей версии) для создания изображения, и я использую «docker images» для подтверждения созданного изображения, например, в этом желтом поле ниже: (извините, я не могу вставить формат таблицы, кроме текста только строка)

johnsmith/private-repository (REPOSITORY) 01 (TAG) c5f4a2861d6e (ID ИЗОБРАЖЕНИЯ) 2 дня назад (СОЗДАНО) 305MB (РАЗМЕР)

Готово!

3
Dung

Создайте репозиторий на Dockerhub:

$docker tag IMAGE_ID UsernameOnDockerhub/repoNameOnDockerhub:latest

$docker Push UsernameOnDockerhub/repoNameOnDockerhub:latest

Примечание : здесь "repoNameOnDockerhub": репозиторий с именем, которое вы упоминаете, имеет присутствовать на dockerhub 

"последний": это просто тег 

0
Anurag Manikkame