2017-08-25 9 views
0

中に入るのすべての依存パッケージを取得し、私はすべての私の依存パッケージを取得することができます:、私は次の操作を実行したときにドッキングウィンドウ

$ cd myrepo 
$ go get -d ./... 

しかし、ドッキングウィンドウでこれを行うための最善の方法は何ですか?私はすべてのリポジトリを私のドッカーアプリの中に入れたくないので、私はこれをドッカーコンテナの中で何らかのボリューム(またはそのようなもの)に実行して再利用する方法を探しています。

私は何かのようなものを考えていました。 Dockerfile

FROM golang:1.8 

WORKDIR /app 
ADD ./src 

ビルドイメージ

$ docker build -t myapp . 

$ docker run myapp go get -d ./... 

がどのように私はそれらを毎回ダウンロード/引っ張っなしの依存関係を再利用することができますか?私はそれらを一種のボリュームで欲しい。私はドッカーのボリュームを少し知っていますが、私はこの場合にどのように使用するのか分かりません。

+0

あなたはRUNを使用してdockerfileに依存関係をインストールします。 Dockerはレイヤー(依存関係を含む)をキャッシュし、システム上に存在する限り毎回引き出しません(docker rmiを使用してイメージを削除しない限り存在します)。 – Vasif

+0

@Vasifは私のイメージが巨大にならないでしょうか? (たくさんの依存reposがあります) – DenCowboy

+0

はいイメージは大きくなるでしょう。しかし、あなたがイメージに持っていないなら、あなたのコンテナが削除されるたびに(更新目的のために)、再びすべての依存関係をイメージに戻す必要があります。また、コンテナ内の依存関係がコア原理。 Coz、まあ、コンテナは、独立した実行時環境を提供するソリューションです。あなたはおそらくそこにエッジをカットしたくないでしょう。もし私が聞くことができるなら、サイズは何ですか? – Vasif

答えて

0

これを行う最も良い方法は、ビルダーパターンを使用することです。 最初のイメージでは、すべての依存関係をダウンロードし、実行可能ファイルをビルドします。 2番目に、実行可能ファイルを新しいイメージにコピーします。スクラッチイメージをベースとして使用することもできますが、アルパインは小さめですが、httpsの証明書のようなものにシェルとパケットマネージャを提供するため、おそらく良いでしょう。

ソースをコピーして依存関係をインストールすると、ソースが変更されるたびにダウンロードされるため、go depのようなものを使用するのは良いことではありません。 Gopkgファイルをコピーして、依存関係をインストールしてから、ソースをコピーすることができます。

公式記事https://docs.docker.com/engine/userguide/eng-image/multistage-build/ 、より詳細に https://blog.alexellis.io/mutli-stage-docker-builds/

関連する問題