「Docker」カテゴリーアーカイブ

コンテナからSR-IOVデバイスを利用

コンテナと聞くと、ソフトウェア的にホストと環境を分離する技術だと思っていました。ホストの環境をただコピーして利用しているだけだと。

けれど、次の記事でSR-IOV対応デバイスを利用できることが紹介されています。

第539回 LXDのコンテナからSR-IOV対応デバイスを利用する

SR-IOV対応デバイスであるイーサネットカードにVirtual Functionを設定してそれを利用するのだそうです。

2つのコンテナから利用していることも驚きでした。SR-IOVは、ゲストOSからデバイスを占有する方法じゃなかったのでしょうか。

Dockerからだとpipeworkというのを使うとできるらしいです。

Host with SR-IOV NIC - Docker containers to use each VF individually

性能もオーバーヘッドなく使えているみたいですね。

ARM用のDockerイメージをQEMUを使って作る

ARM用のDockerイメージを作る時に、QEMUのqemu-user-staticを使ってCPUエミュレーションを行う方法が紹介されています。

Jetson 上で Docker イメージをビルドするのが辛かったので EC2 上にビルド環境を作った

ARM用のバイナリを作る時に、ARM上のシステムでは時間がかかって仕方ないため、x86_64上のシステムで作ってしまおうということですね。

エミュレーションでどれくらいのスピードが出るのか使ったことがないのでわかりませんが、ARMネイティブで作るよりはいいみたいですね。

QNAPの仮想化技術がいいかも

ネットワークストレージQNAP TS-231+を使って、LAMPサーバーを立てると簡単で便利という話が載ってます。

2017年を振り返る。前半はAMD vs Intel、後半は2018年に向けての助走の年!?

仮想化の方法としては、LXCとDockerを組み合わせているそうです。メジャーなソフトであればDockerのイメージがあるのでそれを使うようです。

QNAP TS-231+はメモリが1GBしかないのですが、使いものになるようです。コンテナ型の仮想化のいいところですね。

気をつけないといけないことは、QNAP TS-231+はCPUがARMなので、ARM版のDockerイメージがないと使えません。それと、Dockerのイメージを作ってもVPSやクラウドに展開することができません。Dockerを使っていることで、安定性が気になります。開発目的なら問題ないでしょうか。

Amazonで調べたら、QNAP TS-231Pという方が新しいようです。QNAPのサイトを見るとContainer Stationも使えるようです。久しぶりに欲しいなと思ったのですが、最近プログラム開発をやっていないですし、しばらく様子見ですかね。自分で動かして安定性が知りたいですね。

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分ほどで終わります。なんとか待っていられるかな。