#author("2017-05-02T21:44:13+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]]

**注意点 [#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 [環境変数]
----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 stats コンテナ名, コンテナ名,...

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

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

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

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

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

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

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

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

-イメージの一括削除
 # 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.3.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
 # chmod +x /usr/local/bin/docker-compose

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

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

 # docker run -t -i -v testvolume01:/data --name srv01 centos /bin/bash
--v [ボリューム名]:[コンテナ側のマウントポイント]

**データボリュームコンテナ [#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/]]

**ボリュームプラグイン [#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]]

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

**Mesos [#b2a93329]

**Kubernetes [#e213f584]
-[[kubernetesによるDockerコンテナ管理入門:http://knowledge.sakura.ad.jp/tech/3681/]]

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