LT駆動開発19で「Docker >>= Docker」という話した。 「どっかーばいんどどっかー」と読む。 cronの中でDockerコマンドがつかいたかった。そのcrondはDockerホストでは当然動かしたくない。Dockerコンテナ内におきたい。 Remote APIでたたいてもいいけど、ちょっとしたものならコマンドが楽でよい。

dockerが使えるイメージはdockerがある。docker run サブコマンドは

$ docker run イメージ コマンド

なので、イメージを節約して、dockerイメージをつかいまわすと、

$ docker run docker docker run docker ls`

という不思議な呪文になった。 実際はDockerfileでRUNで指定したりするので、

$ docker run docker docker run hoge

とかですんだり、そもそもdocker run hogeで済むようにつくることになるだろう。

ちなみに

$ docker run docker "docker run docker ls"`

だとうまくうごかない。

$ docker run docker bin/sh -c "docker run docker ls"

とすると良い。

sh -c の中でdockerコマンドで複数のプログラムをうごかしてパイプで処理をつないだりもできる。 そういう話をしました。

あと一番大事なことだけど、Docker Hostが動いているコンピュータ上のdockerコマンドは/var/run/docker.sockをつかって通信しているようなので、-v /var/run/docker.sock:/var/run/docker.sockを共有してやると、コンテナ内からHostと簡単に通信できる。 これって安全なのかはよくしらない。

Dockerの中でDockerを起動すると Docker Docker A になりそうだけど、Docker A になるので、 「Docker >>= Docker」というタイトルにしてみました。いま気づいたけど、型が不一致である。「Docker >>= _ -> Docker」 とすべきだったのでは…。 もうそれなら「Docker >> Docker」じゃん…。

スライドは即興でつくったので雑です。