RaspberryPiでDockerを使ってみた話

Raspberry PiにDockerを入れて遊んでみたのでその感想

以前の記事でRaspberry Piでブログを作ろうとしてやめたみたいな話をちらっとしたんですが, それについて具体的に書きたいと思います.

Raspberry Piとは

Raspberry Piは英国のRaspberry Pi財団によって設計された, ARMプロセッサのシングルボードコンピュータです. 「コンピューターと電子工作を世界中の人の手に」という理念の元に開発されているため, 価格が安く, インターフェイスが充実していることが特徴です. ストレージはMicroSDカード, 映像出力はHDMI(テレビにつなぐことが前提らしい), 電源供給はUSB端子, 入力インターフェイスはUSBポートからと, 一般家庭にあるもので済ますことができるので, 本体を買えばすぐに使い始めることができるというのが売りのようです (個人的にはテレビや外付けキーボード, マウスがない家も普通にあるのではと思ってしまいますが).

そのため, 比較的初心者でも手が出しやすく, 色々遊べるので人気のようです. インターネットを漁れば, 「Raspberry Piで〇〇やってみた!」といった記事はたくさん見つかりますし, 入門書もたくさん売られているようなので, ちょっとものつくりやってみようという人には丁度いいんじゃないでしょうか.

僕も価格の安さと使っている人の多さに惹かれ, とりあえずサーバー立てようかなくらいの気持ちでRaspberry Piを購入しました.

サーバー入門

とりあえずRaspberry Pi上で何かサービスを動かして, それを外部からアクセスできるようにすればサーバー完成です.(雑)

例えば, Webサーバーなら, クライアントからのリクエストに応じてWebページを配信するわけですし, メールサーバーならメールを送信したり受信したりする機能を提供します.

これらの機能を提供するために, サーバーとなるコンピュータに様々な設定をしたり, サーバーアプリを導入したりします.

なので, やりたいサービスに応じてサーバーアプリをインストールしていけばいいのですが, 複数のアプリを立ち上げると重くなったり, アプリ同士が干渉してしまう可能性があります. そのため, 最近はDockrという仮想環境にサーバーを構築するのが流行っている?ようです.

Dockerとは

DockerはDocker社が開発しているコンテナ型の仮想環境を構築するためのプラットフォームです.

仮想環境というと, よくVirtualBoxなどの仮想マシンが挙げられますが, 仮想マシンはホストマイン上でゲストOSを起動してその上でミドルウェアを動かしているのに対して, DockerはカーネルはホストOSを利用し, プロセスやユーザーなどを隔離することで, 軽量で高速であるという特徴があります.

また, Dockerはミドルウェアのインストールや環境設定をコード化して管理しているため, スクラップ&ビルドが容易で, 作成した環境の移行など簡単にできるという利点があります.

今回自分は, 将来的にサーバーを移行することも考えて, Raspberry Pi上にDockerをインストールし, そこにサーバアプリをインストールすることにしました.

Raspberry Piのアーキテクチャ

突然ですが, コンピュータには命令セットアーキテクチャというものがあります. これはソフトウェアとハードウェア間のインターフェイスの定義です.

よほど変な人でなければ, 普段使うPCにはIntelやAMDなどのCPUが乗っていることかと思います. これらのCPUのアーキテクチャはx86系と呼ばれています.

一方で, Raspberry PiのアーキテクチャはARMと呼ばれるものです.

x86とARMは処理方法が異なるので一般に互換性はありません.

そこで, Raspberry PiでDockerを使用するためには, ARMに対応したものを導入していく必要があります.

Raspberry PiにDockerを入れる

先程述べた通り, アーキテクチャが普段使うようなPCとは異なるので, Raspberry piにはARM用のDockerを入れなくてはなりません.

とはいえ, コマンドで一発で入るのでそこまで大変ではありません. やってる人はたくさんいるので, 「Raspberry pi Docker」あたりで調べるとたくさん情報が出てくると思います.

公式ブログを参照するのがいいですかね. ↓公式ブログのDocker入れる記事

https://www.raspberrypi.org/blog/docker-comes-to-raspberry-pi/

要するに

curl -sSL https://get.docker.com | sh

でおしまいです.

docker -v

でバージョンが表示されたら入っています.

Raspberry Piでdocker-compose

docker-composeってなんやって人もいると思いますが, docker使ったことない人にうまく説明出来る気がしないので割愛します. まぁDockerで複数のコンテナを建てていると使いたくなってくる機能です. 気になる人は丁寧に説明してある記事がネットにはいっぱいあると思うので調べてみてください.

で, x86系のアーキテクチャで動いていれば, シュッと入るんですが, ARMの場合は入りません. なので, 使いたければ自分でコンパイルする必要があります.

自分は以下のサイトを主に参考にしました.

https://qiita.com/hawk777/items/467ea47377e69089de5b

ビルドに1時間位かかるし, 普通にビルド失敗しまくったので, ネットで片っ端からできそうなことを調べて色々やってどうにか入りました. 割と環境依存な部分が多そうなのでエラーメッセージが出るごとにggって解決していくしかないのかなぁ. 残念ながら何やったかと何が意味があって何が意味なかったか覚えてないので, 記録には残しません.

実際に運用してみる

とりあえずWordPress入れてみたりしました. docker-compose使うとサクッと建って良かったです.

次に, growiを入れようとしました. growiというのは, Markdown形式で書けるWikiシステムです. というか自分のgrowiを持ちたかったからサーバー建てようとした部分が非常に大きい.

で, 失敗しました. 未だに成功していません. まぁ結局ARMだからエラーになるところがあってそれを逐一解決していかないといけないのでしんどい………

ちなみに, 試しに手持ちのUbuntuマシンではシュッとしたらシュッと建ちました. やっぱ世の中はx86系なのか………

結局鯖立ててみた感想

いやぁ, Raspberry piでサーバーを建ててみたんですが, まともに運用しようと思うと相当しんどいですね………

Docker-compose入れるためだけに1週間位溶けたのが相当しんどかったし, 同様の作業がこれからも続いていくと思うとやっていられない……

というか環境依存を解消するためのDockerなのに全然環境依存解消できんやんけ(まぁx86とARM間に互換性がないので仕方ないんだよなぁ)

僕としては自分のUbuntuマシンとかで検証してRaspberry piに移して実際に使ったり, サーバー借りたらRaspberry piから移行したりすることを考えていたのでだいぶ想定外だった感じでした.

あとRaspberry pi, 試行錯誤したりビルドしたりするにはマシンスペックが貧弱すぎる………

みたいな気持ちになりました. ネットにもおんなじような気持ちになった人がいて感動してしまったのでその記事を貼っておきます.

https://www.kwbtblog.com/entry/2018/12/12/014403

まぁ, ちょっとホームサーバー作って遊ぶくらいなら安いしすごい良いと思うんですが, まともにサーバーやるなら大人しくx86系のマシン用意する方が良いと思いました. アーキテクチャに詳しい人とかなら苦にならなかったりするのかなぁ.

また時間に余裕ができたらx86マシンを用意してサーバーを運用してみようと思います.

参考

https://www.raspberrypi.org/about/

https://blog.rogiken.org/blog/2018/12/16/猫でもできるsomething/

https://knowledge.sakura.ad.jp/13265/

一般学生

NHKロボコンやってた

comments powered by Disqus