Docker Machineで既存サーバにDockerホストを構築する
Docker MachineはDockerホストを構築するためのツールです。VirtualBoxやVMwareなどの仮想化基盤、AWSやGCEなどのクラウドに対応しており、環境構築からDockerクライアントの接続設定まで自動的に行ってくれます。これによって気軽にDocker環境を調達できるようになります。
既存サーバにDockerホストを構築する
Docker Machineでは、ドライバにGenericを指定することで、既存のサーバにDockerホストを構築することも可能です。Genericを指定したときにどんなコマンドが実行されるのか調べてみました。
下記のコマンドを実行すると、指定したサーバに対してSSH経由で一連の環境構築コマンドが実行されます。
docker-machine -D create --driver generic --generic-ip-address somehost.example.org --generic-ssh-user someuser somehost
引数にはSSH先のIPアドレス、ポート、ユーザ名、秘密鍵を指定できます。詳細は Docker MachineドキュメントのGenericセクション に説明があります。
デバッグオプション -D
を指定するとログが表示されます。-D
を指定しないと、どんなコマンドが実行されているのかまったく表示されないので気持ち悪いですね。
Genericで実行されるコマンド
今回はCentOS 7で確認しました。
大まかには下記が実行されるようです。
- OSバージョンのチェック
- ホスト名やhostsの設定
- Dockerのインストール
- Dockerサービスの設定と有効化
- TLS証明書の設定
exit 0 # OSバージョンのチェック cat /etc/os-release # ホスト名やhostsの設定 sudo hostname somehost && echo "somehost" | sudo tee /etc/hostname if grep -xq 127.0.1.1.* /etc/hosts; then sudo sed -i 's/^127.0.1.1.*/127.0.1.1 somehost/g' /etc/hosts; else echo '127.0.1.1 somehost' | sudo tee -a /etc/hosts; fi # Dockerのインストール sudo yum -y update sudo yum install -y --nogpgcheck https://get.docker.com/rpm/1.7.0/centos-7/RPMS/x86_64/docker-engine-1.7.0-1.el7.centos.x86_64.rpm # Dockerサービスの設定と有効化 sudo systemctl daemon-reload sudo systemctl restart docker sudo systemctl enable docker sudo docker version sudo mkdir -p /etc/docker sudo systemctl stop docker # TLS証明書の設定 printf '%s' '-----BEGIN CERTIFICATE----- -----END CERTIFICATE----- ' | sudo tee /etc/docker/ca.pem printf '%s' '-----BEGIN CERTIFICATE----- -----END CERTIFICATE----- ' | sudo tee /etc/docker/server.pem printf '%s' '-----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY----- ' | sudo tee /etc/docker/server-key.pem # Dockerサービスの設定と有効化 printf "[Service] ExecStart=/usr/bin/docker -d -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver devicemapper --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic MountFlags=slave LimitNOFILE=1048576 LimitNPROC=1048576 LimitCORE=infinity " | sudo tee /etc/systemd/system/docker.service sudo systemctl daemon-reload sudo systemctl start docker
TLS証明書まわりの面倒な設定が自動化されるのはうれしいですね。ただ、何の説明もなく、勝手に /etc/hosts を触ったり yum install されるのはいただけないですね。どんなコマンドが実行されるのか公式に公開されるといいなーと思います。