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

419

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

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

Евгений Гольдберг
источник
docs.docker.com/engine/getstarted/step_six
Судип Бхандари
1
Слово "личное" даже не встречается на веб-странице, на которую вы ссылаетесь.
Мартин Андерссон

Ответы:

619

Сначала вам нужно правильно пометить изображение с помощью 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
Абдулла Джибали
источник
1
Итак, с этим изображением: 518a41981a6a, каков на самом деле синтаксис тега, чтобы заставить его перейти в репозиторий me-private, пожалуйста?
Юджин Голдберг
10
docker tag 518a41981a6a me-private.com/myPrivateImage && docker push me-private.com/myPrivateImage
Абдулла Джибали
2
Я также исправил некоторые синтаксические проблемы в своем ответе выше. Кроме того, к сведению, когда вы нажимаете на реестр, вы должны использовать фактическое имя изображения, а не идентификатор изображения.
Абдулла Джибали
по какой-то причине образ все еще идет в публичный реестр dockerhub вместо частного. Просто для пояснения - мой личный реестр также находится на Dockerhub. Я пометил изображение и выполнил толчок, но в обратной связи указывалось, что все слои уже были сдвинуты, что не было бы так, если изображение впервые попадало в личный реестр
Юджин Голдберг,
11
О, если вы используете частный реестр dockerhub, это должно быть довольно просто. Убедитесь, что вы делаете docker loginсначала, а затем docker tag 518a41981a6a me-private/myPrivateImagedocker push me-private/myPrivateImage
отметьте
214

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

  1. docker login --username username

    • запрашивает пароль, если вы пропустите, --passwordчто рекомендуется, поскольку он не сохраняет его в истории команд
  2. docker tag my-image username/my-repo

  3. docker push username/my-repo

Абхишек Дасгупта
источник
42
снимите --passwordфлажок, если вы не хотите, чтобы ваш пароль отображался в истории. это подскажет вам.
AndrewD
5
не работает, так как имя хоста не зарегистрировано.
Борис Иванов
@BorisIvanov, что ты имеешь в виду?
Cowlinator
4
@cowlinator, этот ответ, кажется, использует Docker Hub, а не частное репо, как вопрос.
duct_tape_coder
6
Это не отвечает на вопрос о том, как отправить в частный репозиторий.
Марк К Коуэн
48

Сначала зайдите в свою учетную запись Docker Hub и сделайте репо. Вот скриншот моей учетной записи Docker Hub: введите описание изображения здесь

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

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

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

Метод № 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=gc.genechaung@gmail.com

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

4) docker push chuangg/gene_commited_image

Метод № 2 = Push-ваше изображение с помощью 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>для развертывания.

Метод № 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: введите описание изображения здесь

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

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

Вот скриншот сообщения об успехе: введите описание изображения здесь

Вот мой полный 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: введите описание изображения здесь

Вот мой 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: введите описание изображения здесь

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

Ген
источник
46

Если ваш реестр 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
Николас Делафордж
источник
15

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

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

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

Кен Кокрейн
источник
1
Конечно, опубликованный вопрос не так прост, как хотелось бы, но я не сомневаюсь, что ключевой вопрос для задающего вопрос - тот факт, что репозитории в Docker Hub являются общедоступными по умолчанию. Тем не менее, все в этой теме в основном заняты закачкой вики для частных реестров, а также касанием docker pushкоманды. Но если я правильно понял вопрос, ни один из этих ответов не является правильным, и ответ Кена Кокрейна, приведенный выше, является единственным, который следует принять.
Мартин Андерссон
Именно то, что я ищу. Как упомянул @MartinAndersson, приведенные выше ответы в командной строке по-прежнему позволят опубликовать изображение, если вы нажимаете на DockerHub.
Шаунг Ченг
9

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

$docker tag IMAGE_ID UsernameOnDockerhub/repoNameOnDockerhub:latest

$docker push UsernameOnDockerhub/repoNameOnDockerhub:latest

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

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

Анураг Маниккаме
источник
7

Ссылка: 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
    
Развертывание простого реестра HTTP

Согласно 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, чтобы изменения вступили в силу.

Дэвид Дин
источник
6

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

> 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

Ссылка

Кран-юань
источник
4

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

Перейдите сюда, https://hub.docker.com/чтобы создать ЧАСТНОЕ хранилище с именем, например, 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 (РАЗМЕР)

Выполнено!

помет
источник