新人がコンテナを理解した学習方法

# はじめに
この記事は、**IT超初心者で技術要素を学習する方法が知りたい**という方を対象としています。

IT技術に触れ始めて早3年が経とうとしていますが、3年前まではIT超初心者でした。始めて配属されたプロジェクトでは"コンテナ"、"コンテナオーケストレーション"という言葉が飛び交い、プログラム中心に勉強をしたがために、インフラまわりの話についていけず焦りました。

そんな中、先輩にアドバイスを受けつつ勉強し始め、何から手を付け始めて、どうやったら使えるようになるのか、その勘所を探ろうとした結果得た学びをお伝えします。

# 初めての技術要素を学ぶ流れ
最終な目標を「使いこなせるようになる」とした場合、書籍などの情報をインプットするだけでは、使えるようにならないのを実感されていると思います。私自身も「使いこなせるようになる」が遠い目標過ぎてどのようなステップを踏めばよいかも分からず、ハードルを感じていました。

そこで、熟練者のアドバイスを受けながら勉強していき、学び方のポイントを習得していきました。

下記に示す**ステップ**を踏むことで「使いこなせるようになる」に少し近づくことができたと感じています。また、下記に示す**コツ**を各ステップ内で行うことでより理解の助けになります。

**ステップ1：実際に技術に触れる**
●　とりくみやすそうな目標を決め、それに適したgithub上のサンプルや公式のチュートリアルを行う
●　「理解は後からついてくる」という心構えで、深い理解をしていなくてもあまり気にしない。意外と作業しているうちに理解してくることもある
**ステップ2：資料で頭を整理する**
●　ステップ1の中で不明な点は、Qiitaの記事等で調べる
●　より深い理解をするために書籍やSlideShareの資料を読む
**ステップ3：自分でイチからつくる**
●　ステップ1、2の知識を使って自分で設計する
●　自分の理解度を測ることができ、復習にもなる

**コツ1：手書きでノートに書く**
●　概念や構造の理解をするためには、手書きでノートにまとめた方が頭に入る
●　きれいにノートにまとめるのではなく、あくまでも整理するために紙を使う
**コツ2：Markdownでまとめる**
●　Markdownは手順系をまとめ易いため、作業を記録しておくのに適している
●　覚えておきたいコマンドやメモも残す
**コツ3：仲間や先輩に共有する**
●　人に説明することで自分が理解していないことに気付く
●　有識者の意見を吸収できる

![初めての技術を理解する流れ.JPG](https://qiita-image-store.s3.amazonaws.com/0/211033/8b75326b-2a57-7d26-72d8-dafde05798ac.jpeg)

# 実際に試した例
上記の「初めての技術要素を学ぶ流れ」を実際に試した例を紹介します。お題は以下の3つです。

**A. Dockerの理解**
**B. コンテナオーケストレーションの理解**
**C. サンプルアプリをGKEで起動させる**

![実際行ったこと.JPG](https://qiita-image-store.s3.amazonaws.com/0/211033/0efd3489-4c2a-0c8a-bb7c-e3a36e772ac9.jpeg)

### A. Dockerの理解
```markdown:目標
Dockerコンテナで何ができるか理解すること
→ ローカルでイメージをbuildしてDocker Hubにpushする
→ 書籍やQiitaの記事で知識を整理
```
Dockerの概要はあらかじめ調べてから、とりかかりやすい目標を立てました。ステップ1の手順は[こちら](https://qiita.com/quvority/private/996b2bfd86385b323656#docker%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E4%BD%9C%E6%88%90)を参考にしてください。ステップ2で実際に読んだ資料や、行ったことを以下でご紹介します。

- [Dockerイメージの理解とコンテナのライフサイクル](https://www.slideshare.net/zembutsu/docker-images-containers-and-lifecycle)
    - 図が分かりやすいためDockerの概念を理解するのに役立ちました
- [O'REILLY Docker](https://www.oreilly.co.jp/books/9784873117768/)
    - いきなりきちんと読み始めると難しいので、辞書のような立ち位置で活用していました
- [Docker実践入門――Linuxコンテナ技術の基礎から応用まで](https://gihyo.jp/book/2015/978-4-7741-7654-3)
- 図のように、理解の助けになった資料を残したり、調べたことをメモしていきました

![dockerを学ぶ際のメモ.JPG](https://qiita-image-store.s3.amazonaws.com/0/211033/0bf8a1d9-1981-803e-5611-47fe39cc026f.jpeg)

### B. コンテナオーケストレーションの理解
Dockerについて学んでいくと、コンテナオーケストレーションという技術があることを知りました。特にkubernetesが熱いようでした。ステップ1の「実際に技術に触れる」が鉄則なので、手軽に試せるクラウドサービスを選択します。

```markdown:目標
コンテナオーケストレーションで何ができるかを理解すること
→ GCP Kubernetes Engine（GCP）を試す
→ AWS Elastic Container Service for Kubernetes（EKS）を試す
```
クラウドサービスの公式ページではチュートリアルが用意されているため、ステップ1として以下の公式チュートリアルを行いました。

- [GCP公式のチュートリアル](https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app?hl=ja)
- [EKS公式チュートリアル](https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/create-public-private-vpc.html)
- 手順はMarkdwonでまとめてやすいため、他の人とも共有しやすい[Hackmd](https://hackmd.io/)を使いました。 
![EKS構築手順.JPG](https://qiita-image-store.s3.amazonaws.com/0/211033/d8236d34-d899-520e-39c7-95652bb918a9.jpeg)

ステップ2として動画と書籍を活用しました。

- kubernetesの概念やネットワークについて解説している動画です。あまり理解が進んでいない状態でも、割とついていくことができるためおすすめです。
    - [Kubernetes in 5 mins](https://www.youtube.com/watch?v=PH-2FfFD2PU)
    - [Networking with Kubernetes](https://www.youtube.com/watch?v=WwQ62OyCNz4)
- いきなり始めから読み物として読むのは難しいのですが、理解が進んできた後だと頭が整理されます。
    - [Kubernetes完全ガイド](https://book.impress.co.jp/books/1118101055)

### C. サンプルアプリをGKEで起動させる
ステップ3として、フロントエンドアプリをGKEで動かすことにしました。実際に試したハンズオンは[こちら](https://qiita.com/quvority/private/996b2bfd86385b323656)をご覧ください。ステップ3を行うことでこれまで別々だった知識がつながり、やっと「使えそうかも」という状態までたどり着きました。

# おわりに
実際に技術を試してみる、書籍で勉強する、など当たり前に言われていることなのですが、自分がつまづいたのと同様に学習方法がわからない初心者の方の助けになれば幸いです。まだ「使えそうかも」となっただけで、「使いこなせるようになる」まで到達していませんが、新しいことに対するハードルは下がったので、実践→情報収集を繰り返していきたいと思います。
最後までお付き合いいただきありがとうございました。