非エンジニアが「 Docker の勉強」のモチベーション維持のためにおすすめしたいこと

※2019年8月30日　追記
　修正①：「4. 有名なツールを使ってみる（heroku, github）」において、一部文言を追加しました。
　修正②：「3. 「狭く深く」より、「広く浅く」を優先する」において、Rancherのバージョンに関する注意事項を追記しました。

# 本記事で発信したいこと
私は、クラウドサービスプロバイダーで新サービスの企画業務をしている非エンジニアです。
過去に小さなマーケティング会社でキャンペーンサイトの構築・運用をしていましたが、履歴書に書けるようなITスキルはありません。

そんな私が Docker 技術を活用した新サービスの立ち上げ企画を任されました。そして今現在すでにリリースも始まっています。

**「Linux？ああ、ペンギンさんのやつだよね！」**という雑魚レベルからの成長記録をここに書き留め、Qiitaに参加するすばらしいスキルを持つ方々との交流の窓を拡げさせてください！

※ Docker 関連の技術や用語を説明する内容ではございません。あくまで非エンジニアの私が Docker を理解するうえで効果的だったことをお伝えするものです。。
一応用語関連に関しては[Dockerの用語は大体「遊戯王カード」で置き換えられることを発見しました！](https://qiita.com/upaldus/items/518e6ae61c24b0a8f750)でまとめてみました。

# 勉強って楽しいね
「エンジニア」の人たちは、毎日毎日新しいことを勉強していて尊敬するな～、大変だろうな～、と思っていましたし、今でもその考えには変わりはありません。
ただ、それこそが彼らの仕事であり、趣味であり、決して苦痛なことではないんだ。という考えが付け加わりました。

# まとめ 1/2 .. 身につけたこと
- コンテナ仮想化技術の構造を理解し、企画の人間としてエンジニアとコミュニケーションを取れるレベルの知識
- 個人で構築した環境で Docker を楽しく扱う方法

# まとめ 2/2 .. 結果良かったこと、同じ属性の人におすすめしたいこと
1. 勉強用のPCを買う
2. VPSを契約する
3. 「狭く深く」より、「広く浅く」を優先する
4. 有名なツールを使ってみる（ heroku, github )

では、具体的にお話します。

# 1. 勉強用のPCを買う
まず「何言うてんの？」とかつっこまずに一応聞いてください。。
ぼくは形から入るタイプで、道具を集めたら満足してやらない（例. ゴルフ）というダメな方の人間です。
もともと嫁と共用でMBP(2018)を使っていて、もちろんスペックはこれで十分すぎるんですけど、例により形から入りました。
大阪の日本橋で購入したのはリースアップで中古品として売られていた2万円のThinkPad（Core-i3 4000U, 8GB, HDD 500G）で、明らかに無駄な出費です。
ただ「Docker勉強専用機」を買ってしまった手前、嫁の前で1日1回は開くようにしています。これはどっちかというと怖い嫁のおかげかも知れませんがね。。

あとPCの蓋に Docker とかのロゴシールをメルカリで買って貼りました。
「お前 Docker のなんなのよ」って感じなので外に持ち運んでいませんが、エンジニアっぽくてテンション上がりました。

# 2. VPSを契約する
「なんのためにPC買ったんや？」とかつっこまずに一応聞いてください。。
よくエンジニアの方が「sshで接続してターミナルをカタカタ」してるのに憧れがありました。もちろんPC内に仮想で立てればいいんですけど、「VPS契約してるんだよねー、俺。スマホからでもほら黒い画面カタカタ」ってどやれるので、喫茶店とかでもあえて見えるくらいにしてiPadでカタカタしたり。

あとPCの環境を汚すのはすごく抵抗ありました。大学4年生くらいのときに「プログラミングでも勉強しよっかな～」ってときあったんですが、環境作るまでに自分が何してるかわからなくなるんですよね。で、何回も始めっからやってエラーばっかでそのまま投げました。

