Docker Container基础操作(二)

举报
brucexiaogui 发表于 2021/12/30 00:09:56 2021/12/30
【摘要】 Docker Container基础操作(二) 一、场景描述 1、benjiezhuyao本节主要介绍Docker容器的基本操作命令。 2、操作项主要包含容器的启动、停止、查看容器、删除容器、端口映射、容器日志 二、容器基本操作 1、容器基本命令总览 Docker容器实践描述 1、通过运行一个web应...

Docker Container基础操作(二)

一、场景描述

1、benjiezhuyao本节主要介绍Docker容器的基本操作命令。

2、操作项主要包含容器的启动、停止、查看容器、删除容器、端口映射、容器日志

二、容器基本操作

1、容器基本命令总览

Docker容器实践描述

1、通过运行一个web应用容器,演示容器基本操作命令使用。

  • 下载Python Flask 镜像
  • 容器启动、停止、端口映射、容器日志查看、删除容器进行操作

Docker 容器操作

1、下载Python Flask镜像

docker pull training/webapp
 

2、启动PythonFlask镜像容器

docker run --name myweb -d -P training/webapp python app.py
 

  • -d:让容器在后台运行。

  • -P:将容器内部使用的网络端口映射到我们使用的主机上。

  • --name: 自定义容器名,不指定时,docker 会自动生成一个名称

3、查看容器

  • 使用 docker ps 命令 查看正在运行的所有容器,加上 -a 参数可以查看所有容器(即无论是否运行中)

  • CONTAINER ID:容器 di
  • IMAGE:镜像名称:Tag
  •  COMMAND:命令
  • CREATES:容器创建的时刻
  • STATUS:容器当前的状态 (up 表示运行、Exited 表示停止运行)
  • PORTS:镜像程序使用的端口号
  • NAMES:容器的名字

 3.1端口信息


   
  1. PORTS
  2. 0.0.0.0:32769->5000/tcp
  3. Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768上。

 通过浏览器访问WEB服务

ip addr show 查一下服务器 ip 地址,然后就能从物理机上访问了

3.2端口设置

通过 -p 参数设置指定的端口

-P:大写的P 在容器暴露的所有端口中随机分配一个端口映射

-p:小写的p 指定映射端口号

分为三种:

1、containePort :指定容器端口,宿主机端口随机映射。

docker run -p 80 -it  training/webapp python app.py

2、hostPort:containerPort:指定宿主机和容器端口号

docker run -p 8080:80 -it  training/webapp python app.py

3、ip:containerPort :指定宿主机的ip和容器端口号

docker run -p 192.168.6.10:80 -it  training/webapp python app.py

4、ip:hostPort:containerPort :指定宿主机ip、端口和容器端口

docker run -p 192.168.6.10:8080:80  -it  training/webapp python app.py


  
  1. #使设置端口映射时 -p是小写
  2. docker run --name web -d -p 8090:5000 training/webapp python app.py

3.3 容器ID或容器名字查看端口映射情况


  
  1. #dockerID查看端口映射情况
  2. docker port cf7f21285b51
  3. #docker名字查看端口映射情况
  4. docker port web

4、查看容器日志

  • docker logs [ID或者名字] 查看日志输出
  • docker logs -f myweb
  • -f: 让 docker logs 像使用 tail -f 一样来输出容器日志
  • -t:显示log日式时间
  • --tail 10 :查看指定log从末尾几行日志开始显示

5、查看WEB应用程序容器的进程

我们还可以使用 docker top 来查看容器内部运行的进程

docker top myweb
 

 6、检查 WEB 应用程序

使用 docker inspect  【ID或容器名字】来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

