3時間で始めたDockerことはじめ
結論
Dockerは怖くない。入門はちゃんと道筋を通れば難しいものでもない!
自分の通った道筋を共有して、もしDockerに入門するのに躊躇している人の手助けになればと思うので、初noteとして投稿しました。
入門前の知識量
なんか複数の環境間の構築を便利によしなにしてくれるやつ程度の認識でした。
Dockerはコンテナで管理する。Dockerはアプリケーションをコンテナの中に入れておける。Dockerを色んなところに入れればコンテナをどこでも使える。なんかコンソールで触るやつ。
コンテナってなんや?Dockerfileとやらを書かなあかんらしいけどようわからん。
1歩目[0.5時間]: Docker入門本( マンガでわかるDocker )
元々、学生の頃から周りのエンジニアがDockerが便利。Dockerfileのサイズを小さく!などなど、いろいろと聞いていて、正直触っていなかったことに対して焦りがありましたが、時間がないと言い訳して触っていませんでした。
でも、一歩踏み出して買ったこちらの本がPDFで、28Pで、なおかつマンガなので、さらっと読みながらMacにDockerを導入することが出来て、Docker怖くない!すぐに始めれる!という認識が出来たので、勉強開始するための時間がない!や何かしらの理由で躊躇して全く触っていないけど、なんか焦っているという人にとってはとても良い本でした。
湊川あいさん( https://twitter.com/llminatoll )には感謝感謝です🙇🙇
2歩目[2.5時間]: 勉強会 (サポーターズCoLab 実践Docker)
ざっくりとDockerについて知って、Macにも入れれたので、ちょうどDockerの勉強会があるのを知って突入することにしました。
感想
Dockerのことを体系的に知ることが出来てよかったです。質疑応答でいろいろと知ることも出来たし、懇親会でいろいろ聞くことが出来たので総じていい勉強会でした。
まとめ部分の下から勉強会のメモを後にまとめて多少見やすくした物を置いておきますので、お時間があれば読んでもらえればと思います!
まとめ
まだDockerを実戦投入をしたわけではないですが、湊川さんの「マンガでわかるDocker」とCoLabイベントの「実践Docker」の2つを通して、たった3時間でスムーズに導入をすることが出来ました。
ともかく、Dockerを始めるのに躊躇している人は700円でPDF版を買える「マンガでわかるDocker」を購入して、Dockerの概要とMacへのインストールを済ませることをおすすめします!
今後、まだまだ学ぶところはあるのでどんどん学んで実践して、いろいろアウトプットしていこうと思います!
そのへんのアウトプットもするTwitterもやってますので、よければフォローお願いします〜
https://twitter.com/gatchan0807
直接的な参考になるかはわかりませんが、少しでも力になれてれば幸いです。長々と読んで頂きありがとうございました!がっちゃんでした!
勉強会のメモ
Dockerとはなんぞや
- コンテナ型の仮想化環境を提供するOSS。
- アプリケーションをどこでも実行するためのプラットフォーム
- ハイパーバイザー型に比べて非常に軽量なコンテナ型の仮想化環境
1台の物理マシンで複数のOSのサーバーを実行する為に仮想化技術が生まれた。これによって嬉しいのは以下の二点
- 物理インフラエンジニアの負担が減る
- サーバー台数が減らせてコストカットができる
コンテナとは?
Linuxカーネルが持つ「コンテナ」機能を使って実行環境を他のプロセスから隔離し、その中でアプリケーションを動かすための技術。昔からLinuxにあった枯れた技術であった。
OSを複数起動するのではなく、特別な環境を用意して(カーネルの)プロセスを別にして見せる機能。
アクセスをしているとOSのように見えるが、DockerではHost OS(Windows/MacやUbuntu等)の上でGuestOS(CentOS/Ubuntuなどなど)がまるっと動いているわけではない。バイナリやライブラリを使って実行している。
ただただLinuxの標準的な機能だったコンテナをDockerが復活させ、DockerHub等の環境を整えていったために流行ったため、コンテナ技術の再発見と呼ばれている。
プロセスとは?
LinuxやMacのターミナル内で "ps aux" を実行してみると見れる、コンピューターが管理するタスクの単位
Dockerの使い方
- Dockerfileを作る
- `docker build` でDocker imageを作る
- `docker run` でImageを走らせる
※ プロセスは1つのイメージで1つしか走らせることが出来ない!(=プロセスが一つだけと保証される)
一度作ったものはローカルにキャッシュとして保存される。=> 以降アクセスする時に高速に再利用できる
HostでListenしているポートをDocker側で使おうとするとDocker側がエラーで死ぬ。なので、以下の方法を使ってHost側でListenするポートを変更してあげれば使える
`-p 8080:8080` => `[port指定option] [host port]:[docker port] `で別のポートをlistenすることができる
Dockerが生まれた背景
- ホストOS型やハイパーバイザー型が生まれ、物理サーバーの管理数を減らすようになった
- 一括で構成を流し込むことが出来るようなツール、ChefやAnsibleが生まれる(Infrastracture as a code)
=> しかし、アプリケーションのポータビリティ(develop用、production用、staging用などなど)すべて共通化することが難しい。
SSHを順次実行しているだけなので、冪等でない破壊的変更を行うことが簡単で、よく失敗もする。
※ KernelのバージョンがDockerに対して影響が起きる可能性が高いので、Dockerを実行することだけに特化したCore OSが存在している。
=> Mac/Linux/Windows OS上でそれぞれでKernelが違うので、Mac/Windowsでは辛いところがまだある。
コンテナ技術の動向
- 標準化が進められている(Dockerである必要が無くなってきている。そしてDockerからの脱却のために、Dockerがハブられてきてる…)
- 微妙な差があるContainer Runtimeがどんどん生まれて来ている。
- mac上Dockerだと、ファイルの移動に時間がかかるのでまだまだつらい。しかし、docker-syncを使って速度を上げることができる。
- どんどん界隈はDockerについてのコンテナ化よりも、kubernetesの方面に進んでいる。
kubernetesとは?
- コンテナの管理(個数)をよしなにしてくれるツール(オーケストレーションツール)
- ロードバランシングもよしなにしてくれる
- Googleが10年以上前から社内で使っていたらしい、borg(?)を基にした技術
- kubernetes は 8GiBぐらいのメモリがあればどこでも動かすことが出来るので、ローカルでも動かすことが出来る。
- 環境変数の情報をkubernetesに対してファイル(configmaps)に定義して、Imageに対して流し込むことが出来る
- minikubeで簡単にローカル実行することが出来る。Macの場合だと、docker with kubernetesを使えばdockerと一緒に導入することが出来る
- GCP版kubernetesでは自動で複数リージョンで実行してしてくれるので、kubernetes自体が死ぬことも防いでくれる
kubernetesの勉強の道筋
以下の2冊を読み込み、GCP上で実際に利用してみるのがいちばんの近道。
- 入門Kubernetes
- コンテナ・ベース・オーケストレーション
コミュニティも活発で、年に一度開催されるJapan Container Daysと、Kubernetes Meetup Tokyoがオススメ。
質疑応答
dockerとkuberenetesは状態を持つのは苦手。DBをコンテナ化するのは合理的ではないよね…
(kuberenetesは)勝手に消えて、勝手に復帰してくれるのが前提なので、それにあったアプリケーションを書く必要があったりする。
Dockerと組み合わせて嬉しみがある言語や環境としてはGolangなどのバイナリ化する言語があっていると思う。理由としては、シングルバイナリ化ができるので、ファイルサイズを減らしやすい。反対にRubyなどのスクリプト言語だとコードすべてを突っ込む必要があるので、Docker Imageが大きくなりがち。