基本 †
注意点 †
- Dockerではコンテナを削除するとコンテナ内のファイルシステム内に加えた変更点はすべて破棄されてしまう
インストール †
# yum install docker
# chkconfig docker on
# service docker start
# systemctl enable docker.service
コマンド †
- イメージ検索
# docker search [検索ワード]
- イメージ取得
# docker pull [イメージ]
- コンテナ一覧を表示
# docker ps
- オプションなしだと起動中のみ表示
- -a 停止中を含む全てのコンテナを表示
- --no-trunc 長いコマンドなどを省略せずにすべて表示
- コンテナ内のプロセス一覧を表示
# docker top コンテナ名
- コンテナを起動
# docker start [コンテナID]
- コンテナを停止
# docker stop [コンテナID]
- コンテナから出る
- Ctrl+p Ctrl+q
- exit で抜けるとコンテナが終了してしまうので注意!
- ボリューム一覧
# docker volume ls
- 未使用ボリューム一括削除
# docker volume prune
頻出イメージ †
- 標準UNIXコマンドの主要コマンドをまとめて1つの実行ファイル化したツール
docker-compose †
- docker-composeはDockerのコマンドであり、docker-compose.ymlという設定ファイルに基づき複数のコンテナを用いたサービスを従来よりも簡単に管理できるようにするもの
- docker-compose.yml と docker-composeコマンドを使うことにより次のようにコンテナ作成を自動化できる
- コンテナ上のサービスはサーバ内のファイルやリポジトリを元に作成させられる
- サービス起動に必要な環境変数を外部ファイルから読み込める
- 再起動時のサービスの振る舞いを設定できる
- サービス上のデータはデータボリュームを使い保管できる
- サービス上のポートをホスト側に繋ぐことが出来る
- サービス同士の依存関係が設定できる
インストール †
# curl -L https://github.com/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
docker-compose.yml 作成 †
version: '2'
services:
#
# nginx-proxy
#
proxy:
container_name: proxy
image: docker.io/jwilder/nginx-proxy
ports:
- "8080:80"
- "8443:443"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
#
# lamp (foobar.fika.pw)
#
lamp01:
container_name: lamp01
depends_on:
- proxy
image: greyltc/lamp
ports:
- "8090-8180:80"
- "8453-8543:443"
environment:
VIRTUAL_HOST: foobar.fika.pw
volumes:
- lamp01_html:/srv/http
- lamp01_mysql:/var/lib/mysql
volumes:
lamp01_html:
driver: local
lamp01_mysql:
driver: local
- 注意点
- YAMLファイルはタブが使えない。スペースを打て!
- コンテナ名を指定したい場合は container_name を指定
- バージョン2のファイル では名前を付けたボリュームを使うにはトップ・レベルの volumes キー を指定する必要がある点に注意
- 疑問点
- 名前付きデータボリュームXXXの名前が勝手に「docker_XXX」になる
データの永続化 †
- データボリュームはそのコンテナ特有のデータを扱う場合に使い、データコンテナは複数のコンテナから参照されるデータを収める場合に使うといいのかも
データボリューム †
- Dockerホストのディレクトリ(一般に「/var/lib/docker/volumes」)で、ここにコンテナの永続データを格納する
- このディレクトリはコンテナ起動時にマウントポイントとして表示され、管理者がこれを指定する
- 1つまたは複数のコンテナ内に特別に指定されたディレクトリ(コンテナから見た時)
- Dockerで1つのオブジェクトとして管理されている
- コンテナをまたいで共有と再利用可能である
- データボリュームへ変更した結果はすぐに反映される
- コンテナ自身が消えてもデータボリュームは消えない
データボリュームコンテナ †
- データボリューム自体は、外部からアクセスができないため、データボリュームコンテナと呼ばれるコンテナを作成し、そこにデータボリュームをマウントする
- コンテナをまたいで永続的なデータが共有できる
- 通常のコンテナと何ら変わらないが、コンテナのイメージはライトなbusyboxなどを使う
# docker create -it -v datavol01:/data --name datavol01 busybox
# docker run -it --volumes-from datavol01 --name cent01 centos /bin/bash ... cent01 から /data が使える
ボリュームプラグイン †
- Dockerホスト以外のストレージをボリュームとして利用できる
- 独自のプラグインを開発できるよう仕様も公開されている
バックアップツール †
Convoy †
- Convoyは数あるボリュームドライバのうちの一つである.
- Convoyにはデータボリュームをスナップショット・バックアップ/レストアする機能がある.
- Convoyを使うには,データ自体を記録するストレージと,メタデータを記録するストレージがそれぞれ必要である
インストール †
# https://github.com/rancher/convoy/releases/download/v0.5.0/convoy.tar.gz
# tar xvf convoy.tar.gz
# cp convoy/convoy convoy/convoy-pdata_tools /usr/local/bin/
# mkdir -p /etc/docker/plugins/
# bash -c 'echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec'
Convoyが利用するボリュームとメタボリュームの作成と設定 †
# truncate -s 100G data.vol
# truncate -s 1G metadata.vol
# losetup /dev/loop5 data.vol
# losetup /dev/loop6 metadata.vol
- truncate コマンドで Sparse File を作成。Sparse File は見かけ上は指定したサイズのものだが、ディスク消費量は実使用量になる。
- losetup コマンドで ループデバイス を登録
Convoyのデーモンを起動 †
# convoy daemon --drivers devicemapper --driver-opts dm.datadev=/dev/loop5 --driver-opts dm.metadatadev=/dev/loop6 &
コンテナオーケストレーションツール †
Kubernetes †
- kubernetesが提供する機能
- 関連するコンテナのグルーピング
- コンテナに割り振られるIPアドレスの管理
- コンテナ間のネットワークルーティング管理
- 複数のコンテナを利用した負荷分散
- コンテナに割り当てるストレージの管理
- コンテナの監視
Mesos †