docker inspect myweb


  
  1. [
  2. {
  3. "Id": "7df2f250b798103d58e9d5b23d96d9a611a8f7f40a46e08c431687a8ca925604",
  4. "Created": "2019-08-14T07:38:18.109105325Z",
  5. "Path": "python",
  6. "Args": [
  7. "app.py"
  8. ],
  9. "State": {
  10. "Status": "running",
  11. "Running": true,
  12. "Paused": false,
  13. "Restarting": false,
  14. "OOMKilled": false,
  15. "Dead": false,
  16. "Pid": 38958,
  17. "ExitCode": 0,
  18. "Error": "",
  19. "StartedAt": "2019-08-14T07:38:20.167989966Z",
  20. "FinishedAt": "0001-01-01T00:00:00Z"
  21. },
  22. "Image": "sha256:6fae60ef344644649a39240b94d73b8ba9c67f898ede85cf8e947a887b3e6557",
  23. "ResolvConfPath": "/var/lib/docker/containers/7df2f250b798103d58e9d5b23d96d9a611a8f7f40a46e08c431687a8ca925604/resolv.conf",
  24. "HostnamePath": "/var/lib/docker/containers/7df2f250b798103d58e9d5b23d96d9a611a8f7f40a46e08c431687a8ca925604/hostname",
  25. "HostsPath": "/var/lib/docker/containers/7df2f250b798103d58e9d5b23d96d9a611a8f7f40a46e08c431687a8ca925604/hosts",
  26. "LogPath": "/var/lib/docker/containers/7df2f250b798103d58e9d5b23d96d9a611a8f7f40a46e08c431687a8ca925604/7df2f250b798103d58e9d5b23d96d9a611a8f7f40a46e08c431687a8ca925604-json.log",
  27. "Name": "/myweb",
  28. "RestartCount": 0,
  29. "Driver": "overlay",
  30. "Platform": "linux",
  31. "MountLabel": "",
  32. "ProcessLabel": "",
  33. "AppArmorProfile": "",
  34. "ExecIDs": null,
  35. "HostConfig": {
  36. "Binds": null,
  37. "ContainerIDFile": "",
  38. "LogConfig": {
  39. "Type": "json-file",
  40. "Config": {}
  41. },
  42. "NetworkMode": "default",
  43. "PortBindings": {},
  44. "RestartPolicy": {
  45. "Name": "no",
  46. "MaximumRetryCount": 0
  47. },
  48. "AutoRemove": false,
  49. "VolumeDriver": "",
  50. "VolumesFrom": null,
  51. "CapAdd": null,
  52. "CapDrop": null,
  53. "Dns": [],
  54. "DnsOptions": [],
  55. "DnsSearch": [],
  56. "ExtraHosts": null,
  57. "GroupAdd": null,
  58. "IpcMode": "shareable",
  59. "Cgroup": "",
  60. "Links": null,
  61. "OomScoreAdj": 0,
  62. "PidMode": "",
  63. "Privileged": false,
  64. "PublishAllPorts": true,
  65. "ReadonlyRootfs": false,
  66. "SecurityOpt": null,
  67. "UTSMode": "",
  68. "UsernsMode": "",
  69. "ShmSize": 67108864,
  70. "Runtime": "runc",
  71. "ConsoleSize": [
  72. 0,
  73. 0
  74. ],
  75. "Isolation": "",
  76. "CpuShares": 0,
  77. "Memory": 0,
  78. "NanoCpus": 0,
  79. "CgroupParent": "",
  80. "BlkioWeight": 0,
  81. "BlkioWeightDevice": [],
  82. "BlkioDeviceReadBps": null,
  83. "BlkioDeviceWriteBps": null,
  84. "BlkioDeviceReadIOps": null,
  85. "BlkioDeviceWriteIOps": null,
  86. "CpuPeriod": 0,
  87. "CpuQuota": 0,
  88. "CpuRealtimePeriod": 0,
  89. "CpuRealtimeRuntime": 0,
  90. "CpusetCpus": "",
  91. "CpusetMems": "",
  92. "Devices": [],
  93. "DeviceCgroupRules": null,
  94. "DiskQuota": 0,
  95. "KernelMemory": 0,
  96. "MemoryReservation": 0,
  97. "MemorySwap": 0,
  98. "MemorySwappiness": null,
  99. "OomKillDisable": false,
  100. "PidsLimit": 0,
  101. "Ulimits": null,
  102. "CpuCount": 0,
  103. "CpuPercent": 0,
  104. "IOMaximumIOps": 0,
  105. "IOMaximumBandwidth": 0
  106. },
  107. "GraphDriver": {
  108. "Data": {
  109. "LowerDir": "/var/lib/docker/overlay/959af890591628b5736b239652f7485754910a0eaf0da5c9977a8eb66da7cbb0/root",
  110. "MergedDir": "/var/lib/docker/overlay/2f97ae229730784d705b685ddbb7065f7805c1b4d4f5de57d92d25604e65bbd1/merged",
  111. "UpperDir": "/var/lib/docker/overlay/2f97ae229730784d705b685ddbb7065f7805c1b4d4f5de57d92d25604e65bbd1/upper",
  112. "WorkDir": "/var/lib/docker/overlay/2f97ae229730784d705b685ddbb7065f7805c1b4d4f5de57d92d25604e65bbd1/work"
  113. },
  114. "Name": "overlay"
  115. },
  116. "Mounts": [],
  117. "Config": {
  118. "Hostname": "7df2f250b798",
  119. "Domainname": "",
  120. "User": "",
  121. "AttachStdin": false,
  122. "AttachStdout": false,
  123. "AttachStderr": false,
  124. "ExposedPorts": {
  125. "5000/tcp": {}
  126. },
  127. "Tty": false,
  128. "OpenStdin": false,
  129. "StdinOnce": false,
  130. "Env": [
  131. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  132. ],
  133. "Cmd": [
  134. "python",
  135. "app.py"
  136. ],
  137. "Image": "training/webapp",
  138. "Volumes": null,
  139. "WorkingDir": "/opt/webapp",
  140. "Entrypoint": null,
  141. "OnBuild": null,
  142. "Labels": {}
  143. },
  144. "NetworkSettings": {
  145. "Bridge": "",
  146. "SandboxID": "bf8872a503cced65d65c73c3fa9bbf502cff69ae925aca608e815cfb2ffb866d",
  147. "HairpinMode": false,
  148. "LinkLocalIPv6Address": "",
  149. "LinkLocalIPv6PrefixLen": 0,
  150. "Ports": {
  151. "5000/tcp": [
  152. {
  153. "HostIp": "0.0.0.0",
  154. "HostPort": "32768"
  155. }
  156. ]
  157. },
  158. "SandboxKey": "/var/run/docker/netns/bf8872a503cc",
  159. "SecondaryIPAddresses": null,
  160. "SecondaryIPv6Addresses": null,
  161. "EndpointID": "e4861c79cb1d883ea09eab1bd82e6a86fd9a0e2630137e54ba548dec07e2b093",
  162. "Gateway": "172.17.0.1",
  163. "GlobalIPv6Address": "",
  164. "GlobalIPv6PrefixLen": 0,
  165. "IPAddress": "172.17.0.2",
  166. "IPPrefixLen": 16,
  167. "IPv6Gateway": "",
  168. "MacAddress": "02:42:ac:11:00:02",
  169. "Networks": {
  170. "bridge": {
  171. "IPAMConfig": null,
  172. "Links": null,
  173. "Aliases": null,
  174. "NetworkID": "fe918bb25c8ccdd7f7c47ef94902664ef19ecd67a1402dfe011da51bcfbf6a1f",
  175. "EndpointID": "e4861c79cb1d883ea09eab1bd82e6a86fd9a0e2630137e54ba548dec07e2b093",
  176. "Gateway": "172.17.0.1",
  177. "IPAddress": "172.17.0.2",
  178. "IPPrefixLen": 16,
  179. "IPv6Gateway": "",
  180. "GlobalIPv6Address": "",
  181. "GlobalIPv6PrefixLen": 0,
  182. "MacAddress": "02:42:ac:11:00:02",
  183. "DriverOpts": null
  184. }
  185. }
  186. }
  187. }
  188. ]

