Как переместить изображение docker в частный репозиторий
У меня есть изображения docker с тегом me/my-image, и у меня есть частное РЕПО на dockerhub с именем me-private. Когда я нажимаю на свой me / my-image, я всегда попадаю в публичное РЕПО.
каков точный синтаксис, чтобы специально подтолкнуть мое изображение к моему частному РЕПО?
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
всего три простых шага:
docker login --username username --password password
docker tag my-image username/my-repo
docker push username/my-repo
сначала перейдите в свою учетную запись Docker Hub и сделайте РЕПО. Вот скриншот моей учетной записи Docker Hub:
из рисунка вы можете видеть, что мое РЕПО - это "chuangg"
Теперь перейдите в репо и сделать его частным, нажав на имя вашего изображения. Поэтому для меня я нажал на "chuangg / gene_commited_image", затем я пошел в Настройки -> сделать приватным. Затем я последовал инструкциям на экране
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_image2)
docker run -it chaung/gene_commited_image3)
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-файл :
теперь в вашем Докере Quickstart тип терминала=
mvn clean install -Pbuild-dockerдля тех из вы не используете профили Maven, просто введите
mvn clean installвот скриншот сообщения об успешной :
вот мой полный пом.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>вот мой 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= не синхронизировать
<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
есть два варианта:
зайдите в хаб, и сначала создайте репозиторий, и отметьте его как частный. Затем, когда вы нажмете на это РЕПО, оно будет частным. Это самый распространенный подход.
войдите в свою учетную запись 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)
- в-третьих, я использую
docker push johnsmith/private-repository:01(ваш частный РЕПО будет здесь пример https://hub.docker.com/r/johnsmith/private-repository/)готово!
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скопировать изображение из Докер-концентратор для вашего реестр
Развертывание простого реестра HTTP
тянуть
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согласно 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, чтобы изменения вступили в силу.






Comments