1)运行容器流程

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载或指定私有镜像仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止,或者容器持久运行

2)容器常规命令

四、Docker容器管理 - 图1

2.1)容器运行(docker run)
如何让容器长期运行,因为容器的生命周期依赖于启动时执行的命令,只要该命令不结束,容器就不会退出
参数 -d 以后台方式启动容器

  1. -i 交互模式
  2. -t 终端
  3. -d 后台运行
  4. -p 端口映射
  5. -v 源地址(宿主机): 目标地址(容器)
  6. --name 指定容器的名字
  7. -h 指定容器的主机名
  8. --restart=always 每次重启服务,容器跟着重启
  1. #启动容器
  2. docker run -itd --name nginx-web -p 82:80 -v ~/htdoc:/usr/share/apache2/htdocs httpd

2.2)容器查看、停止、重启

  1. #容器查看
  2. [root@blog-xhaihua htdocs]# docker ps|grep nginx-web
  3. 50b8c2c60025 httpd "httpd-foreground" 3 minutes ago Up 3 minutes 0.0.0.0:82->80/tcp nginx-web
  4. #停止
  5. [root@blog-xhaihua htdocs]# docker stop nginx-web
  6. nginx-web
  7. #启动
  8. [root@blog-xhaihua htdocs]# docker start nginx-web
  9. nginx-web
  10. #重启
  11. [root@blog-xhaihua htdocs]# docker restart nginx-web
  12. nginx-we