7、停止 WEB 应用容器

停止容器有两种方式:

stop:发送停止运行命令,等待当前进程结束。docker stop 容器ID或容器名字

kill:立即杀死当前进程。docker kill 容器ID或容器名字

docker stop myweb
 

 8、重启正在运行的WEB应用容器

docker restart 来启动

docker restart myweb
 

 9、查询最后一次创建的容器


  
  1. # 查询最后一次创建的容器
  2. docker ps -l

10、删除容器


  
  1. #命令来删除不需要的容器
  2. docker rm 容器ID或者容器的名字

删除容器必须是停止的才能删除

 

三、容器进阶操作

1、守护形式运行容器

守护形式运行容器即后台方式运行容器,有两种实现方式:

  • 交互式运行:-i -t
  • 后台运行: -d

交互式运行实验

docker run -it --name ubut1 ubuntu /bin/bash
 
  • docker交互式运行会显示容器的ID号,说明已进入到改容器中。 

  • 退出当前容器,而不结束容器的运行。使用 Ctrl+pq 命令。

 

  • 查看容器在后台运行

  •  再次进入容器命令 attach 容器名称或容器ID
docker attach ubut1
 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

后台运行实验

  •  后台运行 添加一个 -d参数

  
  1. #执行sh命令循环输出 hello world
  2. docker run --name u2 -d ubuntu /bin/sh -c "while true; do echo hellp world; sleep1;done"

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

2、在运行容器中启动新进程

docker exec 【-d】【-i】【-t】容器名 【Command】【args】


  
  1. #在u2容器中启动了新的进程 /bin/bash
  2. docker exec -it u2 /bin/bash

 

 

 

文章来源: brucelong.blog.csdn.net,作者:Bruce小鬼,版权归原作者所有,如需转载,请联系作者。

原文链接:brucelong.blog.csdn.net/article/details/99574055

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。