(自分用)Docker入門勉強会まとめ

こちらを受講させていただきました。
就活でDockerを導入するまでに期間が空きそうなので、自分用に備忘録を残しておきます。

[アジェンダ]

①なぜDockerか?
②Dockerの仕組み
③Dockerの使い方

[講義を受けた上でDockerとは何か?を自分なりに]

開発環境が一瞬で整う、環境のインストールにまず失敗しない。
AWSなどでもDockerの技術が使われている。
DockerはLinuxやコマンドプロンプト、ネットワークの知識が必要。
本番環境でエラーと向き合うには経験値が必要。
スケーリングが難しい。
オートスケーリングはKubernetesなどが担当する。

[①なぜDockerか?]

・DockerはOSがない。その為起動が早く、マシンの占有率も低い。
・Infrastructure as Codeの機能を内在している。ので環境構築が楽。
(Infrastructure as Codeの機能のみ{AnsibleやChef}だとサーバーにうまく移せないことがある)
・(AMIやPackerに比べて)イメージの作成が速い。

[②Dockerの動作の仕組み]

DockerはLinuxで動く。
(WinもMacも内部でLinuxが動いている。)

Linuxのルートディレクトリを変更(チェンジディレクトリ)して、その中にLinuxルートと同じような構造を作っている。

ベースイメージ(UbuntuやSlimなどのこと)が同じならベースが供用されるため、コンテナが複数あってもベースイメージは1つで良い。

[③Dockerの開発環境での使い方]

※実際はコマンドを入力して様々な入出力をしていましたが、書き切れていないため一部間違いや割愛部分があるかもしれません。

コマンドなどはまだDockerを触ったことがないのであえて書かずに、Dockerの使われ方を書いておきます。

Dockerの仕組みその②。
DockerDaimonというdockerコマンドで指示を出せるプログラムがいる。
それが色々操作を担当している。
イメージはDockerHubなどのコンテナレジストリで公開している物を使う。
(もちろん自分だけのイメージも作れる。)
イメージからコンテナを起動することができる。

基本的に1コンテナ1プロセス。
これはLinuxのinitプロセスがないから1プロセス以上作るのが面倒だからだそう。もちろん技術的に不可能なわけではないです。

docker commitは追加するファイルがよくわからなくなってくるので、DockerfileでInfrastructure as Codeとして書く。
(これをGitで共有することで簡単に開発環境を共有できる)
Dockerfileをdocker buildすればDockerfileに書かれた環境が自動的にダウンロードされて作られる。

この後、ホスト側とのディレクトリの共有やMySQLへの接続を行っていましたがおそらくノートにまとめるのは初見では無理と判断し、へ~そうなんだと思いながら見ていました。
この辺の長いコマンドはdocker composeでまとめられるそうです。

[Dockerのデメリット]

・Linuxやネットワークの知識がいるという学習コスト
・エラー発生時の対応は経験値が必要
・本番環境でのスケーリングの最適化が難しい。
(コンテナオーケストレーションでオートスケールは対応する、それがKubernetesらしい)

Dockerにセキュリティ的な対策は必要か?という質問がありましたのでその回答も何となくですが書きますと。

ポートが公開になっていると(この辺は私の理解があいまい)インターネット上からdocker commandを実行されてめちゃくちゃやられる可能性がある。

コンテナに特権を安易に与えるとLinuxカーネルまで行かれてしまうかも。

Unixドメインソケットのマウントには気をつけましょう。

らしいです(とりあえず頭の片隅におきました)

[勉強会に出た感想]

Dockerとは何か?の定義をある程度自分の中でまとめられました。
抽象的に分解した理解が必要な私にとってありがたかったです。
全体的に説明もわかりやすかったです。

この記事が気に入ったらサポートをしてみませんか?