長らく Docker を試してみたかったのだけど、仮想マシンでDockerを試すのもなんだかという気がしていたし、Docker for WindowsはHyper-Vを使うけどウチの環境はVMware WorkstationでVMがたくさんあったりするので試せないなあと思っていました。
A5:SQL Mk-2のテスト用データベースをVMware上のLinux (Cent OS 7)に移行したのを機に仮想マシンでDockerを導入したのでいろいろ調べてみると、なんだかDocker for WindowsとVMware上のLinuxの組み合わせができそうな気がしてきたので、試してみました。
通常Linux上ではdockerコマンドからソケットまたはTCPプロトコルでdockerdデーモンと通信を行い、コンテナを操作します。
Docker for Windowsでは、docker.exe(Windowsの実行ファイル)からHyper-V上で動作するMobyLinuxVMという名前の仮想マシン上のdockerdデーモンと通信を行い、コンテナを操作します。
ならば、Hyper-Vなしで、Docker for Windows のdocker.exeとVMware上のLinuxのdockerdデーモンと通信させれば行けるはず。
以下手順です。
■VMware Workstation上にCent OS 7を導入
説明は省略します。
■Cent OS 7 上にdockerを導入
そういうブログ記事とかは多いと思うのでさらっと。
1 |
# yum install -y yum-utils device-mapper-persistent-data lvm2 |
1 |
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo |
1 |
# yum makecache fast |
1 |
# yum install docker-ce |
1 2 3 4 5 6 |
# vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd ↓ ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 # systemctl daemon-reload |
1 2 |
# firewall-cmd --add-port=2375/tcp --zone=public --permanent # firewall-cmd --reload |
1 2 |
# systemctl enable docker.service # systemctl start docker.service |
1 2 3 4 5 6 7 |
$ sudo usermod -aG docker matsubara $ export DOCKER_HOST=tcp://0.0.0.0:2375 $ vi ~/.bash_profile # 最後に以下を追記 export DOCKER_HOST=tcp://0.0.0.0:2375 |
■Windows端末から名前解決できるようにする
Windows端末から名前解決できるようにするためsamba(のnmb)を導入する。
1 |
# yum install samba -y |
1 2 3 |
# vi /etc/samba/smb.conf [global]にnetbios nameを追記 netbios name = VMCentOS |
1 2 |
# firewall-cmd --permanent --zone=public --add-service=samba # firewall-cmd --reload |
1 2 |
# systemctl enable nmb.service # systemctl restart nmb.service |
■Docker for Windowsからのアクセス
普通にDocker for Windows をダウンロードしてインストール
https://docs.docker.com/docker-for-windows/install/
Get Docker for Windows [Stable] からダウンロードしてインストールした。
以下のコマンドを実行して、自分のユーザーがdocker-usersグループに含まれているか確認する。
1 |
> net localgroup docker-users |
自分のユーザーがdocker-usersグループに含まれていない場合、以下で追加
1 |
> net localgroup docker-users matsubara /add |
再起動すると Hyper-Vが稼働していないとか言ってくるが無視する。
(OK/キャンセルだが、OKしてはいけない…と思う)
Ctrl+Shift+Escでタスクマネージャーを起動し、「スタートアップ」タブを選択
Docker for Windows が有効になっているので無効にする。
コルタナまたはWin+Rから「Control」でコントロールパネルを起動
コントロールパネル > システムとセキュリティ > システム …を選択
左ペインの「システムの詳細設定」
[環境変数(N)…]ボタン
ユーザーの環境変数・システムの環境変数のどちらでも追加
変数名(N): DOCKER_HOST
変数値(V): tcp://VMCentOS:2375
これで、コマンドプロンプトを起動すれば、dockerコマンドが使えるようになっているはず。
Docker for Windows のサービスも止める (2018/01/08追記)
管理者モードでコマンドプロンプトを開き、scコマンドを使って「Docker for Windows Service」 を「手動」に変更する
1 |
sc config "com.docker.service" start=demand |
看過できない疑問
これ、セキュリティ(Dockerのアカウント)ってどうなってるんだろう?dockerdの-Hオプションで接続元IPをある程度制限できそうだけど…分かったら追記します。