LoginSignup
13
14

More than 5 years have passed since last update.

リモートのコンテナからDockerコマンドを使えるようにする

Last updated at Posted at 2016-05-01

ローカルのDocker EngineであればDockerのコントロール・ソケットdocker.sockをbindマウントするだけなので、下記のようにわりとシンプルなコマンドになります。

docker run -v /var/run/docker.sock:/var/run/docker.sock \
           -it docker docker ps

しかし、この方法だとリモートのDocker Machineにあるコンテナでは期待通りに動作してくれません。それではどうするかというと、Docker Machineとやり取りするための環境(pemファイルも含める)をコンテナに渡す必要があります。

例えば下記の手順をふむと、dockercontrolという名前のコンテナを作ってそのコンテナ上の/dockerというボリュームにその環境を保存することができます。

# 環境を設定します
$ eval $(docker-machine env host1)

# 環境を保存するためのコンテナを作ります
$ tar -C $DOCKER_CERT_PATH -cf- ca.pem cert.pem key.pem |
  docker run --name dockercontrol -i -v /docker docker \
  sh -c "tar -C /docker -xf-
         echo export DOCKER_HOST=$DOCKER_HOST >>/docker/env
         echo export DOCKER_TLS_VERIFY=1 >>/docker/env
         echo export DOCKER_CERT_PATH=/docker >>/docker/env"

ちなみにこのdockercontroldocker psを叩いてもでてきませんが、/dockerというボリュームを抱えたままExited(0)で眠っています。これで/dockerの準備はできたので、次はこのボリュームをマウントしてコンテナを起動します。

# コンテナを起動します
$ docker run --rm --volumes-from dockercontrol -it docker

# 環境を読み込みます
/ # source /docker/env

# Dockerコマンドを使ってみます
/ # docker ps

これで何が嬉しいかというと、Docker Swarm上にイベントドリブンでオートスケールするシステムをフル・コンテナで実装できることです。

この便利なティップスはJérôme Petazzoniさんのブログ・ポストの受け売りなのですが、内容がとても勉強になるので是非彼のブログにも目を通してみてください。また、彼のポストがCC BY-NC-SA 4.0ライセンスで書かれているのでこのポストも同じくCC BY-NC-SA 4.0ライセンスとなります。

それと、彼のブログでも紹介されてるのですが、彼のGithubアカウントにはこのアイデアをシェルスクリプトにしたものがあります。

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14