dockerとは
開発環境をコンテナという単位で作るシステム。dockerhubというところにあげて色んな所に開発環境をコピーすることでどの端末でも同じ開発環境で開発できるようになる。
docker全体像
- dockerfileからimageを作成
- imageは設計書のようなものでこれからcontainerを作成
- このcontainer上でアプリを動かす
- imageはdockerhubで共有できる
docker用語集
- docker daemon・・・dockerコンテナに指示をする常駐型のシステム
- イメージビルド・・・dockerfileからイメージをつくること
仮想化の流れ
- docker デーモン経由でdockerhubからimageをとってくる
- 一度クライアント側にimageを持ってくれば次コンテナを作るときは早くなる(取得しないので)
基本的なコマンド
- docker run・・・imageの取得、コンテナの作成などを一気に行う
- docker images・・・イメージの一覧表示(http://docs.docker.jp/engine/reference/commandline/images.html)
- docker pull イメージ名・・・イメージをdockerhubから取得する
より詳細なコマンド一覧
https://qiita.com/wasanx25/items/d47caf37b79e855af95f#up
普段の使い方
- docker-compose upでコンテナを起動
- コマンドはdocker-compose runを使い、例えばwebサーバーでrailsのコマンドを打つなら
docker-compose run web rails〜
みたいな感じ
コンテナ管理
Kubernetesとdockerswarmの違い
「コンテナ管理ツールのdocekr swarm/Kubernetesについて調べてみた」
https://go-mount.hatenablog.com/entry/2018/09/27/220404
この記事がわかりやすかった。
・webサービスを提供するにしても、フロントエンドのWebサーバから、webサーバからの処理を返すアプリケーション、データベースなど、複数のアプリケーションが必要。それぞれアプリごとにコンテナを作って、複数コンテナを連携させたい。
・安定してサービス提供を行うため、データベースはMaster/Slaveの冗長構成で、別々のサーバで、別々にコンテナを動かして連携させたい。
・新しいコンテナを立ち上げるときは、リソースが比較的空いてるサーバに立ち上げてほしい
・コンテナがちゃんと起動しているか確認して、停止していたら再起動してほしい
上記の目的で使うもの。Kubernetesのほうが下記で優れているらしい
docker swarmの時と同じように、管理機能を持つmaster nodeと実際にコンテナを実行させるnodeに分かれています。docker swarmとさらに違う点としては、複数コンテナを集めてPodという単位でkubernetes上ではコンテナを管理します。