Как перенести изображение докера в частный репозиторий
У меня есть изображения докеров, помеченные как me/my-image, и у меня есть частное репо на докер-хабе с именем me-private. Когда я нажимаю свое/мое изображение, я в конечном итоге всегда нажимаю на публичное репо.
Каков точный синтаксис, который специально подталкивает мой образ к моему частному репо?
Ответы
Ответ 1
Сначала вам нужно пометить свое изображение с помощью 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
Ответ 2
Всего три простых шага:
-
docker login --username username --password password
-
docker tag my-image username/my-repo
-
docker push username/my-repo
Ответ 3
Сначала перейдите на свою учетную запись Docker Hub и сделайте репо. Вот скриншот моей учетной записи Docker Hub:
![введите описание изображения здесь]()
Из рисунка вы можете видеть, что мое репо - "chuangg"
Теперь зайдите в репо и сделайте его приватным, щелкнув по имени вашего изображения. Поэтому для меня я нажал на "chuangg/gene_commited_image", затем перешел в "Настройки" - "Сделать частным". Затем я последовал инструкциям на экране
![введите описание изображения здесь]()
КАК ЗАПОЛНИТЬ ВАШЕ ИЗОБРАЖЕНИЕ DOCKER НА ДОЛЖНОМ УРОВНЕ
Метод # 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]
Да, сначала вам нужно войти в систему. Выход из системы с помощью "выхода из докера"
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 Terminal для развертывания Docker Image (из каталога, где находится ваш 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:
![введите описание изображения здесь]()
Вот мой файл Docker:
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>
.
Ответ 4
Если реестр 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
Ответ 5
Есть два варианта:
-
Перейдите в концентратор и сначала создайте репозиторий, и пометьте его как закрытый. Затем, когда вы нажмете на это репо, он будет закрыт. Это наиболее распространенный подход.
-
войдите в свою учетную запись вашего док-станции и перейдите в
Ответ 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
Ссылка
Ответ 7
Простое рабочее решение:
Перейдите сюда 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 (IMAGE ID) 2 дня назад (СОЗДАНИЕ) 305 МБ (РАЗМЕР)
Готово!
Ответ 8
Ссылка: 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 в реестр
-
Потяните изображение ubuntu:16.04
из Docker Hub.
$ docker pull ubuntu:16.04
-
Пометьте изображение как localhost:5000/my-ubuntu
. Это создает дополнительный тег для существующего изображения. Когда первая часть тега - имя хоста и порт, Docker интерпретирует это как местоположение реестра при нажатии.
$ docker tag ubuntu:16.04 localhost:5000/my-ubuntu
-
Нажмите изображение в локальный реестр, запущенный на localhost:5000
:
$ docker push localhost:5000/my-ubuntu
-
Удалите локально кэшированные изображения. Это не удаляет изображение localhost:5000/my-ubuntu
из вашего реестра.
$ docker image remove ubuntu:16.04
$ docker image remove localhost:5000/my-ubuntu
-
Вытащите изображение localhost:5000/my-ubuntu
из вашего локального реестра.
$ docker pull localhost:5000/my-ubuntu
Развертывание простого реестра HTTP Согласно docs.docker.com, это очень небезопасно и не рекомендуется.
-
Отредактируйте файл 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.
-
Перезагрузите Docker, чтобы изменения вступили в силу.
Ответ 9
Создать репозиторий на dockerhub:
$docker tag IMAGE_ID UsernameOnDockerhub/repoNameOnDockerhub:latest
$docker push UsernameOnDockerhub/repoNameOnDockerhub:latest
Примечание: здесь "repoNameOnDockerhub": репозиторий с именем, которое вы упоминаете, должен присутствовать на dockerhub
"последний": это просто тег