GoのコードからDockerコンテナへのディスクボリュームのマウントを実装する
前々回、前回
で、GoのコードからDockerイメージのpullとDockerコンテナのrunを実装できたので、実践的なアプリケーションをつくっていきたいのだけれど、今回はdocker runにおける--volumeの指定がしたい。
実行するDockerイメージのサンプル
Dockerfile
FROM centos ADD main.sh /bin/ ENTRYPOINT main.sh
main.sh
#!/bin/sh dest="copy_`date`.txt" cat /var/data/foo.txt > /var/data/${dest}
docker build . -t foo としてfooというtagのimageをつくる。
実行するGoのコード
cc := &container.Config{
Image: "foo",
// Volumes: map[string]struct{}{"/var/data": struct{}{}},
// これ要らんっぽいな... 🤔
}
hc := &container.HostConfig{
// これが味噌
Mounts: []mount.Mount{
mount.Mount{
Type: mount.TypeBind,
Source: "/Users/otiai10/tmp/hoge",
Target: "/var/data",
},
},
AutoRemove: true,
}
nc := &network.NetworkingConfig{}
// あとは前回、前々回とおなじです。
body, err := c.ContainerCreate(ctx, cc, hc, nc, "bar")
if err != nil {
panic(fmt.Errorf("ContainerCreate: %v", err))
}
fmt.Printf("Created Container:\n%+v\n", body)
if err := c.ContainerStart(ctx, body.ID, types.ContainerStartOptions{}); err != nil {
panic(fmt.Errorf("ContainerStart: %v", err))
}
確認
% ls -l ~/tmp/hoge total 8 -rw-r--r-- 1 otiai10 staff 16 5 29 16:48 foo.txt % go run main.go Created Container: {ID:e2b6e7aa7251f13d8e823dc4a4dddb327b3863e9632211698126b46d5975e724 Warnings:[]} List of containers - e2b6e7aa7251f13d8e823dc4a4dddb327b3863e9632211698126b46d5975e724 (foo) % ls -l ~/tmp/hoge total 16 -rw-r--r-- 1 otiai10 staff 16 5 30 11:59 copy_Tue May 30 02:59:06 UTC 2017.txt -rw-r--r-- 1 otiai10 staff 16 5 29 16:48 foo.txt %
無事、ホスト(厳密にはGoのコードを実行する環境ではなく、このclient.Clientが向いてるdockerホストマシン)の/Uers/otiai10/tmp/hogeが、コンテナから見たときの/var/dataにマウントされていることが確認された。
参考と道のり
- docker/docker/client - func (*Client) VolumeCreate
- 最初、
ContainerConfigのVolumesになんかVolume型みたいなのを食わせるのかなと思っていたけど、結果的にはそうではなかった。 - docker/docker/api/types/volume - type VolumesCreateBody
- docker/docker/api/types/volume - type Volume
- なのでこの辺を見てたりしたけど、フィールド見るほどに、なんかちげえな、って気持ちになる
- 最初、
- docker/docker/client - type HostConfig
- 今一度、
client.ContainerCreateの、今度はHostConfigのほうをじっくり見ると、Mountsというフィールドがあることに気づく
- 今一度、

雑感
- ドキュメント散在してるなー、って思った
- 急がず焦らず、じっくり読まないといけない
DRYな備忘録として

- 作者: Adrian Mouat,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/08/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る

<試読版>Linuxコンテナー最新ツール Dockerを支える技術(日経BP Next ICT選書) 日経Linux技術解説書【試読版】
- 作者: 中井悦司
- 出版社/メーカー: 日経BP社
- 発売日: 2015/03/25
- メディア: Kindle版
- この商品を含むブログを見る
![Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus) Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)](https://images-fe.ssl-images-amazon.com/images/I/51gFcibBx-L._SL160_.jpg)
Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!] (Software Design plus)
- 作者: 杉山貴章,大瀧隆太,Yugui(Yuki Sonoda),中津川篤司,前佛雅人,松原豊,米林正明,松本勇気
- 出版社/メーカー: 技術評論社
- 発売日: 2015/06/18
- メディア: 大型本
- この商品を含むブログ (2件) を見る