1.帮助命令

1-1)docker version 查看版本

image.png

1-2)docker info 查看docker的信息

image.png

1-3)docker -help 帮助

image.png
image.png
image.png

2.镜像命令

2-1)docker images 列出本地的镜像

image.png
各个选项说明
image.png
同一个仓库源可以有多个TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像。
如果不指定一个镜像的版本标签,例如我只使用hello-world,dokcer将默认使用 hello-world:latest镜像。
再例如我制定了版本 hello-world:1.5.0 ,docker将使用hello-world:1.5.0镜像。

2-1-1)OPTION 参数详解

-a 列出本地所有镜像
image.png
-q 只显示镜像ID
image.png
—digests 显示镜像的摘要信息
image.png
—no-trunc 显示完整的镜像信息
image.png

2-1)docker search 镜像名称 从docker-hub 搜索某个镜像

image.png
image.png

查询 点赞数 500以上的 redis镜像
docker search -s 500 redis
image.png

2-3)docker pull 镜像名称:版本(不指定默认为latest) 拉取/下载镜像

docker pull tomcat
image.png
image.png

2-4)单个删除 docker rmi 镜像ID/镜像名:版本(不指定版本也是默认删除latest) 删除本地镜像

image.png
docker引擎:不能删除hello-world,因为后台正在运行这个镜像
解决方法:docker rmi -f hello-world 强制删除

2-5)多个删除 docker rmi -f 镜像名1:版本 镜像名2:版本

image.png

2-6)删除全部 docker rmi if $(docker images -qa)

3.docker容器命令

容器,必须要有镜像才能创建容器 所以先拉取一个centos镜像
image.png
新建并启动容器:docker run [OPTION] IMAGE[COMMAND][ARG…]
和hello-world一样,如果本地没有,那就会到docker-hub搜索再下载
OPTION 选项说明:有些是一个杠(-),有些是两个杠(—)
—name=”容器的新名字”,为容器指定一个名称
-d:后天运行容器,并且返回容器ID,即启动守护式容器
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同时使用
-P(大写P):指定端口映射
-p:指定端口映射,有一下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort

image.png
先使用 docker images 列出所有镜像 可以使用镜像名和ID来指定运行,这里使用ID,这时候出现 kernel too old 的提示信息,提示内核版本太老,
因为我当时下载的是 centos:latest ,也就是最新的centos8,所以我这里重新指定版本下载 6.8的centos,然后指定ID再运行,成功进入!

这时候我已经进入了 centos 6.8的系统,这里面就能使用linux命令来操作
image.png
—name 指定别名
image.png
image.png
docker ps [OPTION]
OPTION 参数详解
-a: 列出当前所有正在运行的容器+历史上运行过的
-l:显示最近创建(上一个)的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号
—no-trunc:不截断输出

docker ps 查看当前运行的容器
image.png
这个容器ID 就是上方的目录
**

启动容器:docker start 容器名/ID 可以将已经停止退出的容器重新启动
docker start mycentos
docker start 1waad2221
image.png
停止容器
停止:docker stop 容器名/容器ID

强制停止:docker kill 容器名/容器ID
image.png
删除已停止的容器
单个删除:docker rm 容器ID
多个删除(带 -f表示强制删除):docker rm -f $(docker ps -aq)
image.png
docker ps -qa | xargs docker rm -f
image.png
可以看到我没有携带 -f参数时,正在运行的容器会删除失败
强制删除容器:
docker rm -f 容器ID

启动守护式容器:
docker run -d 容器名/容器ID
运行docker run -d centos后
使用docker ps -a查看,会发现 容器已经退出
image.png
说明:Docker 容器后台运行,就必须有一个前台进程
容器运行的命令如果不是那些“一直挂起”的命令,比如 top或tail,就是会自动退出的

这个也是docker 的机制问题,比如你的web容器,我们以nginx为例子,正常情况下,我们配置启动服务只需要相应启动的service即可,
例如:service nginx start
但是如果这样做,nginx为后台进程模式运行,会导致docker前台没有运行的应用,
这样的容器后台启动后,会立刻关闭它,因为docker认为他很闲,没有事情可做
所以,最佳的方案就是,将你要运行的程序以前台进程的形式运行

