- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2017-05-01T23:32:46+09:00","default:admin","admin")
#author("2023-04-05T00:28:37+00:00","default:admin","admin")
-[[実践 Docker - ソフトウェアエンジニアの「Docker よくわからない」を終わりにする本:https://zenn.dev/suzuki_hoge/books/2022-03-docker-practice-8ae36c33424b59]]
*基本 [#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 [検索ワード]
*ネットワーク [#j450f144]
-[[Docker コンテナ・ネットワークの理解:https://docs.docker.jp/engine/userguide/networking/dockernetworks.html]]
-[[network コマンドを使う:https://docs.docker.jp/engine/userguide/networking/work-with-networks.html]]
-イメージ取得
$ docker pull [イメージ]
--イメージは [[Docker Hub:https://hub.docker.com]] で検索
-Docker上のネットワークを確認
# docker network ls
NETWORK ID NAME DRIVER SCOPE
68404cfc20d7 bridge bridge local
8734698e49f4 host host local
73a2d6fc1070 none null local
-イメージ確認
$ 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 network inspect bridge
[
{
"Name": "bridge",
"Id": "68404cfc20d79e6884e578fb1666b065d22c6a5168e8d3e311dc368339bc484d",
"Created": "2021-05-18T08:39:46.2054623Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"66768b3228e486a9cee4377694961978599529f25906ee61b31ec075d5732d7e": {
"Name": "flamboyant_lamarr",
"EndpointID": "3a4743a6313199658f0d12e8ba97ee0450441b8c0e864e0ba10838860bf935b4",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
-イメージからコンテナ作成
$ docker run --name [コンテナ名] [イメージ] [コマンド]
*頻出イメージ [#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-compose.yml の内容を理解しよう:https://futureys.tokyo/lets-understand-contents-of-docker-compose-yml/]]
-[[プラットフォーム依存しない新しい「Docker Compose」マルチコンテナをクラウドに簡単デプロイ:https://logmi.jp/tech/articles/324732]]
-[[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
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を使用する。=> でも外部からはコンテナにつながらない
volumes:
lamp01_html:
driver: local
lamp01_mysql:
driver: local
-コンテナ一覧を表示
$ docker ps
--オプションなしだと起動中のみ表示
---a 停止中を含む全てのコンテナを表示
----no-trunc 長いコマンドなどを省略せずにすべて表示
-注意点
--YAMLファイルはタブが使えない。スペースを打て!
--コンテナ名を指定したい場合は container_name を指定
--バージョン2のファイル では名前を付けたボリュームを使うにはトップ・レベルの volumes キー を指定する必要がある点に注意
-コンテナのリソース消費状況を確認
$ docker stats コンテナ名, コンテナ名,...
-疑問点
--名前付きデータボリュームXXXの名前が勝手に「docker_XXX」になる
-コンテナ内のプロセス一覧を表示
$ docker top コンテナ名
*データの永続化 [#r6719dc6]
-[[Docker: データボリュームとデータボリュームコンテナ:http://blog.amedama.jp/entry/2016/02/18/011125]]
-[[Dockerのボリュームプラグインとストレージドライバ(Dockerの最新機能を使ってみよう:第2回):http://knowledge.sakura.ad.jp/knowledge/5021/]]
-コンテナを起動
$ docker start [コンテナID]
-データボリュームはそのコンテナ特有のデータを扱う場合に使い、データコンテナは複数のコンテナから参照されるデータを収める場合に使うといいのかも
-コンテナを停止
$ docker stop [コンテナID]
**データボリューム [#c3f06f31]
-Dockerホストのディレクトリ(一般に「/var/lib/docker/volumes」)で、ここにコンテナの永続データを格納する
-このディレクトリはコンテナ起動時にマウントポイントとして表示され、管理者がこれを指定する
-1つまたは複数のコンテナ内に特別に指定されたディレクトリ(コンテナから見た時)
-Dockerで1つのオブジェクトとして管理されている
-コンテナをまたいで共有と再利用可能である
-データボリュームへ変更した結果はすぐに反映される
-コンテナ自身が消えてもデータボリュームは消えない
-コンテナを再起動
$ docker restart [コンテナID]
-コンテナを作成・起動時にデータボリュームも作成
# docker run -t -i -v testvolume01:/data --name srv01 centos /bin/bash
--v [ボリューム名]:[コンテナ側のマウントポイント]
-コンテナ内に入る
$ docker exec -it mycentos /bin/bash
-データボリュームのみ作成
# docker volume create --name mysql_data
-コンテナから出る
--Ctrl+p Ctrl+q
--exit で抜けるとコンテナが終了してしまうので注意!
**データボリュームコンテナ [#nd813223]
-データボリューム自体は、外部からアクセスができないため、データボリュームコンテナと呼ばれるコンテナを作成し、そこにデータボリュームをマウントする
-コンテナをまたいで永続的なデータが共有できる
-通常のコンテナと何ら変わらないが、コンテナのイメージはライトなbusyboxなどを使う
-コンテナの一括停止
$ docker stop $(docker ps -q)
-[[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 rm $(docker ps -aq)
# docker create -it -v datavol01:/data --name datavol01 busybox
# docker run -it --volumes-from datavol01 --name cent01 centos /bin/bash ... cent01 から /data が使える
-イメージの一括削除
$ docker rmi `docker images -aq`
**ボリュームプラグイン [#lde9da50]
-Dockerホスト以外のストレージをボリュームとして利用できる
-独自のプラグインを開発できるよう仕様も公開されている
*頻出イメージ [#e4c05354]
-[[Docker Hub:https://hub.docker.com]]
-[[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]]
**[[centos:https://hub.docker.com/_/centos/]] [#c0a2244f]
-CentOS
$ docker pull centos
$ docker run -i -t centos /bin/bash
*バックアップツール [#g3b2ff69]
**Convoy [#x3040db3]
-[[Dockerコンテナ環境のバックアップツール「Convoy」を使う:https://thinkit.co.jp/article/9542]]
-[[Docker+Convoyでバックアップ:http://qiita.com/kuri_hei/items/50c50b5430426f04cc25]]
**[[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
-[[第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]]
*管理ツール [#ae4f276a]
-[[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]
*Moby [#t45d4b1e]
-[[「Moby」ベースとなったオープンソース版Dockerの最新状況:https://knowledge.sakura.ad.jp/11068/]]
*Tips [#oc5089e1]
-[[dockerのコンテナに固定IPを振る:https://qiita.com/reflet/items/e10442c16834a9ce15b3]]