独自のdockerファイル(「helloworld」を出力するシェルスクリプトを実行する)を作成しました。画像は「hellodocker」で、タグは「mytag」です。
bash-3.2$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
hellodocker mytag 3514c8dc11a8 39 minutes ago 2.433 MB
busybox buildroot-2013.08.1 d200959a3e91 10 weeks ago 2.489 MB
busybox ubuntu-14.04 37fca75d01ff 10 weeks ago 5.609 MB
busybox ubuntu-12.04 fd5373b3d938 10 weeks ago 5.455 MB
busybox buildroot-2014.02 a9eb17255234 10 weeks ago 2.433 MB
busybox latest a9eb17255234 10 weeks ago 2.433 MB
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
97c29510069e hellodocker:mytag /bin/sh -c /Users/in 33 minutes ago Exited (127) 26 minutes ago happy_pasteur
8d04a1385c24 hellodocker:mytag /bin/sh -c /Users/in 37 minutes ago Exited (127) 30 minutes ago mad_bell
8998d61c0513 hellodocker:mytag /bin/sh -c /Users/in 37 minutes ago Exited (127) 30 minutes ago boring_thompson
64314c304a29 hellodocker:mytag /bin/sh -c /Users/in 37 minutes ago Exited (127) 31 minutes ago sad_wilson
8bc20e0555b8 hellodocker:mytag /bin/sh -c /Users/in 38 minutes ago Exited (127) 31 minutes ago sleepy_mayer
97664a4ba870 hellodocker:mytag . 38 minutes ago kickass_poincare
8bb752631cb6 busybox:buildroot-2014.02 /bin/echo Hello Doct 18 hours ago Exited (0) 18 hours ago dreamy_kowalevski
6aa66b55ca94 busybox:buildroot-2014.02 bash-3.2$ Sudo docke 18 hours ago ecstatic_lovelace
2cc657f65342 busybox:buildroot-2014.02 /bin/echo Hello Dock 18 hours ago Exited (0) 18 hours ago dreamy_poincare
Dockerイメージをdockerhubにプッシュするにはどうすればよいですか?私が使う docker Push <myuserid>/hellodocker
。これにより、「そのようなIDはありません」というエラーが発生します。何が足りないのですか?前もって感謝します。
ビルドするときに、<myuser>/hellodocker
としてタグ付けする必要があります。
docker build -t <myuser>/hellodocker:mytag .
または、同じ画像に関連付けられた新しいタグを作成します。
docker tag hellodocker:mytag <myuser>/hellodocker:mytag
hellodocker
名前空間の下にmyuserid
リポジトリが必要な場合は、最初にローカルのhellodocker
をmyuserid
likeにタグ付けする必要があります。
docker tag hellodocker myuserid/hellodocker
そして、これをプッシュしますmyuserid/hellodocker
リポジトリからハブへ:
docker Push myuserid/hellodocker
まず、Docker Hubアカウントに移動して、リポジトリを作成します。これが私のDockerHubアカウントのスクリーンショットです:
写真から、私のリポジトリが「chuangg」であることがわかります
DockerイメージをDockerハブにアップロードする方法
方法#1 =コマンドラインから画像をプッシュする(cli)
1)docker commit <container ID> <repo name>/<Name you want to give the image>
はい、コンテナIDである必要があると思います。おそらくイメージIDにすることはできません。
例= docker commit 99e078826312 chuangg/gene_commited_image
2)docker run -it chaung/gene_commited_image
3)docker login --username=<user username> --email=<user email address>
例= docker login --username=chuangg [email protected]
はい、最初にログインする必要があります。 「dockerlogout」を使用したログアウト
4)docker Push chuangg/gene_commited_image
方法#2 = pom.xmlとコマンドラインを使用して画像をプッシュします。
「build-docker」と呼ばれるMavenプロファイルを使用したことに注意してください。プロファイルを使用したくない場合は、<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
Mavenプロファイルを使用していない場合、コマンドは単にmvn clean deploy docker:Push
になります。
方法#2と#3の違いは、方法#3には展開用に追加の<execution>
があることに注意してください。
メソッド#3 = Mavenを使用してDockerHubに自動的にデプロイする
このようなものを親の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クイックスタートターミナルでtype = mvn clean install -Pbuild-docker
プロファイルを使用していない場合は、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>
これが私の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はイメージを2回デプロイしようとし、タイムスタンプをjarに配置します。だから私は<phase>install</phase>
を使いました。