Як натиснути зображення докера до приватного сховища


418

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

Який саме синтаксис конкретно підштовхує моє зображення до мого приватного репо?



1
Слово "приватне" навіть не зустрічається на веб-сторінці, яку ви пов’язали.
Мартін Андерссон

Відповіді:


617

Потрібно спочатку правильно позначити зображення registryhost:

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

Потім натисніть на докер, використовуючи той самий тег.

docker push NAME[:TAG]

Приклад:

docker tag 518a41981a6a myRegistry.com/myImage
docker push myRegistry.com/myImage

1
тож із цим зображенням: 518a41981a6a, який власне синтаксис тегів, щоб він перейшов до приватного репо, будь ласка?
Євген Голдберг

10
docker tag 518a41981a6a me-private.com/myPrivateImage && docker push me-private.com/myPrivateImage
Абдулла Джибалі

2
Я вирішив деякі проблеми із синтаксисом у своїй відповіді вище. Крім того, при натисканні на реєстр ви повинні використовувати власне ім'я зображення, а не ідентифікатор зображення.
Абдулла Джибалі

чомусь зображення все одно переходить до публічного реєстру dockerhub замість приватного. Тільки для уточнення - мій приватний реєстр також на докерхубі. Я помітив зображення і зробив натиск, але відгуки вказували на те, що всі шари вже були висунуті, що було б не в тому випадку, якби зображення вперше надходило до приватного реєстру
Євген Голдберг,

11
О, якщо ви використовуєте приватний реєстр dockerhub, це має бути досить просто. Переконайтеся, що ви робите docker loginспочатку, а потім позначте своє зображення: docker tag 518a41981a6a me-private/myPrivateImageта push:docker push me-private/myPrivateImage
Абдулла Джибалі

213

Всього три простих кроки:

  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, що ти маєш на увазі?
ковбасник

4
@cowlinator, ця відповідь, мабуть, використовує Docker Hub, а не приватне репо, як задає питання.
duct_tape_coder

6
Це не відповідає на питання про те, як перейти до приватного сховища.
Марк К

48

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

З картинки ви бачите, що моє репо - "чуанг"

Тепер перейдіть до репо і зробіть його приватним, натиснувши ім'я вашого зображення. Тож для мене я натиснув "chuangg / gene_commited_image", потім перейшов до "Налаштування" - "Зробити приватне". Потім я дотримувався інструкцій на екрані введіть тут опис зображення

ЯК ЗАСТОСУВАТИ ВІДКЛЮЧЕННЯ ВІДКЛЮЧЕННЯ НА ВИДАЛЬНИКУ

Спосіб №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

Так, спочатку потрібно увійти. Вихід за допомогою "докер виходу"

4) docker push chuangg/gene_commited_image

Спосіб №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 для розгортання зображення 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 Quickstart Terminal = 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 намагається розгорнути зображення в 2 рази і ставить часову позначку на банку. Ось чому я і користувався <phase>install</phase>.


46

Якщо реєстр докерів приватний і самостійно розміщений, вам слід зробити наступне:

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. увійдіть у свій обліковий запис док-центру і перейдіть до своїх глобальних налаштувань . Існує налаштування, яке дозволяє встановити, яка ваша візові умова за замовчуванням для сховищ, які ви натискаєте. За замовчуванням воно встановлено на загальнодоступне, але якщо змінити його на приватне, усі ваші сховища, які ви натискаєте, за замовчуванням будуть позначені як приватні. Важливо зауважити, що вам потрібно буде мати достатньо приватних репостів на вашому рахунку, інакше репо буде заблоковано, поки ви не оновите свій план.


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 (РОЗМІР)

Готово!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.