2016-12-04 5 views
-2

Dockerイメージビルド中にGoアプリケーションをビルドし、ビルドされたGoアプリケーションにイメージエントリポイントを設定したいとします。問題は、Goアプリケーションがメインパッケージのサブパッケージであり、メインパッケージの他のサブモジュールを使用していることです。このメインパッケージはGithub上にあり、プライベートレポジトリとして使用していますので、コンテナ内にはgo getしか入れることができません。DockerコンテナのGo依存関係の解決

私は、Glide依存関係マネージャをセットアップしようとしましたが、コンテナの外のすべての依存関係をvendor/ディレクトリに入れましたが、別の問題があります。glide.lockはメインのプライベートリポジトリでコミットするたびに更新する必要があります。他の依存関係をロックしたいので、これは私にとっては解決策ではありません。

最新のメインパッケージ依存関係と他の依存関係のロックされたバージョンでアプリケーションを構築する方法はありますか?

+0

ここにhttps://blog.golang.org/dockerはドッキング用のコンテナを梱包するのに適した記事です。DockerFileでアプリケーションの必要なサブパッケージとエントリポイントをすべて定義できます – ahankendi

+0

GOPATHに手動でクローンを作成する必要があるプライベートリポジトリやsshをサポートするグライドを使用する必要があるため、これは機能しません。また、依存関係のバージョンがロックされている必要があります。 – kubaj

答えて

0

これはGoの質問ではありません。ドッカーとセキュリティに関する質問です。

まず、ビルドの一部としてGoアプリを構築するのは理想的ではありません。通常は、DockerファイルFROMを設定したurマシン上でバイナリlocalllyをビルドします。あなたがGOマシンとGOARCHマシンのいずれかをターゲットにすることができます。

プライベートレポを使用する場合は、コンテナ内にコードを作成してビルドする方法に関係なく、プライベートファイルを含むコンテナを使用するか、悪化する可能性がありますあなたのSSHキー。アップロードしてどこかをホストして実行する必要があるコンテナ。

これは理想的ではありませんが、あなたはそれを見ています。ローカルの/ビルドマシンの引数yhatのプライベートリポジトリがプライベートレポにアクセスすることを許可されている

  • git clone:あなたのコードおよび/またはキーをリークして決定された場合

    しかし、あなただけの2つのオプションがありますur Dockerfile内でCOPYを使用してコピーしてください。

  • 使用Dockerfile COPYあなたは(あなたはまた、インストールのgitとsshが必要です)Gitのコマンドを実行できるように容器の中に、あなたはあなたのリモートレポのために認可されているローカルマシンのSSHキーをコピーします。

また、これらは理想的ではありません。 Goアプリをローカルにビルドし、コンテナのタイプをターゲットにしてバイナリをコピーします。それは本当に簡単ではありませんでした。

依存関係管理に関して、私は滑空を一度も使用していません。しかし、私は/vendorでバージョン管理の依存関係について一般的な答えを書いています。

How should I use vendor in Go 1.6?

0

あなただけのドッキングウィンドウコンテナからあなたのプライベートリポジトリをgo getすると、それを構築するとき、あなたは自分のDockerfileの先頭にこれを追加することができ、あなたのid_rsaとをコピーする気にしないことができることを気にしている場合:

RUN echo "[url \"[email protected]:\"]\n\tinsteadOf = https://github.com/" >> /root/.gitconfig 
RUN mkdir /root/.ssh && echo "StrictHostKeyChecking no " > /root/.ssh/config 
COPY id_rsa /root/.ssh/id_rsa 
関連する問題