Docker のアーキテクチャ
Docker はクライアントサーバモデルも採用しており、サーバ側の API 仕様は Docker Remote API として公開されています。つまり、 Docker クライアント (Docker コマンド) はこの Remote API を叩いて Docker サーバ (Docker デーモン) に操作を依頼しているのであり、設定をすれば普通の HTTP 経由でも API へアクセスすることが可能になっています。
Docker デーモンはデフォルトでは Unix ソケットの unix:///var/run/docker.sock
を listen しますが、 Windows や OS X で Boot2Docker や Docker Machine を使っている場合には、 TCP ソケット (2376 番ポート) を listen するように設定されています。また、接続は TLS で暗号化されています。この辺りのことをクライアントからのアクセスの際に指定するために、以下の環境変数の設定が必要となるわけです。
1 | # Docker Machine の場合 |
HTTPie で Docker Remote API にアクセスする
たとえばイメージ一覧を取得してみます。現状のイメージ一覧は以下のようになっているとしましょう。
1 | $ docker images |
では Docker Remote API に直接アクセスしてみます。 wget
を使った方法はこちらの記事で紹介されていますが、僕は HTTPie を愛用しているので、今回はそちらを使ってやってみたいと思います。
結論から言えば、以下のようにオプションを指定して API にアクセスします。
1 | # 簡略化のため、あらかじめホスト VM の IP アドレスを取得しておく |
詳細なイメージ情報が JSON で取得できました。この API 情報を使うことで、サードパーティでもさまざまな Docker 用ツールが開発できそうです。