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



У меня есть изображения docker с тегом me/my-image, и у меня есть частное РЕПО на dockerhub с именем me-private. Когда я нажимаю на свой me / my-image, я всегда попадаю в публичное РЕПО.



каков точный синтаксис, чтобы специально подтолкнуть мое изображение к моему частному РЕПО?

1188   8  

8 ответов:

сначала вам нужно правильно пометить свое изображение с помощью 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. docker login --username username --password password

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

  3. docker push username/my-repo

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

из рисунка вы можете видеть, что мое РЕПО - это "chuangg"

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

HOW TO ЗАГРУЗИТЕ ИЗОБРАЖЕНИЕ 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 protected]

Да, вы должны войти в систему в первую очередь. Выход из системы с помощью " docker выход из системы"

4) docker push chuangg/gene_commited_image

Метод #2= нажатие изображения с помощью pom.xml и командная строка.

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

внутри родительского пом.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\ directory и добавьте это в свою конфигурацию.JSON-файл : enter image description here

теперь в вашем Докере Quickstart тип терминала= mvn clean install -Pbuild-docker

для тех из вы не используете профили Maven, просто введите mvn clean install

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

вот мой полный пом.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>.

Если вы docker реестр является частным и self hosted вы должны сделать следующее :

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

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

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

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

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

> 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

ссылка

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

иди сюда 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(IMAGE ID) 2 дня назад(создано) 305MB(SIZE)

готово!

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

скопировать изображение из Докер-концентратор для вашего реестр

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

Comments

    Ничего не найдено.