- Dockerとはコンテナ技術を使い、アプリケーションの開発・実行を行うプラットフォーム
- DockerではKernelはホストと共有し、複数のルートファイルシステムを実行する
- Kernelはコンテナを「グループ分けされたアプリケーションレベルのプロセス」と認識する
- DockerはClient/Serverアーキテクチャ構成。機能面はServer側で実装、Clientが指示を出す
🚕 Dockerの構成要素
Dockerイメージ
- コンテナのひな型、設計図。イメージの作られた履歴が含まれ、状態を容易に再現できる
- Dockerfileを自作することでオリジナルのイメージを作成できる
- Base Imageの上に複数のイメージがスタックされるような構成
Dockerコンテナ
- イメージから作られる実体のようなもの。内部でワーカプロセスを走らせる
- コンテナには独立したファイルシステムがあり、コンテナ自体がOSのように見える
- Dockerコンテナのプロセスからほかのプロセスは見えない
参照元:トレタ社内勉強会 Dockerの上でRailsアプリを動かす ハンズオン // Speaker Deck
レジストリとリポジトリ
- Dockerのイメージ管理を行う。公式のイメージはDocker Hubというレジストリで管理される
- レジストリには複数のリポジトリがある
🍮 Dockerの利点
- ホストのKernelを共有することで、オーバーヘッドが少なく、高速。メモリの消費量が節約できる
- Kernelを新しく起動しないので、ゲストOSの起動が早い
- 手元で動いてたアプリケーションをそのままネットに公開できる。依存問題の発生が減る
- AWS、Googleのクラウドと組み合わせると、インフラのBlue-Green deploymentも容易
🍣 Dockerの欠点
- Kernelを共有できるのはUbuntuとRed Hat Enterprise Linux、Windowsなどはサポートしていない
- 管理者の学習コストが高い
🐡 Docker利用の原則
- 1つのコンテナは1つのタスクのみを担当することが推奨
- サービス連携はコンテナ間の連携することで実現