Dockerのメリット・デメリットとDockerを止めた理由
2021.09.27
WEBシステムには様々な開発方法があります。
その運用方法も多岐にわたっていて、どの方法でシステムを運用していくのかを選ぶのはエンジニアの経験や知識が頼りとなります。
今回は、システム開発でDockerを採用し、その後Dockerの使用をやめた体験談を記事にさせて頂きました。
Dockerとは
DockerとはDocker社が提供するコンテナ型の仮想環境のプラットフォームです。
仮想環境とは、OS上の別のOSをインストールして動作させる事ができる機能です。
WindowsやMac上にlinuxの環境を構築したり、linux上に別のlinuxの環境を構築したり等様々用途があります。
その中でも、Dockerはコンテナ型と呼ばれます。
他の仮想マシン(VirtualBox等)と比べ、コンテナ型の場合ホストマシンのカーネルを利用してプロセス等を隔離しています。
その為、軽量で高速に動作させる事が出来るのが特徴です。
Dockerのメリット・デメリット
Dockerのメリット・デメリットですが、仮想環境のメリットとデメリットがそのまま適応されます。
その中で、Docker独自の利点等もある為以下にまとめました。
Dockerのメリット
仮想環境自体のメリット
- 複数の環境の異なるサーバーを同じ環境で使用出来る。
- 初期設定の準備さえしてしまえば、複数のサーバー環境設定を短時間で設定出来る。
Docker独自のメリット
- コンテナ型の為、通常の仮想環境よりも軽量で高速である。
- 公開されているdockerファイル等を使いあまり知識がなくても運用出来る。
Dockerのデメリット
仮想環境自体のデメリット
- 通常の構成のシステムに加え仮想環境用のアプリケーションを動作させる為、CPUやメモリの消費量が跳ね上がる。(低スペックのサーバーではうまく動かなくなる)
Docker独自のデメリット
- 使いこなす為にはDockerファイルを作製する知識等が必要となる。
- 最適化されていない設定を使用した場合、DockerでもCPUやメモリの消費がかなり多くなってしまう。
- 小さなシステムを開発する場合、通常の運用よりも手間がかかってしまう。
Dockerを採用した理由
私がシステム開発でDockerを採用した理由ですが、私がインフラエンジニアでは無い為インフラの知識が乏しかった為です。
更に、今まで使っていたフレームワークのCake2ではなく新しいフレームワークのlaravelを採用しており
開発期間も長く取れなかった為、環境構築に時間をかけたくなかったのです。
その為、今回のシステム開発ではlaradockという公開されたDockerファイルを利用して環境構築を行いました。
laradockは本格的なシステム構築を行うにはあまり評判が良くないのですが
1からインフラやDockerの勉強を行うのにかかる時間を、取り急ぎシステム開発出来る状態にする事が出来ました。
また、細かい設定の変更等を行っていく過程でlaravelやnginx、php-fpm等のDockerを使わない場合も設定が必要なアプリケーションの知識が得られました。
基本的な設定がされている為、どう設定すると動くのかが一目瞭然でわかりました。
その為、今回のシステム開発はギリギリ期間内に完了する事が出来ました。
Dockerで運用している際に困った事
実際にシステムをDockerで運用した際に困った事が生じました。
一番の問題は私が、Dockerを使いこなす知識が不足している中で、システムの機能追加の開発をしていた事です。
Dockerは複数のコンテナで1つのシステムを動作させます。
laravelの場合php-fpmコンテナとwordspaceコンテナでPHPが動作しており、workspaceコンテナは開発時に利用し、動作させるのはphp-fpmコンテナで動作させねばなりませんでした。
しかし、私は間違ってworkspaceコンテナ内でcron設定を行いバッチ作業はworkspaceコンテナで動作してしまっていました。
また、通常のサーバーであれば新たにインストールを行えばよいPHPの拡張機能等が、Docker上のOSでは対象バージョンの拡張機能がなくなっている場合の対応にも困りました。
このように知識不足から来るDockerの持て余しが多かったように感じます。
Dockerを使った所感
結論としては、私は、Dockerでのシステム運用を止めました。
サーバーを再設定し開発したシステムを再配置する事で、Docker上のシステムをサーバー上で直接動作するようにしました。
この際、laradocが設定してくれていた項目をすべて自分で設定やインストールを行わなければならずかなりの時間がかかりました。
しかし、インフラエンジニアとしては右も左もわからない状態から、ゴールが見えている状態になっていた為作業自体はやりやすかったように感じています。
また、一番最初のシステム開発時サーバー環境構築の時間は確かに時短出来ました。
しかし、その後の機能追加が相次いだ際Dockerの設定で問題が発生する事が多かったです。
私がDocker(laradock)を使った所感をまとめると以下になります。
- サーバーの初期設定が全くわからない場合、勉強の為のツールとしてはかなり優秀であった。
- とりあえず配置しただけで動くものが用意出来るので、ローカル環境等構築にも便利である。
- 正しく運用する為には、Dockerファイルを自分で作製する必要がある為知識が必須である。
- 小さいシステムの場合、サーバーのスペックも高くない場合が多いため、Dockerでさえも負荷となってしまう場合がある。
- 小さなシステムの場合、環境を最初にかっちりと決められないという点も向いていなかったように思う。
まとめ
Dockerは今までの仮想マシンと異なり、軽量で高速である。
その為、今までは仮想マシンを敬遠していたスペックのサーバーでもうまく使うことが出来ます。
ただし、それでも限界がある為、サーバーのスペックをフルに使いたい場合等はDockerでも負荷になります。
更に専用の知識とインフラの知識が必須となる為、0から始めるのにはハードルが高いかと思います。
しかし、WEBサーバーを複数台使うような大規模なシステムでは必須となってくる知識ではないかと思います。
知識がない場合も、ローカル環境構築にDockerを利用し、インフラの基礎を学んで開発環境を構築していく等のフローを行うことで多少時間はかかりますが貴重な知識を学ぶことが出来るのではないでしょうか?
導入をお考えの際は、システムの規模、自分のインフラ知識、開発期間等からどうするかを考えると良いのではないでしょうか?
関連