見出し画像

Dockerの本を読む

こんばんは。今日もお疲れ様です。

皆様Dockerという単語に、
聞き覚えはありますでしょうか?

「。。。」
「Kubernotesね」
「仮想だとか何とか、、」

様々なお返事があると思われます、

私自身、雑誌で特集されていたものの理解しきれず、
VScode(プログラムを書く、メモ帳みたいなところ)
の拡張機能で出てきたかも?
くらいの印象です。

「プログラミングやろうかな!」
「ニュースで見たんだけど」
のような方が閲覧しても、
まあまあ理解しやすい
ご自分で検索するワードがわかりやすい
記事を書くように心がけようと思います。

また、プログラミング言語に関係するキャラクターの中では、
割と可愛いのを持ってるな、という印象もあります。

Goのホリネズミも良いですよね、
著作権的なものに無知すぎて、検索はお任せしたいと思います。

わからない事は、
ググるより書籍ポチる私なのですが、
Dockerも書籍を購入しました。

弱小ブログに拡散効果はないのですが、、
表敬として参考文献として以下に記載します。

参考文献

雑文

何かを書くとき、
タイトルから書く形式であるのが
私の脳みそにとっては、ものを書く難易度を上げる要素の一つです。

要約は後からするもので、徒然なるままに書いた文章を
「総じてこういう話だったな」
「ここまでしか書けなかったから、このタイトルでは大きいな」
と思うことがあるのです。

それでは本編です!

環境を整えよう

Dockerアプリを落とすまで

(以下、私の説明不足で難しい可能性があります。
その場合はdockerで検索していただき、
本物だとよくサイトを確認された上で、
お使いのOSに合ったものをダウンロードしていただければと思います!)

mac環境で説明させて頂きます。

少々全容がわからないところで、
間違っている動作であれば書き直して
上げ直します。

お使いのmacのspotlight検索より、terminalと入れ、
ターミナルというアプリを起動してください。 

command・スペースという相当優先度が高そうなコマンドで起動するように、spotlight検索は相当有能です。

macの中(ローカル環境と呼ばれます)のアプリからメール、ニュースまでを検索してくれます。

terminalを起動すると、
%の右に隙間が空いて、何かを打ち込めそうですよね。

ここに上手く指示を書くと、pcに指示を出すことができます。
初期設定ではないかもしれませんが、
アプリのダウンロードや削除アップデート、検索
プログラムの実行などなど
プログラマっぽいことが行えるのがここです。

打ち込むのはOSコマンドと呼ばれます。
OSに指示を出すからです。
ではOSとは何でしょうか?

OSとは、皆さんがお使いのアプリ、スクリーン、キーボードの間を取り持つ
便利ソフトと考えていただければよいと思います。

言われてみれば、キーボードを押したたけで、文字が打ち込めること、
クリックで使うアプリを変えられること、

普通ではありますが、脈絡もない事が絡まりあっているような気がしませんでしょうか?

キーを押して、それを認知して、出力する場所を認識して、画面を映すための部分に指示を出して、のような処理をするとき、
キーボードと画面と画面を映す部分とを行ったり来たりせねばなりません。

おのおのを繋ぐのではなく、
ある部分でいい感じに解釈をして、
お互いを繋げるのです。

「青森からアメリカに行きたければ、
一回羽田を通るよね」
くらいのイメージをしています。

余談が長くなりましたが、

こちらに

brew install --cask docker

と打ち込んでいただければ、インストールが始まります。

ただ何もterminalをいじったことがない。
という方は、上手く動作しないかもしれません。

なぜなら、「terminalを介してアプリを入れるソフト」
をまだインストールできていないからです。

homebrewで検索をして、そちらの最も目立つところにあるコードをコピペでそのままterminalに打ち込んで、エンターを押してください。
まあまあ時間がかかってしまうかもしれませんが、macプログラミングにおいて一番重要な仕事をしたと言っても過言ではないでしょう!

こちらがそのサイトです。

こちらが入りましたら、brew・・・のコードを再度打ち込み、少々お待ちください。

そうすれば、アプリをホームページまで行かずともダウンロードすることができます。
これを使うメリットとして(不勉強ではありますが)、dockerもどきのような詐欺サイトで、訳のわからないソフトを落としてしまうことを避けられる点です。

macOSのセキュリティが異常に高いだけで、windowsでは簡単にマルウェアに感染すると聞きます(windowsも日常使いますので、少々実感しております)

恵まれた環境に居ながらも、注意は払って参りましょう。

Dockerアプリを落とし、設定を行うまで

Dockerアプリを入れられて皆様。

おめでとうございます。

次に行うのが、Docker自体のログインです。

こちらはアプリの指示に従い、先ほど利用したterminalに
コマンド(コード・文字列)を打ち込んで行きます。

