トップページ > Linux > 2017年02月20日 > GZ1cgO8N

書き込み順位&時間帯一覧

13 位/130 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000000112



使用した名前一覧書き込んだスレッド一覧
login:Penguin
Docker

書き込みレス一覧

Docker
858 :login:Penguin[sage]:2017/02/20(月) 22:58:04.93 ID:GZ1cgO8N
久しぶりに来たら squash の話してるけどすでに実装されてるぞ。
ただし、Experimental。

仕組みとしては、通常のbuildをしてできたイメージを1layerにする処理がまた走る。
内部的にはイメージが2つできる感じ。
手元のディスク容量的には損だけど、squash 前の繰り返しする場合に
レイヤーが再利用されるのでそういう面で便利。

使い方は、docker daemon を experimental オプションつけて起動して、
docker build --squash -t foo .

次の 17.03 か 17.04 あたり(バージョニングルールが変わった)で experimental 外れるんじゃないかな
Docker
859 :login:Penguin[sage]:2017/02/20(月) 23:14:46.37 ID:GZ1cgO8N
golang を docker で build する意味に関してはいくつかある。

vendoring tool (依存パッケージのバージョン含めた管理)の代わりにセットアップされたイメージを用意するという方法。
最近は golang から dep という公式ツールが出て今後の方針が見えてきたとはいえ
テストなどを考えると vendoring の処理自体を毎回するとか面倒なのでコンテナ使うのは悪くないと思う。

ほかは cgo の問題(golang の中で c をインラインで書ける機能)。
golang の net/http はそのままで名前解決の部分が libc に依存しているので build 環境に左右される。
これは debian などで glibc 環境で build したイメージが glibc へダイナミックにリンクされてしまい
Alpine の musl libc で起動できないという現象(または逆)がある。
net/http の場合は CGO_ENABLED=0 や -a オプションなどで golang での実装へ回避できるが、
mattn/go-sqlite3 など中身は C のライブラリへのリンクしか無いと言うものが結構ある。
mattn/go-sqlite3 場合だと動作環境に sqlite のライブラリを入れるか
ldflags などを工夫して static バイナリをなんとか作るかという面倒なことをする必要がある。
docker イメージならライブラリ突っ込んで置けばいいので楽。

あとは、コマンドの統一。
いろいろなコマンドを docker run hoge 的に統一できるということ。
docker hub に登録しておけばどの環境でもこのコマンドで取得して実行できる。
golang の場合は容量的に空のイメージである scratch イメージを base にバイナリ放り込むという感じかな。
これを頑張ってる例としては whalebrew。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。