ちなみに使ってみてよかったなーっていうのが下の２つです。

  - **「カゴヤのVPS/KVMプラン」**
    正直安いだけ、っていう評判が多くて、「Conoha」とかに比べるとテンプレートがめちゃくちゃ少ない..故に勉強には向いてます。

  - **「Time 4 VPS」**
      ヨーロッパ企業のサービスで、国内と比べるとかなり安いです。
      ただsshの入力反映がもたつくので、安さとのトレードオフになってます。

# 3. 「狭く深く」より、「広く浅く」を優先する
「そんなの使い物になんねえよ」とかつっこまずに一応聞いてください。。
Docker は特に活きると思います。コンテナ型仮想化が再注目された背景にk8sなどのオーケストレーションツールの強力さがあると思うんですよね。
真髄はコンテナ間の連携や、環境構築の効率化にあると思うので、そこを先にやって全体像を掴みました。そこから「同じことをやるには docker コマンドを使うと..」と逆算していくと全体像がわかっているので、対応するコマンドを探すだけですし、オーケストレーション自体の凄さがよく理解できたと思います。

ただ、k8s自体はかなり難しいと思いますし、私もほとんど理解できていません。さらにVPS1台程度でk8sを使用するのは逆に非効率です。
要はオーケストレーション的な役割のもが何をするのか理解できればいい（言い訳）ので、僕は下記をおすすめします。

  - **" docker-compose " で運用する**
    非エンジニアからしたら感動モノです。1行でだいたいのサービスが立ち上がって楽しくなります。無駄にWordPressやNextcloud、code-serverなどを立ち上げては止めてを喫茶店でどやりながらやってます。
    docker コマンド単体と違って、指定のディレクトリ内で管理できるので、もしかしたらこっちから始めるのが正解なんじゃないかと思いました。

  - **Rancher ver1.6（重要！） で運用する**
    本来k8sの環境をGUIで管理するための管理ツールで、わかった気になってしまうよろしくないルールだとは思います。
    ver1.6としたのは、ver2.0移行では標準がk8sに対しcattleだったりしてとても扱いやすく、かつ1台のVPSでの運用でも十分活躍します。
    「できることを確認したい」程度であればもうこれだけでいいんじゃないかと思います。どうでしょうか？

<font color='red'>※追記の注意事項：コメント欄でもご指摘いただいている通り、Rancher ver1.6 は2019年12月末でサポート終了となります。これから学習を始められる方は ver2.x 系で運用された方が今後長く使えると思います。</font>

# 4. 有名なツールを使ってみる（ heroku, github )
改めて書き出してみるとミーハーというか、こてこてなエンジニアのイメージに憧れがあるんだなあ、と思います。。
ただ、自分の日常になかったツールを触ってみて、こんなものを考えて作る神がいたるところにいることに気づけます。

herokuのチュートリアルを終えたとき、「アプリをデプロイしたんだぜ」という自信とオーラが滲み出てきました。自分がいつかWEBアプリでも作るときがあれば、リリースはできるな、ということでうっきうき、モチベーションバク上げでした。

githubは実用的な面で行くとdockerと操作手順とか似ているので、どっちかを順番に勉強したらすんなり行ったろうな、と思います。
（追記：github と docker は用途的にはあまり似ているという訳ではありませんが、リソース管理のコマンドに共通するものが多く、どちらかを覚えておけばもう一方もすんなり覚えられる、と考えています。）

モチベーションで言えば、あのgithubのアカウント持ってるよ？Qiitaにもgithubアカウントでログインしちゃうよ？ということでこれもまたうっきうきです。


# 最後に
エンジニアの方にとっては「浅い、、」と思われるような内容かとも思うのですが、自分が知らなかった憧れの世界に少しでも入りこんでみることで、自分としては得るものもあったし毎日が充実するようになってきました。
もはや勉強ではなく、まとめサイト巡回と同じような「楽しみなルーティン」となりました。
「非エンジニア」の同士の方へ少しでもこの内容が参考になれば幸いです。