4つのプロセスが存在し、
三つ目までは指示通りで実行可能なはずです。
ログが流れるように動き、ものすごくワクワクするはずです!

四つ目は、Dockerのアカウントを作成する必要があります。
こちらもアプリの指示より、ブラウザと行ったり来たりをして、
メールアドレスを認証し、登録をお願いいたします。

割とずんずん進むと楽しくなって来ないでしょうか?
現状は無料版で問題ないかと思われます。

まだまだ知識はないのですが、何をやってそうか、
私のレベルで理解できたことは、

「terminalでは、今使っているmacOSに指示を出すことができる。
そしてこのterminalには
作業ができる場所(中にファイルを入れたり、中のファイルを消去したり)というものが存在する。
Dockerで作成したのは、まったく新しいterminalのようなもので、
(多分)使うOSから変更できて、全く新しい拡張機能などを
入れることができる」

のような感じでしょうか、、
最後まで行けた方、
本当におめでとうございます。

それではついに書籍の内容へと入って参りましょう。

(簡単に)インフラ背景知識

PCの構造

先ほど軽く触れさせていただきましたが、
PCが動く際の仕組みとして、

ハードウエア(マウス、CPU、画面)
の上に
OS(オペレーションシステム)
があり、
アプリケーション
がその上で動く。

というイメージができます。
OSがなければ、アプリは動かず、
OSがなければ、ハードも動かないのです。

いや違うかもしれません。
OSがなくてもハードの電源を入れることはできますが、
OSがなければアプリを実行することができないのです。

また皆さんお気付きのように、
ある程度OSとアプリには対応関係があります。

大学などで専門分野に進まれた際、
Macだと動かない
Windowsでは動かない
(前者が多いかもしれません、、)

という経験をされた方もおられるのではないでしょうか?

このようにアプリ(ソフト)と、OSには対応関係がありますので、
アプリを作りたい!公開したい!と思った場合、
その対応OSを気にしなければなりません。

アプリ開発とDocker

こんな記事を書く前に、アプリの一つでも完成させたらどうだ!
というお声を受けるかもしれません、、

ただ私には「やる気」という上司がいて、
彼女の許可なしでは、なかなか無闇に動けないのです。

あまり勝手な事をすると、「体」という企業に
とんでもない損失をもたらしてしまいかねません。

では参ります。

アプリ開発のイメージはどんなものでしょうか?

私が言語化するとすれば、
ゲームや、電卓など、便利で持っているデバイスで動くものを、
その設定を難しい言語で書くことで
作り上げること、のような感じです。

ただ先ほど申し上げたように、
アプリはOSがあって初めて動きます。

ただアプリ開発の知識と、OSの知識は
それぞれ膨大で、
専門性を高めるためにも
元々分業がなされていました。

プログラミングはアプリ開発のエンジニアが、
OSやサーバーをいじるのは、インフラエンジニアが担っていたのです。
(今でもある程度そうなのかもしれません)

しかし、そんな業界に「クラウド」という化け物がやってきました。
OS・サーバーなど、実行環境の整備を、自社で行うのではなく、

大きな会社が持つ、超巨大な設備を、みんなで分けて使いましょう。

という流れの変化があったのです。

自社で、プログラムが動く環境まで整え維持するのはコストが大きい、
尚且つ、サブスクのように、使った分だけ料金を払えばいい
「クラウド」という仕組みは、
自社の設備を持つことなどできない、小さな会社や個人
また自社の設備維持が大変だった法人など
多くの人の心を掴んだのです。

ただ、アプリケーションエンジニアにとっては、
サーバーエンジニアが行ってきたことが、
何なら自宅でパソコン一つで降って来て、
開発の幅を広げるためにもインフラ側の知識が必要になりました。

サーバーエンジニアにとっては、
新たな仕様が加わった一方
実際に会社の機械をいじる、常駐する
などの必要がなくなり、
アプリ開発側の知識をつけてスキルアップする道が開けたのです。

こちらは無知な中の作り話感があり、
よく現場を経験されたげきつよな方々に、
詳しくお聞きできれば追記したいです。

システム基盤とは

ここまでOS=インフラ
のイメージを持たれているのではないかと思います。

ここではインフラとはと銘打ち

少し詳しく定義します。

インフラとは、
「ハードウエア/OS/ミドルウエア」
などを指し、
「アプリケーションを実行する」基盤となる環境のことです。

ここ以降は、ある言葉を聞いて、
それを説明できるようになることが重要かもしれないと思ったため、
以下一問一答形式で記載したいと思います。

このタイミングで、
一旦きちんと読書をしてこようと思います。

あとがき

ご精読ありがとうございました。
長めですがお付き合いありがとうございました。
またDockerの本を開く機会には、ぜひ続きを書かせていただきたいです。

良い1日をお過ごしください!



ありがとうございます!!!!!!!!!!!!!