Docker
Docker
https://cdn-ak.f.st-hatena.com/images/fotolife/p/paiza/20160607/20160607145104.png
とは
コンテナ仮想化を実現するための技術。手軽でエフェメラルであることから、数年前から注目されており、NPではコンテナ仮想化をクラウド上で実現したサービスを利用している。 DockerはOS仮想化を実現するためのソフトウェアであり、同じようなものは複数種類存在する。
Dockerの技術
OS仮想化と決定的に異なるのは、コンテナはホストOSのコアである画面の入出力、テキストの作成、保存、起動、停止等基本機能を共有し、その上に利用者が必要な最低限のソフトウェアを載せられることにある。 なにも入ってないさらのCentOSイメージを利用する場合、コンテナ内ではzipを解凍したり、vimでファイルを書いたり、Apacheを起動することはできない。 なにが嬉しいのか
手元で、ごく小さなOSをOS仮想化よりさらに手軽に利用できる。
これがなければ、いちいちクラウドにテストサーバを置いてテストすることになり、開発速度が著しく落ちる。 便利な使い方例
ローカル開発用データベースを作成してみる。
多くの場合、本当に書きながら動かすのと単体試験、接続試験は別々のDBを利用することでデータの状態がよりわかりやすくなる。
プロパティ等で接続先をそれぞれ作成し、接続先ごとのDBをコンテナで作成することで各フェーズのデータを汚さず開発を進めることができる。
Dockerの構成
https://cdn-ak.f.st-hatena.com/images/fotolife/p/paiza/20160614/20160614163358.png
--.icon
「Macを初期設定した時のterminalでの作業」を自動化するもの的な認識
・最初からOS入ってた(Catalina。これがDocker Image)
・installした後、自分のuser名を設定した(これがDockerfileに記載するENVとかの部分)
・terminalで brew をinstallし、必要な物を brew installした(これが RUNの部分)
「Macを使えるようにするまで」でみんな手作業たくさんで大変だったけど、それを全部自動化するのがコンテナという考え方。
そして、「brewをinstallするまでは全く同じ作業だね!」ということであれば、そこまでの設定・作ったものをシェアすると…時間もリソースも省略できるやん!ってのが Dockerにおける layerでの考え方
実際にどう使うのか