2.3)容器信息查看

  1. [root@blog-xhaihua htdocs]# docker inspect nginx-web
  2. [
  3. {
  4. "Id": "50b8c2c600252d373d71c5f6064d31ffc3fbbc97c44c1b4adc2ba22fed3cffec",
  5. "Created": "2021-03-05T07:21:49.747776475Z",
  6. "Path": "httpd-foreground",
  7. "Args": [],
  8. "State": {
  9. "Status": "running",
  10. "Running": true,
  11. "Paused": false,
  12. "Restarting": false,
  13. "OOMKilled": false,
  14. "Dead": false,
  15. "Pid": 24839,
  16. "ExitCode": 0,
  17. "Error": "",
  18. "StartedAt": "2021-03-05T07:25:31.299739589Z",
  19. "FinishedAt": "2021-03-05T07:25:30.928336873Z"
  20. },
  21. "Image": "sha256:683a7aad17d3baed344799b397c55a9ccbc3ddabf0d077862739585ee76d4cb3",
  22. "ResolvConfPath": "/data/docker/containers/50b8c2c600252d373d71c5f6064d31ffc3fbbc97c44c1b4adc2ba22fed3cffec/resolv.conf",
  23. "HostnamePath": "/data/docker/containers/50b8c2c600252d373d71c5f6064d31ffc3fbbc97c44c1b4adc2ba22fed3cffec/hostname",
  24. "HostsPath": "/data/docker/containers/50b8c2c600252d373d71c5f6064d31ffc3fbbc97c44c1b4adc2ba22fed3cffec/hosts",
  25. "LogPath": "/data/docker/containers/50b8c2c600252d373d71c5f6064d31ffc3fbbc97c44c1b4adc2ba22fed3cffec/50b8c2c600252d373d71c5f6064d31ffc3fbbc97c44c1b4adc2ba22fed3cffec-json.log",
  26. "Name": "/nginx-web",
  27. "RestartCount": 0,
  28. "Driver": "overlay2",
  29. "Platform": "linux",
  30. "MountLabel": "",
  31. "ProcessLabel": "",
  32. "AppArmorProfile": "",
  33. "ExecIDs": null,
  34. "HostConfig": {
  35. "Binds": [
  36. "/root/htdocs:/usr/share/apache2/htdocs"
  37. ],
  38. "ContainerIDFile": "",
  39. "LogConfig": {
  40. "Type": "json-file",
  41. "Config": {}
  42. },
  43. "NetworkMode": "default",
  44. "PortBindings": {
  45. "80/tcp": [
  46. {
  47. "HostIp": "",
  48. "HostPort": "82"
  49. }
  50. ]
  51. },
  52. "RestartPolicy": {
  53. "Name": "no",
  54. "MaximumRetryCount": 0
  55. },
  56. "AutoRemove": false,
  57. "VolumeDriver": "",
  58. "VolumesFrom": null,
  59. "CapAdd": null,
  60. "CapDrop": null,
  61. "Capabilities": null,
  62. "Dns": [],
  63. "DnsOptions": [],
  64. "DnsSearch": [],
  65. "ExtraHosts": null,
  66. "GroupAdd": null,
  67. "IpcMode": "private",
  68. "Cgroup": "",
  69. "Links": null,
  70. "OomScoreAdj": 0,
  71. "PidMode": "",
  72. "Privileged": false,
  73. "PublishAllPorts": false,
  74. "ReadonlyRootfs": false,
  75. "SecurityOpt": null,
  76. "UTSMode": "",
  77. "UsernsMode": "",
  78. "ShmSize": 67108864,
  79. "Runtime": "runc",
  80. "ConsoleSize": [
  81. 0,
  82. 0
  83. ],
  84. "Isolation": "",
  85. "CpuShares": 0,
  86. "Memory": 0,
  87. "NanoCpus": 0,
  88. "CgroupParent": "",
  89. "BlkioWeight": 0,
  90. "BlkioWeightDevice": [],
  91. "BlkioDeviceReadBps": null,
  92. "BlkioDeviceWriteBps": null,
  93. "BlkioDeviceReadIOps": null,
  94. "BlkioDeviceWriteIOps": null,
  95. "CpuPeriod": 0,
  96. "CpuQuota": 0,
  97. "CpuRealtimePeriod": 0,
  98. "CpuRealtimeRuntime": 0,
  99. "CpusetCpus": "",
  100. "CpusetMems": "",
  101. "Devices": [],
  102. "DeviceCgroupRules": null,
  103. "DeviceRequests": null,
  104. "KernelMemory": 0,
  105. "KernelMemoryTCP": 0,
  106. "MemoryReservation": 0,
  107. "MemorySwap": 0,
  108. "MemorySwappiness": null,
  109. "OomKillDisable": false,
  110. "PidsLimit": null,
  111. "Ulimits": null,
  112. "CpuCount": 0,
  113. "CpuPercent": 0,
  114. "IOMaximumIOps": 0,
  115. "IOMaximumBandwidth": 0,
  116. "MaskedPaths": [
  117. "/proc/asound",
  118. "/proc/acpi",
  119. "/proc/kcore",
  120. "/proc/keys",
  121. "/proc/latency_stats",
  122. "/proc/timer_list",
  123. "/proc/timer_stats",
  124. "/proc/sched_debug",
  125. "/proc/scsi",
  126. "/sys/firmware"
  127. ],
  128. "ReadonlyPaths": [
  129. "/proc/bus",
  130. "/proc/fs",
  131. "/proc/irq",
  132. "/proc/sys",
  133. "/proc/sysrq-trigger"
  134. ]
  135. },
  136. "GraphDriver": {
  137. "Data": {
  138. "LowerDir": "/data/docker/overlay2/e3b71a034ac3258b33471f6e4d61f095aa00f7246a85c9109fc2eca64984909d-init/diff:/data/docker/overlay2/348bd2dcb601598d2be8de1e14fa4d6539379a465eb29768f7d0828a7c1406e6/diff:/data/docker/overlay2/87edc866fe5bc72b0a25ce7bba0334fc2bf6485567abcea43055f2dbae383461/diff:/data/docker/overlay2/18e324e0c33c3049f16503ac9efce87134f39941a5a81b5dd260ef3231599810/diff:/data/docker/overlay2/717b8f179a9e86e86f15779dcd447e1c67c9adfd43409062639e1a0f96fc900a/diff:/data/docker/overlay2/d26b86158e31c09cf1dfc1c73ac8983a95d2e01914fb12ab1b16cf283d3a2035/diff",
  139. "MergedDir": "/data/docker/overlay2/e3b71a034ac3258b33471f6e4d61f095aa00f7246a85c9109fc2eca64984909d/merged",
  140. "UpperDir": "/data/docker/overlay2/e3b71a034ac3258b33471f6e4d61f095aa00f7246a85c9109fc2eca64984909d/diff",
  141. "WorkDir": "/data/docker/overlay2/e3b71a034ac3258b33471f6e4d61f095aa00f7246a85c9109fc2eca64984909d/work"
  142. },
  143. "Name": "overlay2"
  144. },
  145. "Mounts": [
  146. {
  147. "Type": "bind",
  148. "Source": "/root/htdocs",
  149. "Destination": "/usr/share/apache2/htdocs",
  150. "Mode": "",
  151. "RW": true,
  152. "Propagation": "rprivate"
  153. }
  154. ],
  155. "Config": {
  156. "Hostname": "50b8c2c60025",
  157. "Domainname": "",
  158. "User": "",
  159. "AttachStdin": false,
  160. "AttachStdout": false,
  161. "AttachStderr": false,
  162. "ExposedPorts": {
  163. "80/tcp": {}
  164. },
  165. "Tty": true,
  166. "OpenStdin": true,
  167. "StdinOnce": false,
  168. "Env": [
  169. "PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  170. "HTTPD_PREFIX=/usr/local/apache2",
  171. "HTTPD_VERSION=2.4.46",
  172. "HTTPD_SHA256=740eddf6e1c641992b22359cabc66e6325868c3c5e2e3f98faf349b61ecf41ea",
  173. "HTTPD_PATCHES="
  174. ],
  175. "Cmd": [
  176. "httpd-foreground"
  177. ],
  178. "Image": "httpd",
  179. "Volumes": null,
  180. "WorkingDir": "/usr/local/apache2",
  181. "Entrypoint": null,
  182. "OnBuild": null,
  183. "Labels": {},
  184. "StopSignal": "SIGWINCH"
  185. },
  186. "NetworkSettings": {
  187. "Bridge": "",
  188. "SandboxID": "315c7a96492e9ed2764b0fc7e315eabb2d1e5df8fab008bea0befc1370f21b45",
  189. "HairpinMode": false,
  190. "LinkLocalIPv6Address": "",
  191. "LinkLocalIPv6PrefixLen": 0,
  192. "Ports": {
  193. "80/tcp": [
  194. {
  195. "HostIp": "0.0.0.0",
  196. "HostPort": "82"
  197. }
  198. ]
  199. },
  200. "SandboxKey": "/var/run/docker/netns/315c7a96492e",
  201. "SecondaryIPAddresses": null,
  202. "SecondaryIPv6Addresses": null,
  203. "EndpointID": "c885e1c23fe91b7756b398a8759eceb1acdaa1d6925e767c59d86faa657afb0e",
  204. "Gateway": "172.17.0.1",
  205. "GlobalIPv6Address": "",
  206. "GlobalIPv6PrefixLen": 0,
  207. "IPAddress": "172.17.0.3",
  208. "IPPrefixLen": 16,
  209. "IPv6Gateway": "",
  210. "MacAddress": "02:42:ac:11:00:03",
  211. "Networks": {
  212. "bridge": {
  213. "IPAMConfig": null,
  214. "Links": null,
  215. "Aliases": null,
  216. "NetworkID": "b9cf8270fe55ca0335b3c6c3c278d1bd12a71f1494314cbad16c1db995ccb6e7",
  217. "EndpointID": "c885e1c23fe91b7756b398a8759eceb1acdaa1d6925e767c59d86faa657afb0e",
  218. "Gateway": "172.17.0.1",
  219. "IPAddress": "172.17.0.3",
  220. "IPPrefixLen": 16,
  221. "IPv6Gateway": "",
  222. "GlobalIPv6Address": "",
  223. "GlobalIPv6PrefixLen": 0,
  224. "MacAddress": "02:42:ac:11:00:03",
  225. "DriverOpts": null
  226. }
  227. }
  228. }
  229. }
  230. ]

