Previous slide
Next slide
Toggle fullscreen
Toggle overview view
Open presenter view
Docker
Webエンジニアになろう講習会 第8回
自己紹介
renkon
dotfiles入門しました
インフラやってます
前回のおさらい
テスト
テスト
コードの品質・仕様書どおりの動作を保証
テストの分類
正常系 / 準正常系 / 異常系
ブラックボックステスト / ホワイトボックステスト
Unit test / Integration test / End-to-End test
Mocking
実際のサーバアプリケーション等の代わりをしてくれる
テスト形式に応じて必要な要素のみ実装する
決まったレスポンスを返すだけ、など
例えば、フロントエンドのテストのためにサーバー側の処理を全て書く必要はない
CI / CD
CI
Continuous Integration
継続的インテグレーション
自動で整合性や挙動をチェック
テスト
Linter / Formatter
CD
Continuous Deployment
継続的デプロイ
継続的に最新のソフトを提供
Continuous Delivery(継続的デリバリー)を指すことも
GitHub Actions
GitHub 公式の CI / CD 環境
多様な OS・CPU Arch が利用可能
Ubuntu / macOS など
公式の Action のほかにマーケットで公開されている Action も使用可能
類似製品
GitLab CI/CD
Jenkins
CircleCI
目次
座学
Docker とはなにか
コンテナ概論
Docker Image について
Docker Volume について
Docker Network について
実習
Dockerfile の書き方
compose.yaml の書き方
目次
座学
Docker とはなにか
コンテナ概論
Docker Image について
Docker Volume について
Docker Network について
実習
Dockerfile の書き方
compose.yaml の書き方
Docker とは
コンテナ型の仮想環境を作成・配布・実行するツール
言語やフレームワーク、アーキテクチャ、そして様々なツール間の連携といった複雑化する開発環境を簡略化し、開発体験を向上するために開発
標準化された規格やソフトウェア群、それらを支えるためのサービス、ドキュメントやコミュニティを総称して Docker という
Docker とは
コンテナ型の
仮想環境
を作成・配布・実行するツール
言語やフレームワーク、アーキテクチャ、そして様々なツール間の連携といった複雑化する開発環境を簡略化し、開発体験を向上するために開発
標準化された規格やソフトウェア群、それらを支えるためのサービス、ドキュメントやコミュニティを総称して Docker という
環境とは
開発物を動かすときの背景となるものの総称
言語のコンパイラ・ランタイム
環境変数
OS
ハードウェア
依存関係
つまり、ソースコード以外の全て
仮想環境とは
それぞれのコンピューターから独立した仮想的な環境
実現方法
ホスト型 ... VMware Player, VirtualBox など
ハイパーバイザー型 ... Hyper-V, Virtualization.framework など
コンテナ型 ... LXC/LXD, Docker, Podman など
Dockerを使う理由
全ての依存関係をパッケージ化し、コンテナとして動かす
パッケージの作成、配布、実行がDockerの役割
目次
座学
Docker とはなにか
コンテナ概論
Docker Image について
Docker Volume について
Docker Network について
実習
Dockerfile の書き方
compose.yaml の書き方
Docker とは
コンテナ
型の仮想環境を作成・配布・実行するツール
言語やフレームワーク、アーキテクチャ、そして様々なツール間の連携といった複雑化する開発環境を簡略化し、開発体験を向上するために開発
標準化された規格やソフトウェア群、それらを支えるためのサービス、ドキュメントやコミュニティを総称して Docker という
仮想化技術
コンテナ型
ホストのカーネルを共有する
起動が早く、実行時のオーバーヘッドが小さい
プロセスから見える資源を分離・制限する
仮想化技術
ハイパーバイザー型
OS のフルコピーを一つのハードウェア上で動かす
容量が大きい (GB 単位)
プロセス
プロセス
プロセス
プロセス
コンテナとは
特別な状態で実行されるプロセス群
Linuxカーネルの一部であるnamespacesやcgroupsなどを用いて実現される
namespaces
PID・ファイルシステム・ネットワーク・ホスト名・UID/GIDなどの分離
cgroups
CPU・メモリ・I/O・プロセス数など、使用できる資源を制限する
コンテナとは
Dockerでは?
Docker について
Linux の機能をベースにしている
macOS や Windows のネイティブでは動かない
仮想マシンを立てて動かしている
Docker (dockerd) が仲介
コンテナの起動や操作
パッケージ化した利点
ホストの環境が異なっても簡単にアプリケーションを動かせる
「ある環境をちょっと変更したもの」を簡単に作れる
ある Dockerfile を参考に Dockerfile が書ける
必要な環境をコードとして残せる
Dockerfile というファイルに手順を記述する
環境を手軽に共有できる
Docker Hub のようなイメージレジストリが利用できる
目次
座学
Docker とはなにか
コンテナ概論
Docker Image について
Docker Volume について
Docker Network について
実習
Dockerfile の書き方
compose.yaml の書き方
Docker Image とは
コンテナの雛形 (動かす前の初期状態を規定するもの)
複数の イメージ / レイヤー の積み重ね
layers
マウントする root filesystem に加えられた変更のまとまり
metadata
ビルド手順・環境変数・タイムスタンプ…
Docker Image とは
Docker Image とは
レイヤー構造になっている利点
変更されていないレイヤーを再利用できる
ビルドキャッシュを利用できる
複数のイメージ間で同じレイヤーを共有できる
配布時に必要なレイヤーだけ取得できる
Docker における コンテナ とは
コンテナの利用方法
イメージ を用意
Dockerfile からビルドする
レジストリから pull する
読み込む環境変数・設定ファイル等を指定する
イメージ から コンテナ を作成・起動
イメージとコンテナの関係はクラスとインスタンスみたいなもの
目次
座学
Docker とはなにか
コンテナ概論
Docker Image について
Docker Volume について
Docker Network について
実習
Dockerfile の書き方
compose.yaml の書き方
Volume とは
Docker コンテナ内のデータを永続化する手段
Container の書き込み可能なレイヤーとは別にデータを保存する
Container を削除しても、Volume は削除されずに残る
サーバーアプリケーションに対する DB と似た関係性
Volume の他にも Bind Mount, tmpfs Mount などがある
Volume とは
Volume とは
目次
座学
Docker とはなにか
コンテナ概論
Docker Image について
Docker Volume について
Docker Network について
実習
Dockerfile の書き方
compose.yaml の書き方
Network とは
コンテナ同士や、コンテナとホスト・外部ネットワークをつなぐ仕組み
代表的なネットワークモデルは以下の 3 つ
bridge:
仮想ネットワークでコンテナ間を接続。ホストとコンテナのポートをマッピングする。
host:
ホストのネットワークを共有。ポートマッピングは使用しない
none:
疎通しない
Network とは
参考資料
コンテナの作り方
https://www.docker.com/why-docker
Dockerの概要、仕組み、および実装について
Dockerイメージの理解を目指すチュートリアル - Qiita
まとめ
Docker とは
コンテナ
型の仮想環境を作成・実行するツール
言語やフレームワーク、アーキテクチャ、そして様々なツール間の連携といった複雑化する開発環境を簡略化し、開発体験を向上するために開発
標準化された規格やソフトウェア群、それらを支えるためのサービス、ドキュメントやコミュニティを総称して Docker という
仮想化技術
コンテナ型
軽量で起動が早い
namespaces, cgroups で資源を隔離
ハイパーバイザー型
OSのフルコピーを動かす
容量が大きく起動が遅い
コンテナ
Docker Image とは
Docker における コンテナ とは
Volume とは
Network とは
目次
座学
Docker とはなにか
コンテナ概論
Docker Image について
Docker Volume について
Docker Network について
実習
Dockerfile の書き方
compose.yaml の書き方