Author Archives: n.y

2017-09-26

Alpine Linuxのその後、そしてLinuxKitとは?

GMOアドマーケティングSSP開発グループのn.yです。

前提

以前コチラの過去記事にてDockerによるローカル環境構築に関する記事を書かせて頂きましたが、今回もDockerの環境構築とりわけAlpine LinuxLinuxKitを巡る事情に関してお話できればと思います。

まずAlpine Linuxに関して軽くおさらい

  • 軽量なLinux OS(ベースイメージは約5MB(ちなみにUbuntuだと100MB以上))

→ 他に同様の軽量なLinux OSで代表的なものにCoreOS, RancherOS, Red Hat’s Atomic Host など色々。

  • DockerのオフィシャルのイメージをUbuntuからAlpine Linuxに置き換えている

ぐらいを押さえておくと良いです。要は軽量Docker推しのLinux OSだということです。

その後、Alpine Linuxはどうなったのか?

早速、主要言語実行環境&Webサーバに関して、オフィシャルのイメージがAlpine Linuxへどれだけ置き換えられているのかをDocker Hubにて調べてみました(2017/08/21時点)

latestタグに関してのみ調査(docker pullコマンドでlatestタグはデフォルトで使用される為、Docker側が本当に現状で推奨しているかの判断の基準にしてみました)

詳細はコチラのDockerの公式ドキュメントを参照

それでは行ってみましょう!

まずはPythonから。

latestこの並びにある様ですね。

んん。。?jessieの並びにありますね。これはもしやDebianをベースにしているのでは?

試しにDebianのバージョンを下記コマンドで調べてみます。(コンテナが既に立ち上がっている状態)

Debianベースなのは間違いないですね。多分無いとは思いますが、下記コマンドにてAlpineベースなのかをチェック。

残念ながらどれもダメですね。と言うことはつまりデフォルトではPythonの実行環境は現状Debianベースということですね。

ちなみにDockerfileの中身も確認してみます。

やはりDebianベースですね。

少し嫌な予感がしますね。幸先が悪い予感が。。

では続けて、他の主要言語の実行環境も調べてみましょう。

  • Ruby やはりlatestタグはjessieの並びからのDockerfileもやはりDebianベース
  • PHP これまた同様にDebianベース
  • Apache(httpd) こちらも同様にDebianベース

最後にこちらも

  • Nginx やはりDebianベース

調査結果

今回調査したものは全てDebianベースとなっていました。

つまり現状ではDebianベースがまだデフォルトだけど、Alpineベースもあるよって感じのスタンスみたいです。

続いてLinuxKitについて

そういった状況の中今年4月にアメリカはテキサスで開催されましたDockercon 2017にてLinuxKitなるものが発表されました。

内容を見てみると、コンテナを動かせるようにすることに特化したツールらしくWindowsだったりmac OSなどのネイティブではLinux環境を持たないところでもコンテナの実行環境を構築することが可能になり、例によって軽量で約35MBとのことです。

これはかなり画期的なことで、Linux環境を雑に言えばどこにでも構築できる様になったことを意味します。

そしてこのプロジェクトにDocker社を始め、Intel社やARM社だったり各クラウドプロバイダーも共同で参加しているとのことです。

まとめ

ただし注意して欲しい点としてはAlpine LinuxLinuxKitは似て非なるものです。

Alpine Linuxはあくまでも軽量なLinux OSであり、LinuxKitはコンテナプラットフォームを構築することに特化したツールだからです。

この点に気をつけて頂ければと思います。

LinuxKitを使って環境構築してみたい方は下記のGitHubのページのREADMEを是非ご参考下さい。

https://github.com/linuxkit/linuxkit

以上、Alpine Linuxのその後、そしてLinuxKitの位置づけについてのお話でした。

 

2016-11-10

Virtualboxって必要ですか?

GMOアドマーケティングSSP開発グループのn.yです。

早速ですが、皆さんはローカル開発環境をどの様に構築していますでしょうか?
Vagrant + Virtualboxを使用して仮想環境を作って開発してみたり、
XAMPP(MAMP)を使用してみたり、
はたまたそんなの面倒だと本番を直接イジる強者など他にも様々な方がいらっしゃるかと思います。

そこで今回はDockerによるローカル開発環境構築に関してお話出来ればと思います。
(Docker自体がどの様なものかを知りたい方はコチラのページなどが簡潔にまとまっていて分かりやすいですので是非)

