お恥ずかしながら未だに 32bit PC を使っておりまして、なんだかよく分からんけど流行ってる Docker をちょっと使ってみようと思ったらそもそもインストールすらできない状況で行き詰まって息詰まってたんですが、Vagrant (+VirtualBox) を使えば 32bit PC でも Docker を使えるようなので試してみました。
ただ、少し前なら Vagrant の Docker プロビジョニングで簡単に Docker が使えたようなんですが、Docker の方が Docker CE と Docker EE に分かれてしまったせいでこの方法が使えなくなったので、もう少しインストールに手間がかかります。
にある方法でインストールするのですが、自分の環境では書いてある手順通りにしてもうまく動かなかったので、少し Vagrantfile を書き換えます。
【この記事の内容】
使用するツール
Vagrant + VirtualBox
まず Vagrant + VirtualBox で 32bit PC 上に 64bit 環境を作るのですが、Windows 10 では Vagrant 2.x 系が動かなかったので*1、ここでは Vagrant 1.x 系の(現時点での)最後のバージョンと、それに対応する VirturalBox のバージョンである- Vagrant : 1.9.8
- VirtualBox : 5.1.30
を使います。 それぞれ以下のサイトから Windows のインストーラーをダウンロードできます:
- Vagrant : こちらの vagrant_1.9.8_i686.msi
- VirtualBox : こちらのサイトで VirtualBox 5.1.30 → Windows hosts → x86
VirtualBox のインストールには PC の再起動が必要だったかと思いますが、インストールの詳細は各サイトを見てください。
Git for Windows
次に、GitHub リポジトリを clone するために、Git for Windows もインストールします。 Git for Windows はからダウンロードできます。 Vagrant のプロビジョニングには Bash を使いますが、この実行には Git for Windows に付属している Git Bash を使います(そのせいでちょっと手間が増えるのですが ^^;)。
Docker CE のインストール
GitHub リポジトリ redgeoff/docker-ce-vagrant の clone
Docker CE をインストールするための Vagrantfile やプロビジョニング用のシェルスクリプトは以下の GitHub リポジトリにおいてあるものを使います。 Git Bash を起動して適当なディレクトリでこのリポジトリを clone し、そのディレクトリへ移動します*2:
$ git clone https://github.com/redgeoff/docker-ce-vagrant.git $ cd docker-ce-vagrant
この GitHub リポジトリの README によると、あとは「vagrant up」すれば Docker CE がインストールされると書いてますが、自分の環境ではうまく動かなかったので少し修正を加えます。
Vagrantfile の修正
Vagrantfile を適当なエディタで開いて、以下の修正を行います。まず指定されているボックスが現時点で動かないので、このボックス指定をコメントアウト(もしくは削除)して、不安定としてコメントアウトされているボックス指定 ubuntu/xenial64 のコメントを外します*3:
config.vm.box = "ubuntu/xenial64" # config.vm.box = "https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-vagrant.box"
次に、これは Git Bash が原因のようですが、プロビジョニングのシェルスクリプトから他のシェルスクリプトを呼び出すとコマンドを見つけられずに失敗するので、bootstrap.sh の呼び出しを以下のように書き換えます:
# config.vm.provision :shell, path: "bootstrap.sh" config.vm.provision :shell, path: "ubuntu.sh" config.vm.provision :shell, path: "docker.sh"
bootstrap.sh は内部で単に ubuntu.sh, docker.sh を呼び出してるだけなので、実質的には何も変わってないんですけどね・・・ この修正後には bootstrap.sh は必要なくなるので削除してもかまいません。
最終的な Vagrantfile は(コメント行を省略すれば)以下のようになります:
Vagrant.configure("2") do |config| config.vm.box = "ubuntu/xenial64" config.vm.network "private_network", ip: "192.168.50.11" config.vm.provider "virtualbox" do |v| v.memory = 1024 v.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 1000 ] end config.vm.provision :shell, path: "ubuntu.sh" config.vm.provision :shell, path: "docker.sh" end
VirtualBox の設定箇所はなくても動きましたが、一応そのままにしておきます。
vagrant up !
以上の修正を行うと Docker CE のインストールができるようになったので、Git Bash 上で「vagrant up」を実行します:$ vagrant up
長い長い処理の後、インストールが成功していれば「vagrant ssh」で仮想マシンにログインして
$ vagrant ssh Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-112-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 0 packages can be updated. 0 updates are security updates. *** System restart required *** vagrant@ubuntu-xenial:~$
「sudo docker version」を実行すると、インストールされた Docker CE のバージョンが表示されます:
vagrant@ubuntu-xenial:~$ sudo docker version Client: Version: 17.12.1-ce API version: 1.35 Go version: go1.9.4 Git commit: 7390fc6 Built: Tue Feb 27 22:17:40 2018 OS/Arch: linux/amd64 Server: Engine: Version: 17.12.1-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.4 Git commit: 7390fc6 Built: Tue Feb 27 22:16:13 2018 OS/Arch: linux/amd64 Experimental: false
ボックス ubuntu/xenial64 の不安定さなのか、自分の実行環境のしょぼさのせいなのか、しばしば上記の手順でインストールするのに失敗する場合がありますが、「vagrant up」し直すとうまくいくこともよくあります。 ただし、VirtualBox の仮想マシンが起動したままになっていることもあるので、「vagrant destroy --force」で仮想マシンを破棄*4しないとフリーズしたりするのでご注意を。
ボックスへのパッケージング
上記のプロビジョニングはかなりの時間を要するので、仮想マシンは破棄 (vagrant destroy) せずに停止 (vagrant suspend / vagrant halt) して使い回すのがいいと思いますが、別の仮想マシンで Docker CE を使いたい場合は Vagrant のボックスとしてパッケージングしておく方が楽だと思います。 ただ、仮想マシンの起動に失敗する頻度が妙に高いので、もう少し何らかの設定を追加しないといけないのかも知れません。ボックスへのパッケージングとボックスの追加
上記の方法で Docker CE のインストールに成功したら、仮想マシンから「exit」でログアウトしてvagrant@ubuntu-xenial:~$ exit logout Connection to 127.0.0.1 closed.
「vagrant package」で仮想マシンの設定をボックスとしてパッケージングします:
$ vagrant package ==> default: Attempting graceful shutdown of VM... ==> default: Clearing any previously set forwarded ports... ==> default: Exporting VM... ==> default: Compressing package to: C:/Users/???/package.box
作業ディレクトリに package.box が生成されたら、これを新たなボックスとして Vagrant に追加します。 ここではボックス名を「docker-xenial」とします:
$ vagrant box add docker-xenial package.box ==> box: Box file was not detected as metadata. Adding it directly... ==> box: Adding box 'docker-xenial' (v0) for provider: box: Unpacking necessary files from: file://C:/Users/???/package.box box: ==> box: Successfully added box 'docker-xenial' (v0) for 'virtualbox'!
ちなみに、ローカル環境に存在しているボックスは「vagrant box list」で確認できます。
他環境からのボックスの使用
上記のように追加したボックスは、他の Vagrant 環境から以下のような Vagrantfile で使用できます:Vagrant.configure("2") do |config| config.vm.box = "docker-xenial" end
もちろん、他の設定を書くこともできます。 「vagrant up」で仮想マシンを起動するなどの使い方も全く同じです。
まとめ
32bit Windows マシンで Docker CE を使う方法を見てきましたが、正直言ってまだ Docker 自体をほぼ使っていないので、いろいろ不具合があるかも知れません。 とはいえ、32bit マシンでとりあえず Docker を試してみることができるので、今後あれこれイジっていきたいと思います。ちなみに、この記事のインストール方法を試してから記事を書くまでに少々時間が空いたので、Vagrant の Docker CE プロビジョニングがどっかーに既に公開されているかも知れませんがあしからず。

- 作者: Adrian Mouat,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/08/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る