2.4)容器删除

  1. #删除终止状态的容器
  2. docker rm [CONTAINER ID] | 容器名
  3. #删除所有处于终止状态的容器
  4. docker container prune
  5. #删除未被使用的数据卷
  6. docker volume prune
  7. #删除运行中的容器
  8. docker rm -f [CONTAINER ID]| 容器名
  9. #批量停止所有的容器
  10. docker stop $(docker ps -a -q)
  11. #批量删除所有的容器
  12. docker rm $(docker ps -a -q)

3) 进入容器的方法

  • docker attach (不常用)

    通过docker attach可以attach到容器启动命令的终端,比如查看日志

  • docker exec (常用) ```shell [root@blog-xhaihua htdocs]# docker exec -it nginx-web bash root@6561766f69a3:/usr/local/apache2#

格式

docker exec -it 容器ID(前5位)| 容器名 bash | sh

  1. <a name="SWQbO"></a>
  2. ### 4)容器的导出和导入
  3. ```shell
  4. #这样将导出容器快照到本地文件
  5. docker export [CONTAINER ID] | 容器名 -o [tar file]
  6. #案例
  7. [root@blog-xhaihua htdocs]# docker export nginx-web -o nginx-web.tar.gz
  8. #从容器快照文件中再导入为镜像
  9. cat [tar file] | docker import - [name:tag]
  10. #案例:
  11. cat nginx-web.tar.gz | docker import -

5)Docker的web端管理平台

Portainer 和 Shipyard

  • Shipyard (停止维护)

Shipyard是在Docker Swarm的基础上,管理Docker资源,包括容器,镜像,注册表等

  • Portainer

参考博客: https://www.cnblogs.com/xianz666/p/14275409.html