コンテナ管理に何を使うか
雑記とか感想とか主観の記事です。
みなさんはDockerを使っているでしょうか。
世の中のクラウドサービス然り、開発然りコンテナ前提の世の中になりつつありますが、それを簡単に利用できるのがDockerです。
いまやLinuxのみならずWindows、Mac問わず様々な環境で利用できるDockerですが、欠点が一つだけあります。
それはDocker Desktopが非常に重いということです。(主観)
しかし改善してきているようです。
読み書きの速度については改善しつつある
そもそもDocker Desktopが重いのはバックエンドの設定が間違っていたり、マウント周りが上手くできていないことが原因なことが多いのですが、そのあたりを簡単に解決(緩和?)できるのがファイルシステムを変更するということです。
あくまで使い方(ソースの管理場所とか)を一切変えずにそれを実現するにはVirtioFSというファイルシステムを利用すれば対仮想環境とのファイルの共有が高速化します。
遅いともっぱら噂だったMacで利用する場合でもDocker Desktopの設定でファイルシステムを変更すればそれだけで恩恵を受けることが出来て高速化させることができます。
(20%前後高速化するみたいな話だったと思いますが詳しいことは把握していません。)
ただ、最近のデバイスは処理速度がとても早いのでもはや気にしなくて良いのかもしれません。
Windowsの場合はWSL上のファイルをマウントしたら早くなります。Ubuntuに没頭せよ。
Docker Desktopは便利
とは言えDocker Desktopはとても便利です。
特に初心者にもおすすめできる機能としてダッシュボード機能があります。
まったくDockerを知らない人が見てもコンテナを動かしてみたり止めたりが可能です。
他にもログを見てみたり色々できてとても便利です。
代わりにPortainerを使う
Portainerを乱暴にざっくり言えばDocker Desktopに有る機能をブラウザ経由で見られるようにできるやつです。
Docker Desktopとの違いは動作が軽く見やすいということです。
それにリソースを集中させられます。
業務では使用したことがないので個人利用レベルのお話しか出来ないのですが、個人レベルであればDocker Desktopよりも使いやすいのではというのがもっぱらの感想です。
つまり、そもそもの使い方としてはコマンドラインで開発、実行したdocker-composeから色々起動したコンテナを管理したいときにDocker Desktopを利用すると思っているので、それが見やすいPortainerのほうが良い感じなのではというところです。
Portainer内でコンテナを管理して、ターミナルに直接入ったり色々できるのがとても便利で
例えばプログラミングを教えているときにここにアクセスして開いてってやれば自身の環境を提供できるのが強いです。
(Portainerでユーザー管理ができて権限を降ることでアクセス境界を制御することができます。LDAPやSSOも対応しています。)
※例はテキトーなのであんまり参考にはなりません。これをするくらいならCode SandboxやGoogle Colaboratoryみたいなものを使った方がいい気がします。
ちなみにPortainerは複数ホストのコンテナを一元的に管理することができます。
興味があればDocker Swarmで調べてみると良いと思います。
Docker Swarmを使って管理していくことになります。
ですのでたくさんのホストを持っている大きな会社とかでも使いやすいんじゃないかと思います。
Docker Desktop環境でも利用できる
もちろんDocker Desktop環境でもPortainerを利用することができます。
Docker Imageで提供されているので、気になった人は見てみると良いかもしれないです。
導入も簡単です。
PortainerでShellを開く
Portainerでは選択したコンテナに気軽に入ることが出来ます。
簡単な確認や修正をブラウザで試せるようになるので使いやすい反面、ブラウザのショートカットが反応してめんどくさいことがあります。
例えばVimのショートカットでウィンドウを移動したり閉じたりするときにCtrl+wをしたりすると思いますが、Chromeではタブを閉じるショートカットですのでこれが反応してしまいます。
(ちなみにCtrl + Shift + wでもとに戻せます)
ですので私はコンテナに入るときはコマンドラインで作業しています。
Multipass経由でDockerとPortainerを使用する
私がDockerを使用する際に使っているのはMultipassです。
$multipass launch docker
とするだけでPortainerを走らせた状態まで持っていってくれます。
さらにホストマシンのDockerの代わりにMultipass内でDockerを動かしてくれてそれをローカルで実行できるところまで自動でやってくれます。
(この辺は好みが分かれるかもしれないですね)
唯一の問題点としてUbuntuではsnap経由でMultipassを入れることになるのですが、TAB補完が使えません。
私は気軽に使えるようになるので良しとしていますが気になる方には向かないかもしれません。
強いて言えばメモリやストレージの割当周りがめんどくさいかもしれませんが、個人で使う分には不足はありません。
あとから変更もできますしね。
そんな感じのDocker環境で過ごしている私なのですが、こういうのってどういう運用が正解なのかが気になる今日この頃なのでした。