個人開発においてDockerっていうやつの勉強が必要らしいので勉強していく。
まずウェブについて
ウェブはクライアント(私たちのようなユーザ+ユーザが使っているインターネットに繋がれたスマホやパソコン)と
サーバー(ウェブアプリやサイトを格納しているコンピュータ)によって成り立つ。
※サーバーはそれぞれウェブサーバーだったりメールの送受信をするメールサーバーだったりデータベースサーバーが存在する。
静的VS動的
静的はHTMLやCSSで作られるウェブサイトの中で表示するページが変わらないやつのこと
動的はユーザーの選択によって表示する内容や画面が変わるような奴の事
検証について
静的サイトを作った際はローカルでウェブブラウズを開いて検証できるが、動的となると検証用サーバーを使ってそれが動くかを検証し、実際に動いたら本番環境のサーバーにデプロイする。本番環境で検証したら実際にそのウェブサイトが公開されている状態になるのでユーザに間違った情報や沢山のエラーを引き起こしたりするので検証要のサーバーで検証すべし。
いわゆるサーバーの処理をするために必要なのは
物理的にデータや処理保管しておくでっかい機械(ローカルのPCやラズベリーパイ等も含む) + サーバーソフトウェア が必要。サーバーソフトウェアはでっかい機械がサーバーとして動くようにする為のプログラムでMySQLとかがサーバーソフトウェア。ウェブサーバーのソフトウェアはApacheとかが有名でメールサーバーのソフトウェアであればpostfixなどが有名。
でもサーバーソフトウェアをインストールして使うのは大変。OSやバージョンによってサーバーソフトウェアが上手く処理してくれなかったり検証環境と本番環境の違いで動かなくなったりすることがしょっちゅうある。
※windowsやmac OSには誰でも簡単にパソコンを操作できるようにいろんなグラフィックや機能を追加しているんだけど、それが理由でサーバーソフトウェアがエラーを起こすこともあるから開発用OSをLinuxにすると良い。自分でパーミッションというセキュリティを強化する設定もあるからね。
※前に友達が教えてくれたVercelはHerokuは運営元の企業がでっかい機械を持っていて、かつ運営はウェブサイトを持っていてそれにアップロードすると勝手にでっかい機械に繋いでくれてサーバーとして使う事が出来るよっていうやつ。
Linuxについて
Linux =カーネル + ディストリビューション
Linexはまじで一番大事な核となるカーネルと、自分で追加したり削除したりした各種のコマンドやライブラリであるディストリビューションがある。カーネルはマウスを動かした信号が来たらどういう処理をするとか、リソースの中でどうしたら効率よく処理が出来るかみたいな事だけ載っているやつ。ディストリビューションはカーネルを使いやすくするためのコマンドやGUI群。
有名なディストリビューションはubuntsとかAlpineとかがある。
Linuxでサーバーを立てるには
・新しく買ったパソコンにLinuxを入れる
・仮想マシンを入れる(windowsのパソコン上でLinuxを動かす)
・レンタルサーバーを利用する(ワードプレスみたいなところからサーバーを借りる)
・コンテナを利用する(Dockerをつかってサーバーを立てるやり方)
コンテナって何?
アプリを動かすのに必要なサーバーやらOSの設定やらの一つでも変更したりすると動かなくなる可能性があるから、動くために必要な設定だったり機能を全てコンテナ(箱)の中に入れて一括で管理する事でどのパソコンでも動くようにするっていう技。ソフトウェアのバージョンで動いたり動かなかったりしたら大変だからね。
今までは仮想マシンを使ってOSから些細な設定の一つまで全てを仮想化する事でいろんなパソコンでもプログラムが正常に動くようにしていたんだけど、OS周りは大体皆一緒っていう事と仮想マシン(仮想化)はめっちゃ計算コストが掛かるから重たいよねっていう課題があった。そこで、コンテナはOSは一緒でアプリのデータとか処理、個々で使うファイルだけを箱詰めにした。そうする事でOSの切り替えにリソースを取る必要がなくなった。
DSのカセット版とダウンロード版みたいなこと。
カセット版はカセットというOSを毎回切り替える為にDSの電源をオン・オフしないといけないけど、ダウンロード版なら電源は切らずに遊ぶゲームの入れ替えが出来る。
開発環境ではインストールし忘れていたライブラリとか設定が全てコンテナに入っているから他のパソコンや本番環境にうつしてもスグに使える点や、仮想化の時に色々と設定するOSの手間が省ける点がメリット。
コンテナ作成について
コンテナはイメージというテンプレートから作られる。このテンプレートはここをこうするっていうプロセスの説明書でイメージを渡すことで他のパソコンでも同じ実行環境を得ることが出来る。イメージを補完する場所をレジストリと言い、Docerk hubが公式レジストリを提供している。そこからイメージを取得することをプル、登録する事をプッシュという。
与えられたコンテナを使ってコーディングすれば、他のパソコンから同じコンテナを取得して実行するだけで環境の違いに対応しながら処理を正常に行う事が出来る。
※もちろん自分でコンテナを作成することが出来て(めっちゃ難しい)、ドッカーファイルというテキストファイルを使って製作し、イメージを構築する事をビルドと言う。
Dockerはクライアント・サーバーシステム
主にクライアントのDockerクライアントとサーバーのDockerデーモンの二つで成り立っている。DOckerクライアントでdockerコマンドをコマンドプロンプトに入力すると、デーモンに送信されて処理される。