Docker Commands

Dockerの特徴

Linux Namespace

http://www.usupi.org/sysad/260.html

  • Linuxの namespace は、リソースを区切って、 あたかもそれだけしか存在しないように見せるためのものです。
  • 具体的には、mount、UTS、IPC、PID、ネットワークおよびユーザの6つが 対象となるリソースです。
  • 各プロセスの namespace は、 /proc/プロセスID/ns/ を以下のように見ることで、それとなく確認できます
  1. # ls -l /proc/$$/ns
  2. 合計 0
  3. lrwxrwxrwx. 1 root root 0 8 3 22:30 ipc -> ipc:[4026531839]
  4. lrwxrwxrwx. 1 root root 0 8 3 22:30 mnt -> mnt:[4026531840]
  5. lrwxrwxrwx. 1 root root 0 8 3 22:30 net -> net:[4026531956]
  6. lrwxrwxrwx. 1 root root 0 8 3 22:30 pid -> pid:[4026531836]
  7. lrwxrwxrwx. 1 root root 0 8 3 22:30 uts -> uts:[4026531838]

ちなみに、$$ は、bash のプロセスID。

Docker では、Linux Namespaceを利用し、プロセス、ネットワークの隔離といったコンテナ化を実現している。

Kernel 3.8+ である必要がある。

cgroups

Docker は、Control Groups(cgroups) を利用指定コンテナ内で使用するリソースを制御している。

http://ja.wikipedia.org/wiki/Cgroups

http://www.usupi.org/sysad/228.html

cgroups とは、プロセスグループのリソース(CPU、メモリ、ディスクI/Oなど)の利用を制限・隔離するLinuxカーネルの機能。

cgroups を使うと、CPU時間やメモリ、ネットワークなどといったリソースを、 グループ単位で割り当てたり、制限をかけることができます。
また、Linux Namespaceを使って、 PIDやネットワークなどをそれぞれ独立して持たせることができます。

cgroups は以下の機能を提供

  • リソース制限 : グループのメモリ使用量を制限可能
  • 優先順位 : CPU、I/Oスループットの割り振り
  • 計上 : あるシステムが利用しているリソースの計測
  • 隔離 : グループを他の名前空間に置き、切り離す
  • コントロール : グループのフリーズ、チェックポイント、再開など

UnionFS

http://ja.wikipedia.org/wiki/UnionFS

http://www.usupi.org/sysad/187.html

Dockerは環境構築の時に行った操作を、UnionFSに記録していく。

UnionFSは差分で管理されており、操作ごとに差分レイヤーが作成され、レイヤーを合わせてファイルシステムとなっている。

イメージとテンプレートとコンテナ

レイヤーを合わせたものを、イメージと呼んでいる。

このイメージが、テンプレートとなり、さらにレイヤーを重ねることが出来る。

イメージ上からのオペレーション実行毎にコンテナが作成され、読み書き可能なファイルシステムとして機能する。

名前をつけて管理することができ、REPOSITORY と呼ばれる。

イメージを分岐して作成したものに別名をつけた場合、TAGと呼ばれる。

コンテナの実行

イメージを実行すると、コンテナが作成される。このコンテナも差分で、ベースにはイメージを使用する。

イメージ部分は読み取り専用で、書込みが必要になった部分のみコピーオンライトでコンテナに書き込まれる。

Dockerfile

http://www.atmarkit.co.jp/ait/articles/1407/08/news031.html

コンテナの構成内容をまとめて記述するテキスト形式のファイル。

イメージをベースにオペレーションを積み重ねるように記述する。

コンテナをDockerfile から構築するには、build コマンドを使用する。

基本操作

バージョンの確認(version)

  1. # docker version
  2. Client version: 1.0.0
  3. Client API version: 1.12
  4. Go version (client): go1.2.2
  5. Git commit (client): 63fe64c/1.0.0
  6. Server version: 1.0.0
  7. Server API version: 1.12
  8. Go version (server): go1.2.2
  9. Git commit (server): 63fe64c/1.0.0

