web-dev-qa-db-ja.com

sbt-native-packagerのdocker:publishLocalは何をしますか?

ドキュメント 言う:

イメージをビルドしてローカルのDockerサーバーに保存するには、

docker:publishLocal

私はDockerを使い始めたばかりで、「ローカルDockerサーバー」の概念に精通していません。それは何で、docker:publishLocalの出力をどこで探す必要がありますか?

17
Ben McCann

Dockerサーバー

Dockerの主なコンポーネントはここで説明されています: https://docs.docker.com/introduction/understanding-docker/#what-are-the-major-docker-components

「Dockerサーバー」と呼ばれるのは、リンクされた説明の「Dockerデーモン」です。 Dockerデーモンはローカルマシンで実行され、通常はdockerバイナリによって実行されるコマンドの主要な連絡先です。

Dockerデーモンは、次のような多くのタスクを実行します。

  • 開始コンテナ
  • コンテナの停止
  • コンテナステータスのクエリ
  • イメージの構築(コンテナーの「ファイルシステム」)
  • dockerインデックスまたは別のイメージサーバーにイメージをプッシュする(ビルドマシンの外部からイメージを表示するため)
  • コンテナの管理、停止した場合の再起動

タスクからDockerアクションへのsbt-native-packagerマッピング

publishLocal

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 .を実行すると、そのディレクトリの内容を使用してイメージが作成されます。

29
Gary Coady

見つかりました ソースコードdocker:publishLocaldocker 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 /に出力が表示されます。

0
Ben McCann