LoginSignup
7
11

More than 5 years have passed since last update.

Dockerにネットワーク経由でアクセスする方法

Last updated at Posted at 2018-05-30

本記事について

Docker が動いているマシンに、ネットワーク越しに、別のクライアントから Docker にアクセスできるようにする方法。

はじめに

Dockerはサーバー・クライアントで動いています。
ローカルのPCにDockerをインストールした際は、同じPC上にサーバー・クライアントが構築され、直接通信を行います。
その通信をネットワーク越しに行えるよう設定することにより、他のPCで動いているDockerでも、ローカルのDockerで作業するのと同じ感覚で、操作ができるようになります。

Docker Machineでネットワーク通信をセットアップ

Docker をネットワーク通信できるようにする方法は、公式の https://docs.docker.com/engine/security/https/ に記載されていますが、結構手間です。
そこでここでは、Docker Machineを使って、Dockerをネットワーク通信できるようセットアップします。

Docker Machineとは

  • Dockerサーバーを作成・管理するためのコマンドです。 https://docs.docker.com/machine/
  • 新たにDockerサーバーを作ったり、既存のサーバーをDockerサーバーにすることができます。
  • サーバーにするPCは何でもよく、仮想PCでも構いません

Docker Machine構築

既にPCがあって、それをDocker Machineにする方法を記載します。

  • (サーバー側作業)サーバーにSSHログインできるようセットアップしておく
  • (サーバー側作業)サーバーでSSHログインユーザーがsudoをパスワード無しで実行できるようにしておく
  • docker-machineコマンドをインストール https://docs.docker.com/machine/install-machine/
  • Genericドライバーで、サーバーをDocker Machineにする
    Dockerは自動でインストールされるので、インストールしておく必要はありません
docker-machine create \
    --driver generic \
    --generic-ip-address=<IPアドレス> \
    --generic-ssh-key <ssh鍵ファイルパス> \
    --generic-ssh-user <sshログインユーザー名> \
    <マシン名>

これで、指定したPCがDocker Machineとなります。
作成されたDocker Machineではdocker daemonがネットワーク通信可能な状態でセットアップされています。

$ ps -aux | grep dockerd
… usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver aufs --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic

Docker Machineを作成したローカルPCからは、docker-machine lsでマシン一覧を表示し、eval $(docker-machine env <マシン名>)で、Dockerの接続先マシンを切り替えることができるようになります。

Docker Machineに別のクライアントからアクセスする

docker-machineコマンドは、マシンを作成した時に使用したクライアントで利用し、その他のクライアントからDocker Machineにアクセスするには、クライアントのDockerの設定で、参照先が作成したDocker Machineを向くようにします。
以下、参照先変更手順になります。

Docker Machine設定情報をコピー

Docker Machineを作成すると、docker-machine createを実行したPCの下記ディレクトリに、作成されたDocker Machineの各種情報が保存されます。

  • ~/.docker/machine/machines/<マシン名>

そのうち、Dockerにアクセスするために必要なファイルは

  • ~/.docker/machine/machines/<マシン名>/ca.pem
  • ~/.docker/machine/machines/<マシン名>/cert.pem
  • ~/.docker/machine/machines/<マシン名>/key.pem

の3つで、これを新しいクライアントに、3つが同じディレクトリに置かれるようコピーします。

Docker環境変数の設定

dockerコマンドがどのマシンのDockerを見に行くかは、コマンド引数もしくは、環境変数によって設定できます。
ここでは環境変数による設定を紹介します。

下記のようなシェルスクリプトを作り、source ./change_docker_machine.shで環境変数をセットして切り替えます。
ローカルのDockerに戻すには、source ./change_docker_default.shで環境変数を削除します。

change_docker_machine.sh
#!/bin/bash
export DOCKER_HOST=tcp://<マシンのIPアドレス>:2376
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=<コピーした[ca.pem][cert.pem][key.pem]が置いてあるディレクトリ>
change_docker_default.sh
#!/bin/bash
unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_CERT_PATH

利用例

Dockerを切り替えることができると、ローカルのDockerで作業するのと同じ感覚で、サーバーのDockerが操作できるようになります。

例えば、ローカルで作ったDockerfileをサーバーにアップする際

  1. Dockerfileと一連のファイルをサーバーにアップ
  2. サーバーにログインして Docker コマンドを実行

といった作業は必要はありません。
単にローカル上で Dockerの 接続先をサーバーに変更して、Docker コマンドを実行するだけでサーバーのデプロイが完了します。

また、docker-compose を使う際も同様で、Docker の接続先をサーバーに変更して、docker-compose upコマンドを実行するだけで、サーバーへのデプロイが完了します。

7
11
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
7
11