情報の確認(info)

  1. # docker info
  2. Containers: 1
  3. Images: 3
  4. Storage Driver: devicemapper
  5. Pool Name: docker-253:1-203234686-pool
  6. Data file: /var/lib/docker/devicemapper/devicemapper/data
  7. Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
  8. Data Space Used: 569.2 Mb
  9. Data Space Total: 102400.0 Mb
  10. Metadata Space Used: 0.9 Mb
  11. Metadata Space Total: 2048.0 Mb
  12. Execution Driver: native-0.2
  13. Kernel Version: 3.10.0-123.el7.x86_64

イメージの取得

Docker Registry

https://registry.hub.docker.com/

docker_registry

取得(pull)

  1. # docker pull openshift/wildfly-8-centos
  2. Pulling repository openshift/wildfly-8-centos
  3. f3ba582d4042: Download complete
  4. f3ba582d4042: Pulling image (latest) from openshift/wildfly-8-centos
  5. 511136ea3c5a: Download complete
  6. :
  7. 7e1fd6711692: Download complete
  8. 6244d7d2948c: Download complete

確認(images)

  1. # docker images
  2. REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
  3. openshift/wildfly-8-centos latest f3ba582d4042 6 days ago 539.3 MB
  4. centos latest 1a7dc42f78ba 8 days ago 236.4 MB

実行

インタラクティブ実行(run -t)

run -t でインタラクティブにシェルを実行出来る

任意のコマンドをコンテナ内で実行可能

停止する場合は、Ctrl+D

  1. # docker run -i -t -h openshift/wildfly-8-centos openshift/wildfly-8-centos /bin/bash
  2. bash-4.1#

バックグラウンド実行(run -d)

  1. # docker run -d openshift/wildfly-8-centos /wildfly/bin/standalone.sh
  2. 564e5343046f97da12ba09273020eabbb7a84d4b0299f13c256b43aa449d1bb7

プロセスの確認(ps)

  1. # docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 564e5343046f openshift/wildfly-8-centos:latest /wildfly/bin/standal About a minute ago Up About a minute 7600/tcp, 8080/tcp, 9990/tcp, 9999/tcp insane_euclid

プロセス監視(top)

  1. # docker top 564e5343046f
  2. UID PID PPID C STIME TTY TIME CMD
  3. root 5739 1401 0 23:22 ? 00:00:00 /bin/sh /wildfly/bin/standalone.sh
  4. root 5867 5739 14 23:22 ? 00:00:07 java -D[Standalone] -server -XX:+UseSerialGC -Xms40m -Xmx256m -XX:MaxPermSize=102m -XX:+AggressiveOpts -Dorg.apache.tomcat.util.LOW_MEMORY=true -DOPENSHIFT_APP_UUID= -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Dorg.jboss.resolver.warning=true -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8 -Djboss.node.name=564e5343046f -Djgroups.bind_addr=0.0.0.0 -Dorg.apache.coyote.http11.Http11Protocol.COMPRESSION=on -Dorg.jboss.boot.log.file=/wildfly/standalone/log/server.log -Dlogging.configuration=file:/wildfly/standalone/configuration/logging.properties -jar /wildfly/jboss-modules.jar -mp /wildfly/provided_m

コンテナの停止(stop)

  1. # docker stop 564e5343046f
  2. 564e5343046f

コンテナの強制終了(kill)

  1. # docker kill faff5b7c7492
  2. faff5b7c7492

コンテナの再起動(restart)

  1. # docker restart 564e5343046f
  2. 564e5343046f

イメージの管理

イメージの削除(rmi)

  1. # docker images
  2. REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
  3. openshift/wildfly-8-centos latest f3ba582d4042 3 weeks ago 539.3 MB
  4. <none> <none> 1a7dc42f78ba 3 weeks ago 236.4 MB
  5. # docker rmi -f 1a7dc42f78ba
  6. Deleted: 1a7dc42f78ba213ec1ac5cd04930011334536214ad26c8000f1eec72e302c041

不要になったコンテナとイメージの削除

http://blog.n-z.jp/blog/2013-12-24-docker-rm.html

停止しているコンテナを削除

  1. docker rm `docker ps -a -q`

