docker勉強会の様子です。スライドおよびホワイトボードを使用し、初学者にもわかるように実施しました。
Docker勉強会~インプット編~
Githubリポジトリ
https://github.com/isdlyusukeshimizu/docker_lecture
開催背景
Dockerはエンジニアを志望している学生としては知っておくべき技術であるため研究室内の学生を対象にHandsonを含めた講習を行いました.
研究室内では自身の研究とは別にWebアプリ開発をする学生が多いです.その開発の中でそれぞれのPC環境を統一することは人数が少ない場合は何とかなりそうですが規模が大きくなるにつれて困難になります.
今後社会人になることも踏まえてDockerを習得することで利点をより感じてもらえると思いました!
(学校からお金がもらえるのも開催背景にあります笑)
Dockerとは?
コンテナ型仮想化により仮想環境を構築するソフトウェアのことです.
情報系なら知っておいた方が有利な技術です.Dockerは業務で使用するイメージがあると思いますが研究やハッカソン,プロジェクトでも使用することができるためとても重宝されています.
Dockerの特徴としては以下の3点が挙げられます.
- 超軽量
- 環境構築と実行にかかる時間が短い
- 負荷が小さく高速に動作する
- 独立した実行環境
- ファイルシステム、ネットワークなどがコンテナ間・ホストOS間で分離
- 一つのホストOSの上に多様な実行環境を構築可能
- 少ないリソース消費
- 同一OSのコンテナを複数起動すると、OSイメージは読み込み専用で共有される
- コンテナの差分のみディスク上に保持される
VM vs コンテナ
- VM:完全エミュレート.基本的に物理マシンにできることは仮想マシンでもできる.
- Docker:物理層はベースOS上で管理し、プロセスのみ仮想化する.
アプリケーションと実行環境の一体化
- 開発環境と本番環境をパッケージ化し統一できる
- 複数の環境を用意する必要がない
- オーバーヘッドの削減
- リソースの節約
- Docker Engine
DockerイメージとDockerコンテナ
- Dockerイメージ
- コンテナを構成するファイルシステム・アプリケーションの設定をまとめたもの
- コンテナを作成する際のテンプレート(設計図)となる
- Dockerコンテナ
- Dockerイメージをもとに作成されるインスタンス
- アプリケーションが実際に実行されている状態
Dockerのレイヤ構造
- イメージの共有により軽量化を実現
- 共有・永続化したいファイルはホストからコンテナにマウント
Dockerコンテナのライフサイクル
- 起動
- runした後の状態
- コンテナ内でアプリケーションが実行中
- 停止
- 実行中コンテナをユーザが明示的に停止した時
- 正常・異常を問わずアプリケーションが終了したとき
- 再実行可能
- 終了時の状態はディスクに残り続ける(→削除しないと肥大化する)
- 破棄
- 停止中のコンテナは明示的に破棄しない限りディスクに残り続ける
- 不要なコンテナは削除する
- 破棄したコンテナは再実行できない
docker-compose
- 複数コンテナのDockerアプリを定義し、実行するツール
- docker-compose.ymlでコンテナやその他の設定を定義
- docker-composeコマンドで実行
- 通常、システムは複数のアプリケーションが関与する
- Webサーバ、DB、リバースプロキシ、他のアプリなど
- Dockerは1コンテナ1プロセス → 複数のコンテナを管理する必要
- コンテナが1つの場合でもコマンド入力が楽になる
Dockerは万能ではない
- Dockerを用いた開発の対象でないケース
- 物理層に近い部分(ハードウェアやKernel)に関わるプロダクト
- OSとしての厳格な動作が求められる場合
従来の仮想技術が必要な場合もある.
Dockerはあくまでもアプリケーションをデプロイすることに特化した箱である
一旦まとめ
- DockerはホストOS内に独立した実行環境を構築できる
- 実行環境をカプセル化できる
- コンテナはリソース消費が少ないので、より多くの実行環境を同時に提供できる
- 同じものを繰り返し使うことに適している
- Dockerの使用が向いていないケースもある
- カプセル化できない場合
- 厳しいセキュリティが求められる場合
- ハードウェアに近い層を考慮する場合
- エンタープライズでの利用がますます広がる
- コンテナという特性上、複製や移動、更新が容易で安全
- パブリッククラウドがプラットフォームを提供
Docker勉強会~アウトプット編~
Handsonの内容
- Dockerを用いてログイン画面の環境を構築しよう! ー Dockerの便利さを知る
- Dockerfileを作成してFlaskの環境を構築しよう
- docker-compose.ymlファイルを作成しよう
- Docker Composeを使用して複数コンテナを作成しよう
- Dockerを用いた開発の容易さを体感しよう
構成の全体像およびディレクトリ構成
Dockerfileからイメージを作成しよう
- Dockerfileとは
- Dockerイメージを作成する際に実行するコマンドをコード化して、1つのファイルにまとめたもの
- Dockerfileのコマンド一覧(抜粋)
Docker composeを使ってみよう
- docker composeとは
- 構築に関わるコマンド文を1つのテキストファイルに書き込んで、一気に実行したり、停止・破棄できる仕組み
- 手打ちでコマンドを打つ場合
- docker-composeを使用する場合
- 定義ファイル(YAML形式)の記述ルール
- 最初にdocker composeのバージョンを書く
- 親子関係はスペースで字下げする(タブ禁止)
- スペースの数は「半角スペース1つ」でも「半角スペース2つ」でもOK(統一すること)
- docker-compose.ymlのコマンド一覧(抜粋)
実行してみよう
- 「up」コマンド
- 定義ファイルに書かれた内容に従ってコンテナ、ボリューム、ネットワークを作成するコマンド
- docker-compose -f 定義ファイルのパス up -d
- docker-compose up -d(compose用フォルダがカレントディレクトリの場合)
- 「down」コマンド
- コンテナとネットワークを停止・削除(ボリューム・イメージは削除しない)するコマンド
- docker-compose -f 定義ファイルのパス down
- docker-compose down
- 「stop」コマンド
- コンテナを停止するコマンド
- docker-compose -f 定義ファイル stop
- docker-compose stop
最低限知っておくべきコマンド
- 2017年1月にリリースされたv1.13で大幅な変更
- docker直下のコマンドが増えすぎてわかりづらくなったため
- docker <何を> <どうするか> でコマンドを入力しよう!