カテゴリー別アーカイブ: Docker

VagrantでDockerを使ってみて高速化のあれこれ

今までVirtualBoxは素のまま使っていたのですが、Vagrantを使うといいということを聞いて使ってみることにしました。

せっかくなのでDockerも使ってみようということで以下のサイトを参考にしてインストールしてみました。

VagrantとDockerについて名前しか知らなかったので試した

やってみた結果は、とてもすんなりできました。ありがとうございます。

でも、なんかインストールに時間がかかるのです。VagrantのゲストOSの元となるboxファイルは、自分のC:\Users\(your name)\.vagrant.d\boxesというフォルダに保存されます。ですので、一度ダウンロードしてしまえば2度目からはとても速くゲストOSが出来上がります。

でも、そのときにDockerをセットアップしようとprovisioningに加えると、ゲストOSを作り直すごとにインターネットからDockerが使うファイルをダウンロードします。速度が2Mbpsくらいしかでなくてプロビジョニングが終わるまで10分くらいかかります。DockerをDockerは速いということが言われていますが、Docker自身のセットアップは時間がかかるのですね。

これを解決するため、CocPxoryというプロキシサーバーをつかってみたりしました。でも、httpではなくhttpsでダウンロードしようとするのでなかなか難しいです。

結局、こちらを参考に、Ubuntuをインストールするときはaptのソースリストを変更して、日本のサーバーからダウンロードするように変更しました。

ただ、ソースのリスト先がus.archive.ubuntu.comではなく、archive.ubuntu.comでした。また、ubuntuをmirrorしているところから速いのを選びました。

また、vagrant-cachierというプラグインが少し速くしてくれました。これを使うときの注意点は、vagrant-cachierは、/var/cache/apt/archivesを/tmp/vagrant-cache/aptにシンボリックリンクすることで、ホストのフォルダC:\Users\(your name)\.vagrant.d\cache\(box名)を保存先にしています。そのため、vagrant-cachierを使ったままVagrantfileから設定を削除したり、プラグインをvagrant plugin uninstallで削除してしまうと、/var/cache/apt/archivesのリンクがそのままになってしまうため、apt-getが動かなくなってしまうことです。

Vagrantfileは、こんな感じ。

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"

  config.vm.provision "shell", inline: <<-SHELL
    # aptのソースファイルを書き換え
    sed -i s%archive.ubuntu.com/ubuntu%ftp.jaist.ac.jp/pub/Linux/ubuntu/%g /etc/apt/sources.list
    apt-get update
  SHELL

  config.vm.provision "docker" do |d|
    # dockerに関する操作
    d.build_image "/vagrant", args: "-t kazu/my-bash"
    d.run "kazu/my-bash", args: "-d -t -v /vagrant:/tmp/shared"
  end

  if Vagrant.has_plugin?("vagrant-cachier")
    config.cache.scope = :box 
  end
end

Dockerfileは、次のようにしました。

FROM ubuntu:xenial

MAINTAINER kazu

CMD ["/bin/bash"]

これでvagrant upするとゲストOSが立ち上がります。その中で、Dockerが動いています。

一度Vagrantのboxがダウンロードされると、プロビジョニングは4分ほどで終わります。なんとか待っていられるかな。