不要なイメージ(REPOSTORYがnone)の削除

  1. docker rmi $(docker images | awk '/^<none>/ {print $3}')

コンテナ状態の確認(inspect)

  1. ]# docker inspect faff5b7c7492
  2. [{
  3. "Args": [],
  4. "Config": {
  5. "AttachStderr": false,
  6. "AttachStdin": false,
  7. "AttachStdout": false,
  8. "Cmd": [
  9. "/wildfly/bin/standalone.sh"
  10. ],
  11. "CpuShares": 0,
  12. "Cpuset": "",
  13. "Domainname": "",
  14. "Entrypoint": null,
  15. "Env": [
  16. "HOME=/",
  17. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  18. "STI_SCRIPTS_URL=https://raw.githubusercontent.com/openshift/wildfly-8-centos/master/.sti/bin"
  19. ],
  20. "ExposedPorts": {
  21. "7600/tcp": {},
  22. "8080/tcp": {},
  23. "9990/tcp": {},
  24. "9999/tcp": {}
  25. },
  26. "Hostname": "faff5b7c7492",
  27. "Image": "openshift/wildfly-8-centos",
  28. "Memory": 0,
  29. "MemorySwap": 0,
  30. "NetworkDisabled": false,
  31. "OnBuild": null,
  32. "OpenStdin": false,
  33. "PortSpecs": null,
  34. "StdinOnce": false,
  35. "Tty": false,
  36. "User": "",
  37. "Volumes": null,
  38. "WorkingDir": "/opt/wildfly/source"
  39. },
  40. "Created": "2014-08-03T14:37:58.975398521Z",
  41. "Driver": "devicemapper",
  42. "ExecDriver": "native-0.2",
  43. "HostConfig": {
  44. "Binds": null,
  45. "ContainerIDFile": "",
  46. "Dns": null,
  47. "DnsSearch": null,
  48. "Links": null,
  49. "LxcConf": [],
  50. "NetworkMode": "bridge",
  51. "PortBindings": {
  52. "7600/tcp": null,
  53. "8080/tcp": null,
  54. "9990/tcp": null,
  55. "9999/tcp": null
  56. },
  57. "Privileged": false,
  58. "PublishAllPorts": false,
  59. "VolumesFrom": null
  60. },
  61. "HostnamePath": "/var/lib/docker/containers/faff5b7c749257ff79180b5c9b90e3cadabec91a76895c086ec4e66fd84b3733/hostname",
  62. "HostsPath": "/var/lib/docker/containers/faff5b7c749257ff79180b5c9b90e3cadabec91a76895c086ec4e66fd84b3733/hosts",
  63. "Id": "faff5b7c749257ff79180b5c9b90e3cadabec91a76895c086ec4e66fd84b3733",
  64. "Image": "f3ba582d4042e5e506e787e102bd122617cf4d574a32ff75ec5c5606aa60c4f0",
  65. "MountLabel": "system_u:object_r:svirt_sandbox_file_t:s0:c219,c329",
  66. "Name": "/compassionate_babbage",
  67. "NetworkSettings": {
  68. "Bridge": "docker0",
  69. "Gateway": "172.17.42.1",
  70. "IPAddress": "172.17.0.3",
  71. "IPPrefixLen": 16,
  72. "PortMapping": null,
  73. "Ports": {
  74. "7600/tcp": null,
  75. "8080/tcp": null,
  76. "9990/tcp": null,
  77. "9999/tcp": null
  78. }
  79. },
  80. "Path": "/wildfly/bin/standalone.sh",
  81. "ProcessLabel": "system_u:system_r:svirt_lxc_net_t:s0:c219,c329",
  82. "ResolvConfPath": "/etc/resolv.conf",
  83. "State": {
  84. "ExitCode": 0,
  85. "FinishedAt": "2014-08-19T13:58:30.659032186Z",
  86. "Paused": false,
  87. "Pid": 3503,
  88. "Running": true,
  89. "StartedAt": "2014-08-19T14:00:08.994894748Z"
  90. },
  91. "Volumes": {},
  92. "VolumesRW": {}
  93. }
  94. ]

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です