#author("2017-05-03T14:32:16+09:00","default:admin","admin")
#author("2017-05-03T16:09:27+09:00","default:admin","admin")
*基本 [#d4461705]
-[[Docker ドキュメント日本語化プロジェクト:http://docs.docker.jp/index.html]]

-[[Dockerのすべてが5分でわかるまとめ!(コマンド一覧付き):http://paiza.hatenablog.com/entry/docker_intro]]
-[[Dockerについて基本から最近追加された機能までまとめ:http://qiita.com/tigberd/items/b94ae2bf7d78685cd6f5]]
-[[(初心者向け)Dockerの使い方:http://qiita.com/butada/items/3e6cd338cb703eef64b4]]
-[[そろそろDockerを始めないとやばいと思い始めたあなたへ:http://tech.respect-pal.jp/docker_tutorial/]]

-[[Dockerコマンドメモ:http://qiita.com/curseoff/items/a9e64ad01d673abb6866]]
-[[Docker チートシート:https://www.qoosky.io/techs/0a0bd52cd3]]
-[[Docker ノウハウ集:http://qiita.com/eidera/items/19decbfc290b4776cfc3]]

-[[進化を続けるDockerの今を知る 記事一覧:https://thinkit.co.jp/series/4873]]
-[[Dockerを知る -周辺ツールと業界動向- 記事一覧:https://thinkit.co.jp/series/5186]]
-[[より深くDockerを知る 記事一覧:https://thinkit.co.jp/series/5197]]

-[[古賀政純の「攻めのITのためのDocker塾」:http://www.itmedia.co.jp/enterprise/series/1947/]]

**注意点 [#f5b7da97]
-Dockerではコンテナを削除するとコンテナ内のファイルシステム内に加えた変更点はすべて破棄されてしまう
--ボリューム機能やボリュームプラグインを利用する

**インストール [#nfda45ad]
 # yum install docker
 # chkconfig docker on
 # service docker start
 # systemctl enable docker.service

**コマンド [#ld02652f]
-イメージ検索
 # docker search [検索ワード]

-イメージ取得
 # docker pull [イメージ]
--イメージは [[Docker Hub:https://hub.docker.com]] で検索

-イメージ確認
 # docker images
 REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE
 docker.io/jwilder/nginx-proxy   latest              0951ca3d8b69        5 days ago          247.5 MB
 docker.io/meanjs/mean           latest              919ddbf406fc        10 days ago         763.4 MB

-イメージからコンテナ作成
 # docker run --name [コンテナ名] [イメージ] [コマンド]
 
 ex) $ docker run --name centos01 -i -t centos /bin/bash
----name コンテナ名を定義(ホスト名ではない)
---d コンテナをバックグラウンドで動かす
---p [ホスト側のポート番号]:[コンテナ内サービスがLISTENするポート番号]  -p :80 のようにコンテナ側のみ指定も可能
---i 起動してコンソールを開く
---t TTY(-it のように使う)
---e [環境変数]
----volumes-from [データコンテナ名] 
----expose [ポート番号] Expose a port or a range of ports
----rm=true コンテナをexitした時に自動的にコンテナを削除
----add-host=[host:ip] コンテナのhostsにホスト名と対応するIPアドレスを書き込む
----dns=[] DNSサーバ指定する
----dns-search=[] DNSドメイン名指定する
---h ホスト名を指定する
----mac-address=[] MACアドレスを指定する
---m メモリ制限値を指定する(割り当てではない)
----read-only=true コンテナを読み取り専用にする
----restart=always コンテナが終了した時にDockerデーモンがコンテナを再起動させる
---v ホストのディレクトリをマウントする(ホスト/tmpに コンテナ/homeを割り当てる場合/tmp:/home)
---w コンテナにワーキングディレクトリを作成する-vと組み合わせて使う?
---net 使用するネットワークを指定する
---noneの場合ネットワークが割り当てられない。
---hostを使用する場合ホストのIPを使用する。=> でも外部からはコンテナにつながらない

-コンテナ一覧を表示
 # docker ps
--オプションなしだと起動中のみ表示
---a 停止中を含む全てのコンテナを表示
----no-trunc 長いコマンドなどを省略せずにすべて表示

-コンテナの全情報を表示
 # docker inspect [コンテナID]

-コンテナのリソース消費状況を確認
 # docker stats コンテナ名, コンテナ名,...

-コンテナ内のプロセス一覧を表示
 # docker top コンテナ名

-コンテナを起動
 # docker start [コンテナID]

-コンテナを停止
 # docker stop [コンテナID]

-コンテナを再起動
 # docker restart [コンテナID]

-コンテナ内に入る
 # docker exec -it [コンテナ名] /bin/bash

-コンテナから出る
--Ctrl+p Ctrl+q
--exit で抜けるとコンテナが終了してしまうので注意!

-コンテナの一括停止
 # docker stop $(docker ps -q)

-コンテナの一括削除
 # docker rm $(docker ps -aq)

-ボリューム一覧
 # docker volume ls

-ボリューム削除
 # docker volume rm [ボリューム名]

-未使用ボリューム一括削除
 # docker volume prune

-イメージの一括削除
 # docker rmi `docker images -aq`

*頻出イメージ [#e4c05354]
-[[Docker Hub:https://hub.docker.com]]
-[[DockerHubすぐに使えるコンテナ集:https://www.j74th.com/docker/dockerhub/]]

-[[DockerでLaravel+PHP5.6+MySQL5.6+Apacheの環境構築:http://qiita.com/eidera/items/19decbfc290b4776cfc3]]

**[[centos:https://hub.docker.com/_/centos/]] [#c0a2244f]
-CentOS
 # docker pull centos
 # docker run -i -t centos /bin/bash

**[[busybox:https://hub.docker.com/_/busybox/]] [#xbff5c0d]
-標準UNIXコマンドの主要コマンドをまとめて1つの実行ファイル化したツール

**[[greyltc/lamp:https://hub.docker.com/r/greyltc/lamp/]] [#f2e616de]
-LAMP環境
 # docker pull docker pull greyltc/lamp
 # docker run --name lamp01 -p 80:80 -p 443:443 -d greyltc/lamp

**[[gargron/mastodon:https://hub.docker.com/r/gargron/mastodon/]] [#q0f0aaa8]
-Mastodonサーバ

-[[Mastodonを構成する要素の概要を理解する:http://qiita.com/ongstar/items/f0d4fc2a620380b527fa]]
-[[Mastodonを構成する要素を理解する(docker-compose編):http://qiita.com/ongstar/items/ec3b71c581b2b362aa3d]]
-[[Dockerで立ち上げたMastodonのDBを後から永続化する:http://qiita.com/yuu26/items/d4b9df0ba2d46e6b9f69]]

*docker-compose [#veab67e0]
-[[Docker composerでデータコンテナ分離とバックアップ・リストア:https://academy.gmocloud.com/advance/20160815/3457]]

-docker-composeはDockerのコマンドであり、docker-compose.ymlという設定ファイルに基づき複数のコンテナを用いたサービスを従来よりも簡単に管理できるようにするもの

-docker-compose.yml と docker-composeコマンドを使うことにより次のようにコンテナ作成を自動化できる
--コンテナ上のサービスはサーバ内のファイルやリポジトリを元に作成させられる
--サービス起動に必要な環境変数を外部ファイルから読み込める
--再起動時のサービスの振る舞いを設定できる
--サービス上のデータはデータボリュームを使い保管できる
--サービス上のポートをホスト側に繋ぐことが出来る
--サービス同士の依存関係が設定できる

**インストール [#aeec3c5b]
 # 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 作成 [#r98d4952]
-[[Compose ファイル・リファレンス:http://docs.docker.jp/compose/compose-file.html#volume-configuration-reference]]

 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」になる

*データの永続化 [#r6719dc6]
-[[Docker: データボリュームとデータボリュームコンテナ:http://blog.amedama.jp/entry/2016/02/18/011125]]
-[[Dockerのボリュームプラグインとストレージドライバ(Dockerの最新機能を使ってみよう:第2回):http://knowledge.sakura.ad.jp/knowledge/5021/]]

-データボリュームはそのコンテナ特有のデータを扱う場合に使い、データコンテナは複数のコンテナから参照されるデータを収める場合に使うといいのかも

**データボリューム [#c3f06f31]
-Dockerホストのディレクトリ(一般に「/var/lib/docker/volumes」)で、ここにコンテナの永続データを格納する
-このディレクトリはコンテナ起動時にマウントポイントとして表示され、管理者がこれを指定する
-1つまたは複数のコンテナ内に特別に指定されたディレクトリ(コンテナから見た時)
-Dockerで1つのオブジェクトとして管理されている
-コンテナをまたいで共有と再利用可能である
-データボリュームへ変更した結果はすぐに反映される
-コンテナ自身が消えてもデータボリュームは消えない

-コンテナを作成・起動時にデータボリュームも作成
 # docker run -t -i -v testvolume01:/data --name srv01 centos /bin/bash
--v [ボリューム名]:[コンテナ側のマウントポイント]

-データボリュームのみ作成
 # docker volume create --name mysql_data

**データボリュームコンテナ [#nd813223]
-データボリューム自体は、外部からアクセスができないため、データボリュームコンテナと呼ばれるコンテナを作成し、そこにデータボリュームをマウントする
-コンテナをまたいで永続的なデータが共有できる
-通常のコンテナと何ら変わらないが、コンテナのイメージはライトなbusyboxなどを使う

-[[Docker データボリュームコンテナをつくる:http://unskilled.site/docker-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%9C%E3%83%AA%E3%83%A5%E3%83%BC%E3%83%A0%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B/]]

 # docker create -it -v datavol01:/data --name datavol01 busybox
 
 # docker run -it --volumes-from datavol01 --name cent01 centos /bin/bash ... cent01 から /data が使える

**ボリュームプラグイン [#lde9da50]
-Dockerホスト以外のストレージをボリュームとして利用できる
-独自のプラグインを開発できるよう仕様も公開されている

-[[Use Docker Engine plugins:https://docs.docker.com/engine/extend/legacy_plugins/]]
-[[Dockerコンテナがフェイルオーバーしたとき、ストレージも自動的に切り替えてくれる。オープンソースの「REX-Ray」をDell EMCが無償公開中:http://www.publickey1.jp/blog/17/dockerrex-raydell_emcpr.html]]

*バックアップツール [#g3b2ff69]
**Convoy [#x3040db3]
-[[Dockerコンテナ環境のバックアップツール「Convoy」を使う:https://thinkit.co.jp/article/9542]]
-[[Docker+Convoyでバックアップ:http://qiita.com/kuri_hei/items/50c50b5430426f04cc25]]

-[[第10回 Docker環境におけるバックアップ/リストアの罠 (1/4):http://www.itmedia.co.jp/enterprise/articles/1511/11/news017.html]]
-[[第11回 Docker環境のバックアップをラクにする「Convoy」とは? (1/3):http://www.itmedia.co.jp/enterprise/articles/1511/25/news013.html]]
-[[第12回 Docker環境のバックアップツール「Convoy」を試す (1/3):http://www.itmedia.co.jp/enterprise/articles/1512/09/news001.html]]

-[[DockerでMinecraftサーバを動かし,Convoyでバックアップしてみた:http://windymelt.hatenablog.com/entry/2016/06/16/154614]]

-Convoyは数あるボリュームドライバのうちの一つである.
-Convoyにはデータボリュームをスナップショット・バックアップ/レストアする機能がある.
-Convoyを使うには,データ自体を記録するストレージと,メタデータを記録するストレージがそれぞれ必要である

***インストール [#ga758659]
 # 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が利用するボリュームとメタボリュームの作成と設定 [#kb656665]
 # truncate -s 100G data.vol
 # truncate -s 1G metadata.vol
 # losetup /dev/loop5 data.vol 
 # losetup /dev/loop6 metadata.vol
-truncate コマンドで [[Sparse File:http://hogem.hatenablog.com/entry/20110215/1298047477]] を作成。Sparse File は見かけ上は指定したサイズのものだが、ディスク消費量は実使用量になる。
-losetup コマンドで [[ループデバイス:http://blog.amedama.jp/entry/2015/09/22/002201]] を登録

***Convoyのデーモンを起動 [#r33d239f]
 # convoy daemon --drivers devicemapper --driver-opts dm.datadev=/dev/loop5 --driver-opts dm.metadatadev=/dev/loop6 &

*コンテナオーケストレーションツール [#ca3db3d6]
-クラスタ構成を自動的に維持してくれる

-[[KubernetesとMesos:Dockerのスケジューリングツールの違いを理解する:https://thinkit.co.jp/story/2015/04/10/5855]]

**Kubernetes [#e213f584]
-[[kubernetesによるDockerコンテナ管理入門:http://knowledge.sakura.ad.jp/tech/3681/]]
-[[Kubernetesの主な機能一覧 (v1.5時点):http://qiita.com/tkusumi/items/e37fca3084050ccc74d1]]

-[[minikubeでKubernetesのチュートリアルをやってみた:https://hnakamur.github.io/blog/2016/12/31/tried-kubernetes-tutorial-with-minikube/]]

-kubernetesが提供する機能
--関連するコンテナのグルーピング
--コンテナに割り振られるIPアドレスの管理
--コンテナ間のネットワークルーティング管理
--複数のコンテナを利用した負荷分散
--コンテナに割り当てるストレージの管理
--コンテナの監視

**Mesos [#b2a93329]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS