前々回、前回
で、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)
- 作者: 杉山貴章,大瀧隆太,Yugui(Yuki Sonoda),中津川篤司,前佛雅人,松原豊,米林正明,松本勇気
- 出版社/メーカー: 技術評論社
- 発売日: 2015/06/18
- メディア: 大型本
- この商品を含むブログ (2件) を見る