ドキュメント 言う:
イメージをビルドしてローカルのDockerサーバーに保存するには、
docker:publishLocal
私はDockerを使い始めたばかりで、「ローカルDockerサーバー」の概念に精通していません。それは何で、docker:publishLocal
の出力をどこで探す必要がありますか?
Dockerの主なコンポーネントはここで説明されています: https://docs.docker.com/introduction/understanding-docker/#what-are-the-major-docker-components
「Dockerサーバー」と呼ばれるのは、リンクされた説明の「Dockerデーモン」です。 Dockerデーモンはローカルマシンで実行され、通常はdocker
バイナリによって実行されるコマンドの主要な連絡先です。
Dockerデーモンは、次のような多くのタスクを実行します。
SBTは、publishLocal
という名前のタスクを使用して、アセットをローカルのIvy/Mavenリポジトリーに公開します(これは、マシン上にのみ存在するものです)。
Sbt-native-packagerのDockerサポートは、Dockerコンテキストで同じタスクを使用しようとするため、sbt docker:publishLocal
はローカルのDockerサーバー上にイメージを構築します。 IvyまたはMavenにローカルで公開するのと同じように、このアクションにより、開発のためにイメージをローカルで表示できますが、ローカルマシンの外部では表示されません。
実際には、コマンドdocker build -t "${projectName}:${version}"
にマップされます。
その後、このイメージをdocker run "${projectName}:${version}"
で使用できますが、ローカルマシンではのみです。
SBTは、publish
という名前のタスクを使用して、アセットをリモートのIvy/Mavenリポジトリに公開します。これには、イメージを公開する場所を記述するための追加の構成が必要です。
sbt-native-packagerは、このタスクをDockerコンテキストの適切なアクションにマップしようとします。そのため、プラグインはローカルでイメージのビルドを実行し、続いてイメージを適切なリモートイメージリポジトリにプッシュします。
これを機能させるには、dockerRepository
設定を追加する必要があります。
これがスラッシュのない文字列に設定されている場合、例: 「username1」、これにより「username1 /」が画像名に追加されます。イメージをプッシュしようとすると、DockerはイメージをパブリックDockerレジストリ( "username1"のアカウントの https://registry.hub.docker.com/ )にプッシュしようとします。
スラッシュ付きの文字列に設定されている場合、例: 「my.server1/username1」。これにより、その文字列もイメージ名に追加されます。これは前のケースと似ていますが、DockerサーバーがDNSで「my.server1」というサーバーを見つけようとし、パブリックDockerレジストリの代わりにそのサーバーにプッシュする点が異なります。
実際には、
docker build -t "${dockerRepository}/${projectName}:${version}" . // working directory at `target/docker/stage` docker Push "${dockerRepository}/${projectName}:${version}"
その後、docker run "${dockerRepository}/${projectName}:${version}"
を使用して、ローカルマシンまたは他のマシンからこのイメージを使用できます。
stage
タスクは、Dockerデーモンに送信する準備ができた形式でDockerイメージのすべてのファイルを含むディレクトリを作成します。このディレクトリはtarget/docker/stage
です。作業ディレクトリをここに変更してdocker build .
を実行すると、そのディレクトリの内容を使用してイメージが作成されます。
見つかりました ソースコード 。 docker:publishLocal
はdocker build -t [dockerTarget]
にマップされているようです
私はPlay2.3を使用しています。これは、現在sbt-native-packager0.7.1を使用しているソースから表示されます。それが実際に使用しているバージョンであることをSBTコンソールから確認する方法がわかりません。 Dockerのサポートは0.7.2で追加されたので、何も起こらないのはそのためだと思います。 0.7.1では何もしないようです。理由はわかりません。私はそれが失敗するか何かを期待するでしょう。
Playを0.7.2にアップグレードするための変更 を送信しましたが、予想よりも困難でした。 sbt-native-packager 0.7.2を使用すると、target/docker /に出力が表示されます。