まずDockerを使ってローカル開発環境構築すると何が美味しいの?っていう話をします。

  • より本番に近い環境(むしろ本番そのままの環境)をローカルに構築出来る(これは非常に有り難い)
  • 一度再現した環境は何度でも再現可能(おまけに一度作った環境は更に速く構築可能です)
  • クラウドのサービスを利用しているとより便利さを実感できる(AWS, GCP(個人的はココが1番シンプルで相性良い気がする), Azure, Bluemixなどなど)
  • DockerのGitHub的な存在であるDocker Hubhttps://hub.docker.com/)が存在する(様々なイメージが準備されていてそれぞれのイメージのドキュメントも充実しています)

などなど。

ではマズい点、美味しくない点にも行ってみましょうか。

  • そもそもDocker自体の学習コストが多少なりともかかる(新しいものはどれもそうですけど)
  • Dockerはコンテナという概念を利用するので、Dockerに合わせた環境構築が必要(その為、既存のプロジェクトをDockerに置き換えようとすると色々とハマる)

といったところでしょうか。つまり使って損はしませんし、各社クラウドのサービスを見てると明らかにDockerを前提とした方向へ流れてる気がします。
と前置きをしたところで、タイトルのアレですよね。Virtualboxって必要ですか?って内容に入りたいと思います。
結論、Dockerでローカル開発環境するにあたっては必要ございません。と言うより必要なくなりました。

以前まではDockerで環境構築する際、MacであろうがWindowsであろうがローカルにLinux環境を構築する為にVirtualboxを内部的に利用していました。
なのでDocker Toolboxをダウンロードすると一緒にVirtualboxもダウンロードされる仕様でした。
勿論この状態でも使用可能ですし、開発する上では全然問題ありません。

では何が問題なのでしょうか?

そうです。スピードです。スピード大事ですよね。スピード出ないとイライラしますよね。

Docker Toolboxだと内部でVirtualboxを使用している為、環境の立ち上げるのにそこそこの時間を要しました。(PCのスペックにもよると思いますが)

そこでこれを解決すべく現れた救世主がDocker for Mac(or Windows)https://docs.docker.com/docker-for-mac/)です!(これからはこちらがメインになっていく気がします)

これダウンロードして使ってみると実感して頂けるかと思うのですが、スピードはかなり速くなってます。おまけにPC起動と同時にDockerが使えるようになっているのでストレスフリーです。
※ちなみにWindowsだと10以降のようなので、残念ながらその方々はDocker Toolboxを使って下さい。

Docker for Mac(ここではMacを中心にお話いたしますが、基本的にはWindowsでも同じです)ですが、こちら何故スピードが速いかと言いますと、Yosemite以降で導入されているネイティブの超軽量の仮想化ソフトウェア(xhyve)を利用できるからなんです。

つまり、Virtualboxの代わりのものがあるから、わざわざ重たいVirtualboxを間に挟む必要が無いということなんです。

では試しにDocker for Macを使ってPHPで自身の設定を出力してみましょう。

①まずはDockerfileを作成します。

一応中身を簡単に説明しておきますと、PHP7.0とApache連携済みのイメージ(このイメージだとLinuxのOSはDebian)から(お手軽なので)生成しています。UbuntuだったりCentOS、もしくはDockerゴリ押しの軽量イメージであるAlpine Linuxからも勿論環境を構築可能です。

そしてCOPYでsrc/ディレクトリの中身を/var/www/html/にコピーします。そのままですね。

②設定出力用のディレクトリとPHPファイルを作成

任意の場所でsrcディレクトリを作成し、その中でtest.php(設定出力用)を作成

test.phpの中身は下記の通り。

現在、ディレクトリ構成はこの様な感じになっているはずです。

③ではビルドしてデプロイしてみましょう!

どうやら順調に起動しているようです!!

それではlocalhost/test.phpでブラウザからアクセスしてみましょう。

下記の様に設定一覧が表示されれば成功です!
docker_localhost

簡単ですよね?速いですよね?
まだまだ自分自身使いこなせていない箇所が多々ありますが、結局はLinuxの知識がある方が使えば「なるほど。なるほど。」と思える箇所が多々あるハズだと思います(自分はここら辺の知識が不足していたので初めは少し戸惑いました。)

以上、Virtualbox一先ずローカル開発環境では要らないよね?ってお話でした。