GoのコードからDockerイメージのpullを実装する(bufio.Scannerかわいい)

前回エントリ↓でコードからのイメージのpullが動かなくてあっれおかしーなーとなって悔しかったのでリベンジです。

  • client.ImagePullの返り値はio.ReadCloser型とerror
  • このio.ReadCloserが、イメージのpullのprogressなどを表すHTTPのストリーム
  • このストリームへの書き込みが終わる(つまりdocker pullが完了する)まで待つ必要があった

以下読まなくてよいです

動かないコード

動くコード

前後省略します

上記では、bufio.Scannerを使ってHTTPのEOFまで待っている。ついでに、毎バッファ書き込みされるレスポンスを取り出して上げている。
↓こういうきれいな感じのペイロードが送られてくる。

f:id:otiai10:20170526152637p:plain

Scanner使わないんだったらioutil.ReadAllかなー他にストリームが終わるの同期的に待つのどうすっかなーと思ってググりました。

今回のように毎ペイロードが独立して意味のあるものであれば、Scanner使うのが良い気がするものの、もっと良い(単にReaderのEOFを待つための)方法があれば教えてくださいm(_ _)m

雑感

  • Goのコードからgithub.com/docker/docker/clientを使って (1) イメージのpull (2) コンテナ起動 が実現されたので、これでほぼ心置きなく俺々Dockerクライアントを自作できますね!やったね!
  • 腰椎椎間板ヘルニアになっちゃった。腰痛ぇ。

DRYな備忘録として

投稿日:May 26th 2017

元記事:http://otiai10.hatenablog.com/entry/2017/05/26/154301

– PR –
– PR –