启动交互式容器
使用镜像centos:latest以交互模式启动一个容器,在容器内执行/bin/bash命令
docker run -it centos /bin/bash

docker run -d centos /bin/bash -c “while true;do echo hello centos ; sleep 2;done”
docker 用交互式容器启动,并且执行一个死循环脚本,这样就不会被关掉了

image.png

查看容器日志
docker logs 容器ID
docker logs -f -t —tail 显示行数 容器ID
image.png

image.png

查看容器内运行的进程
docker top 容器ID
image.png
查看容器内部的细节
docker inspect 容器ID
如下内容

  1. [
  2. {
  3. "Id": "cd0c3bada7f26d512a866e9a4b65846134d31293d49da36d37c8cde1fe32f84c",
  4. "Created": "2020-12-15T09:17:11.244795919Z",
  5. "Path": "/bin/bash",
  6. "Args": [
  7. "-c",
  8. "while true;do echo hello centos ; sleep 2;done"
  9. ],
  10. "State": {
  11. "Status": "running",
  12. "Running": true,
  13. "Paused": false,
  14. "Restarting": false,
  15. "OOMKilled": false,
  16. "Dead": false,
  17. "Pid": 20018,
  18. "ExitCode": 0,
  19. "Error": "",
  20. "StartedAt": "2020-12-15T09:17:11.509213751Z",
  21. "FinishedAt": "0001-01-01T00:00:00Z"
  22. },
  23. "Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
  24. "ResolvConfPath": "/var/lib/docker/containers/cd0c3bada7f26d512a866e9a4b65846134d31293d49da36d37c8cde1fe32f84c/resolv.conf",
  25. "HostnamePath": "/var/lib/docker/containers/cd0c3bada7f26d512a866e9a4b65846134d31293d49da36d37c8cde1fe32f84c/hostname",
  26. "HostsPath": "/var/lib/docker/containers/cd0c3bada7f26d512a866e9a4b65846134d31293d49da36d37c8cde1fe32f84c/hosts",
  27. "LogPath": "",
  28. "Name": "/sad_heisenberg",
  29. "RestartCount": 0,
  30. "Driver": "overlay2",
  31. "MountLabel": "system_u:object_r:svirt_sandbox_file_t:s0:c71,c564",
  32. "ProcessLabel": "system_u:system_r:svirt_lxc_net_t:s0:c71,c564",
  33. "AppArmorProfile": "",
  34. "ExecIDs": null,
  35. "HostConfig": {
  36. "Binds": null,
  37. "ContainerIDFile": "",
  38. "LogConfig": {
  39. "Type": "journald",
  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": "",
  59. "Cgroup": "",
  60. "Links": null,
  61. "OomScoreAdj": 0,
  62. "PidMode": "",
  63. "Privileged": false,
  64. "PublishAllPorts": false,
  65. "ReadonlyRootfs": false,
  66. "SecurityOpt": null,
  67. "UTSMode": "",
  68. "UsernsMode": "",
  69. "ShmSize": 67108864,
  70. "Runtime": "docker-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": null,
  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. "DiskQuota": 0,
  94. "KernelMemory": 0,
  95. "MemoryReservation": 0,
  96. "MemorySwap": 0,
  97. "MemorySwappiness": -1,
  98. "OomKillDisable": false,
  99. "PidsLimit": 0,
  100. "Ulimits": null,
  101. "CpuCount": 0,
  102. "CpuPercent": 0,
  103. "IOMaximumIOps": 0,
  104. "IOMaximumBandwidth": 0
  105. },
  106. "GraphDriver": {
  107. "Name": "overlay2",
  108. "Data": {
  109. "LowerDir": "/var/lib/docker/overlay2/da15661756f0cca3e26f4246a16a9112aafe5f87140f2abb36e0811a70058025-init/diff:/var/lib/docker/overlay2/e7bb311dfe837c10358327b1d72479bda3e3347759415c1df177443109f26802/diff",
  110. "MergedDir": "/var/lib/docker/overlay2/da15661756f0cca3e26f4246a16a9112aafe5f87140f2abb36e0811a70058025/merged",
  111. "UpperDir": "/var/lib/docker/overlay2/da15661756f0cca3e26f4246a16a9112aafe5f87140f2abb36e0811a70058025/diff",
  112. "WorkDir": "/var/lib/docker/overlay2/da15661756f0cca3e26f4246a16a9112aafe5f87140f2abb36e0811a70058025/work"
  113. }
  114. },
  115. "Mounts": [],
  116. "Config": {
  117. "Hostname": "cd0c3bada7f2",
  118. "Domainname": "",
  119. "User": "",
  120. "AttachStdin": false,
  121. "AttachStdout": false,
  122. "AttachStderr": false,
  123. "Tty": false,
  124. "OpenStdin": false,
  125. "StdinOnce": false,
  126. "Env": [
  127. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  128. ],
  129. "Cmd": [
  130. "/bin/bash",
  131. "-c",
  132. "while true;do echo hello centos ; sleep 2;done"
  133. ],
  134. "Image": "centos",
  135. "Volumes": null,
  136. "WorkingDir": "",
  137. "Entrypoint": null,
  138. "OnBuild": null,
  139. "Labels": {
  140. "org.label-schema.build-date": "20201204",
  141. "org.label-schema.license": "GPLv2",
  142. "org.label-schema.name": "CentOS Base Image",
  143. "org.label-schema.schema-version": "1.0",
  144. "org.label-schema.vendor": "CentOS"
  145. }
  146. },
  147. "NetworkSettings": {
  148. "Bridge": "",
  149. "SandboxID": "1a66d59314a39ab44d3bd8e24561e3c6baab400735a4acccd131203c2b31d423",
  150. "HairpinMode": false,
  151. "LinkLocalIPv6Address": "",
  152. "LinkLocalIPv6PrefixLen": 0,
  153. "Ports": {},
  154. "SandboxKey": "/var/run/docker/netns/1a66d59314a3",
  155. "SecondaryIPAddresses": null,
  156. "SecondaryIPv6Addresses": null,
  157. "EndpointID": "7a055ebd30f40051074797a8a198f0c81773b32f432847669e4d6a0e4d60b1e7",
  158. "Gateway": "172.17.0.1",
  159. "GlobalIPv6Address": "",
  160. "GlobalIPv6PrefixLen": 0,
  161. "IPAddress": "172.17.0.2",
  162. "IPPrefixLen": 16,
  163. "IPv6Gateway": "",
  164. "MacAddress": "02:42:ac:11:00:02",
  165. "Networks": {
  166. "bridge": {
  167. "IPAMConfig": null,
  168. "Links": null,
  169. "Aliases": null,
  170. "NetworkID": "8d8d8de8d14daa2fb701763b2f3bc841c0cc1351821b7e40e7b8e2b4192ee95a",
  171. "EndpointID": "7a055ebd30f40051074797a8a198f0c81773b32f432847669e4d6a0e4d60b1e7",
  172. "Gateway": "172.17.0.1",
  173. "IPAddress": "172.17.0.2",
  174. "IPPrefixLen": 16,
  175. "IPv6Gateway": "",
  176. "GlobalIPv6Address": "",
  177. "GlobalIPv6PrefixLen": 0,
  178. "MacAddress": "02:42:ac:11:00:02"
  179. }
  180. }
  181. }
  182. }
  183. ]

进入正在运行的容器进行命令交互
模拟场景
第一步,启动容器(docker run -it centos [/bin/bash])

第二步,CTRL+P+Q 退出容器不关闭
image.png
第三步,进行命令交互
方式1、直接进入容器进行操作
docker attach 容器ID(直接进入容器启动命令的终端,不会启动新的进程)
2020-12-15 22-39-41 的屏幕截图.png
方式2、在宿主机上面进行操作
docker exec -t 容器ID 命令操作(在容器中打开新的终端,并且可以启动新的进程)
image.png
exec也能做到和attach一样的功能
docker exec -t 容器ID /bin/bash
所以,exec功能比attach强大

从容器内拷贝文件到宿主机上
docker cp 容器ID:容器内的路径 宿主机的路径
2020-12-15 22-55-11 的屏幕截图.png

4.

难得排版,将就看吧