帮助命令

  1. docker version # 显示docker的版本信息
  2. docker info # 显示docker的系统信息,包括镜像和容器的数量
  3. docker 命令 --help # 帮助命令

帮助文档地址 https://docs.docker.com/reference/

镜像命令

docker image # 查看本地主机上的镜像

  1. liuyang@docker:~$ docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. hello-world latest bf756fb1ae65 8 months ago 13.3kB
  4. # 解释
  5. REPOSITORY 镜像的仓库源
  6. TAG 镜像的标签
  7. IMAGE ID 镜像的ID
  8. CREATED 镜像的创建时间
  9. SIZE 镜像的大小
  10. # 可选项
  11. -a, --all # 显示所有的镜像
  12. -f, --filter filter Filter output based on conditions provided
  13. -q, --quiet #只显示ID

docker search 搜索镜像

  1. liuyang@docker:~$ docker search mysql
  2. NAME DESCRIPTION STARS OFFICIAL
  3. mysql MySQL is a widely used, open-source relation 9946 [OK]
  4. mariadb MariaDB is a community-developed fork of MyS 3639 [OK]
  5. # 可选项 通过搜索来过滤
  6. --filter=STARS=3000 # 搜索出来的镜像大于3000的
  7. liuyang@docker:~$ docker search mysql --filter=STARS=3000
  8. NAME DESCRIPTION STARS OFFICIAL
  9. mysql MySQL is a widely used, open-source relation 9946 [OK]
  10. mariadb MariaDB is a community-developed fork of MyS 3639 [OK]

docker pull 下载镜像

  1. # 下载镜像 docker pull 镜像名[:tag]
  2. liuyang@docker:~$ docker pull mysql
  3. Using default tag: latest # 如果不写tag 默认就是latest
  4. latest: Pulling from library/mysql
  5. d121f8d1c412: Pull complete # 分层下载, docker imaged的核心 联合文件系统
  6. f3cebc0b4691: Pull complete
  7. 1862755a0b37: Pull complete
  8. 489b44f3dbb4: Pull complete
  9. 690874f836db: Pull complete
  10. baa8be383ffb: Pull complete
  11. 55356608b4ac: Pull complete
  12. dd35ceccb6eb: Pull complete
  13. 429b35712b19: Pull complete
  14. 162d8291095c: Pull complete
  15. 5e500ef7181b: Pull complete
  16. af7528e958b6: Pull complete
  17. Digest: sha256:e1bfe11693ed2052cb3b4e5fa356c65381129e87e38551c6cd6ec532ebe0e808
  18. Status: Downloaded newer image for mysql:latest
  19. docker.io/library/mysql:latest # 真是地址
  20. # 等价于它
  21. docker pull mysql
  22. docker pul docker.io/library/mysql:latest
  23. # 指定版本下载
  24. liuyang@docker:~$ docker pull mysql:5.7
  25. 5.7: Pulling from library/mysql
  26. d121f8d1c412: Already exists
  27. f3cebc0b4691: Already exists
  28. 1862755a0b37: Already exists
  29. 489b44f3dbb4: Already exists
  30. 690874f836db: Already exists
  31. baa8be383ffb: Already exists
  32. 55356608b4ac: Already exists
  33. 277d8f888368: Pull complete
  34. 21f2da6feb67: Pull complete
  35. 2c98f818bcb9: Pull complete
  36. 031b0a770162: Pull complete
  37. Digest: sha256:14fd47ec8724954b63d1a236d2299b8da25c9bbb8eacc739bb88038d82da4919
  38. Status: Downloaded newer image for mysql:5.7
  39. docker.io/library/mysql:5.7

image.png

docker rmi 删除镜像

  1. liuyang@docker:~$ docker rmi -f 镜像id # 删除指定镜像id
  2. liuyang@docker:~$ docker rmi -f 镜像id 镜像idid 镜像idid # 删除多个镜像
  3. liuyang@docker:~$ docker rmi -f $(docker images -aq) # 删除全部的镜像

容器命令

说明:我们有了镜像才可以创建容器,linux ,下载一个centos

  1. liuyang@docker:~$ docker pull centos

新建容器并启动

  1. docker run [可选参数] image
  2. #参数说明
  3. --name="Name" 容器名称 区分容器
  4. -d 后台方式运行
  5. -i t 使用交互方式运行
  6. -p 指定容器的端口 -p:8080
  7. -p ip:主机端口
  8. -p 主机端口:容器端口
  9. -p 容器端口
  10. # 测试 启动并进入容器
  11. liuyang@docker:~$ docker run -it centos /bin/bash
  12. [root@6ec83c585650 /]# ls # 查看centos容器
  13. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var

列出所有运行的容器

  1. # docker ps 命令
  2. # 列出正在运行的容器
  3. -a # 列出正在运行的容器 + 带出历史运行过的容器
  4. -n=? # 显示最近创建的容器
  5. -q # 只显示容器的编号
  6. liuyang@docker:~$ docker ps
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. liuyang@docker:~$ docker ps -a
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. 6ec83c585650 centos "/bin/bash" 4 minutes ago Exited (0) 55 seconds ago silly_cray
  11. 9e367c52d889 bf756fb1ae65 "/hello" 2 hours ago Exited (0) 2 hours ago vibrant_bohr

退出容器

  1. exit # 直接容器停止并推出
  2. control + P + Q # 容器不停止退出

删除容器

  1. docker rm 容器id # 删除指定的容器 不能删除正在运行的容器 强制删除 -f
  2. docker rm -f $(docker ps -aq) # 删除所有的容器
  3. docker ps -a -q|xargs docker rm # 删除所有的容器

启动和停止容器的操作

  1. docker start 容器id # 启动容器
  2. docker restart 容器id # 重启容器
  3. docker stop 容器id # 停止当前正在运行的容器
  4. docker kill 容器id #强制停止容器

常用其他命令

后台启动

  1. # 命令 docker run -d 镜像名
  2. liuyang@docker:~$ docker run -d centos
  3. aa65f44fb6ae167dc2118c90992925c9ab4679c670722c59d6e6260efa8bb297
  4. # 问题 docker ps 发现centos 停止了
  5. # 常见的坑 docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止

查看日志

  1. docker logs -tf --tail num 容器
  2. # 自己编写一段shell脚本
  3. liuyang@docker:~$ docker run -d centos /bin/sh -c "while true;do echo liuyang;sleep 1; done"
  4. liuyang@docker:~$ docker ps
  5. CONTAINER ID IMAGE
  6. 2d4591ca21ca centos
  7. # 显示日志
  8. -tf # 显示全部日志
  9. --tail num # 要显示的日志条数
  10. liuyang@docker:~$ docker logs -tf --tail 10 2d4591ca21ca

查看容器中的进程信息

  1. # 命令 docker top 容器id
  2. liuyang@docker:~$ docker top 2d4591ca21ca
  3. UID PID PPID C STIME
  4. root 32130 32110 0 09:34
  5. root 32711 32130 0 09:42

查看镜像元数据

  1. # 命令
  2. docker inspect 容器id
  3. # 测试
  4. liuyang@docker:~$ docker inspect 2d4591ca21ca
  5. [
  6. {
  7. "Id": "2d4591ca21ca132c840507313e720084ead8be6c1426ae4d9b78a33bc23e6867",
  8. "Created": "2020-09-11T01:34:29.093052792Z",
  9. "Path": "/bin/sh",
  10. "Args": [
  11. "-c",
  12. "while true;do echo liuyang;sleep 1; done"
  13. ],
  14. "State": {
  15. "Status": "running",
  16. "Running": true,
  17. "Paused": false,
  18. "Restarting": false,
  19. "OOMKilled": false,
  20. "Dead": false,
  21. "Pid": 32130,
  22. "ExitCode": 0,
  23. "Error": "",
  24. "StartedAt": "2020-09-11T01:34:29.681576274Z",
  25. "FinishedAt": "0001-01-01T00:00:00Z"
  26. },
  27. "Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
  28. "ResolvConfPath": "/var/lib/docker/containers/2d4591ca21ca132c840507313e720084ead8be6c1426ae4d9b78a33bc23e6867/resolv.conf",
  29. "HostnamePath": "/var/lib/docker/containers/2d4591ca21ca132c840507313e720084ead8be6c1426ae4d9b78a33bc23e6867/hostname",
  30. "HostsPath": "/var/lib/docker/containers/2d4591ca21ca132c840507313e720084ead8be6c1426ae4d9b78a33bc23e6867/hosts",
  31. "LogPath": "/var/lib/docker/containers/2d4591ca21ca132c840507313e720084ead8be6c1426ae4d9b78a33bc23e6867/2d4591ca21ca132c840507313e720084ead8be6c1426ae4d9b78a33bc23e6867-json.log",
  32. "Name": "/tender_ride",
  33. "RestartCount": 0,
  34. "Driver": "overlay2",
  35. "Platform": "linux",
  36. "MountLabel": "",
  37. "ProcessLabel": "",
  38. "AppArmorProfile": "docker-default",
  39. "ExecIDs": null,
  40. "HostConfig": {
  41. "Binds": null,
  42. "ContainerIDFile": "",
  43. "LogConfig": {
  44. "Type": "json-file",
  45. "Config": {}
  46. },
  47. "NetworkMode": "default",
  48. "PortBindings": {},
  49. "RestartPolicy": {
  50. "Name": "no",
  51. "MaximumRetryCount": 0
  52. },
  53. "AutoRemove": false,
  54. "VolumeDriver": "",
  55. "VolumesFrom": null,
  56. "CapAdd": null,
  57. "CapDrop": null,
  58. "Capabilities": null,
  59. "Dns": [],
  60. "DnsOptions": [],
  61. "DnsSearch": [],
  62. "ExtraHosts": null,
  63. "GroupAdd": null,
  64. "IpcMode": "private",
  65. "Cgroup": "",
  66. "Links": null,
  67. "OomScoreAdj": 0,
  68. "PidMode": "",
  69. "Privileged": false,
  70. "PublishAllPorts": false,
  71. "ReadonlyRootfs": false,
  72. "SecurityOpt": null,
  73. "UTSMode": "",
  74. "UsernsMode": "",
  75. "ShmSize": 67108864,
  76. "Runtime": "runc",
  77. "ConsoleSize": [
  78. 0,
  79. 0
  80. ],
  81. "Isolation": "",
  82. "CpuShares": 0,
  83. "Memory": 0,
  84. "NanoCpus": 0,
  85. "CgroupParent": "",
  86. "BlkioWeight": 0,
  87. "BlkioWeightDevice": [],
  88. "BlkioDeviceReadBps": null,
  89. "BlkioDeviceWriteBps": null,
  90. "BlkioDeviceReadIOps": null,
  91. "BlkioDeviceWriteIOps": null,
  92. "CpuPeriod": 0,
  93. "CpuQuota": 0,
  94. "CpuRealtimePeriod": 0,
  95. "CpuRealtimeRuntime": 0,
  96. "CpusetCpus": "",
  97. "CpusetMems": "",
  98. "Devices": [],
  99. "DeviceCgroupRules": null,
  100. "DeviceRequests": null,
  101. "KernelMemory": 0,
  102. "KernelMemoryTCP": 0,
  103. "MemoryReservation": 0,
  104. "MemorySwap": 0,
  105. "MemorySwappiness": null,
  106. "OomKillDisable": false,
  107. "PidsLimit": null,
  108. "Ulimits": null,
  109. "CpuCount": 0,
  110. "CpuPercent": 0,
  111. "IOMaximumIOps": 0,
  112. "IOMaximumBandwidth": 0,
  113. "MaskedPaths": [
  114. "/proc/asound",
  115. "/proc/acpi",
  116. "/proc/kcore",
  117. "/proc/keys",
  118. "/proc/latency_stats",
  119. "/proc/timer_list",
  120. "/proc/timer_stats",
  121. "/proc/sched_debug",
  122. "/proc/scsi",
  123. "/sys/firmware"
  124. ],
  125. "ReadonlyPaths": [
  126. "/proc/bus",
  127. "/proc/fs",
  128. "/proc/irq",
  129. "/proc/sys",
  130. "/proc/sysrq-trigger"
  131. ]
  132. },
  133. "GraphDriver": {
  134. "Data": {
  135. "LowerDir": "/var/lib/docker/overlay2/778aebbe0f104c95a73c066d8aab311301321c65b1747222a1dfd74500bfb789-init/diff:/var/lib/docker/overlay2/f7754c8b6edffb9a6145b3501a3e226febfc70ebf340cb766c340e11146586dd/diff",
  136. "MergedDir": "/var/lib/docker/overlay2/778aebbe0f104c95a73c066d8aab311301321c65b1747222a1dfd74500bfb789/merged",
  137. "UpperDir": "/var/lib/docker/overlay2/778aebbe0f104c95a73c066d8aab311301321c65b1747222a1dfd74500bfb789/diff",
  138. "WorkDir": "/var/lib/docker/overlay2/778aebbe0f104c95a73c066d8aab311301321c65b1747222a1dfd74500bfb789/work"
  139. },
  140. "Name": "overlay2"
  141. },
  142. "Mounts": [],
  143. "Config": {
  144. "Hostname": "2d4591ca21ca",
  145. "Domainname": "",
  146. "User": "",
  147. "AttachStdin": false,
  148. "AttachStdout": false,
  149. "AttachStderr": false,
  150. "Tty": false,
  151. "OpenStdin": false,
  152. "StdinOnce": false,
  153. "Env": [
  154. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  155. ],
  156. "Cmd": [
  157. "/bin/sh",
  158. "-c",
  159. "while true;do echo liuyang;sleep 1; done"
  160. ],
  161. "Image": "centos",
  162. "Volumes": null,
  163. "WorkingDir": "",
  164. "Entrypoint": null,
  165. "OnBuild": null,
  166. "Labels": {
  167. "org.label-schema.build-date": "20200809",
  168. "org.label-schema.license": "GPLv2",
  169. "org.label-schema.name": "CentOS Base Image",
  170. "org.label-schema.schema-version": "1.0",
  171. "org.label-schema.vendor": "CentOS"
  172. }
  173. },
  174. "NetworkSettings": {
  175. "Bridge": "",
  176. "SandboxID": "379a4a3804fad09d7a9bbf777989a0a4f5907f47e6119598159b6540a77f7cd0",
  177. "HairpinMode": false,
  178. "LinkLocalIPv6Address": "",
  179. "LinkLocalIPv6PrefixLen": 0,
  180. "Ports": {},
  181. "SandboxKey": "/var/run/docker/netns/379a4a3804fa",
  182. "SecondaryIPAddresses": null,
  183. "SecondaryIPv6Addresses": null,
  184. "EndpointID": "dd044b9ffa1396cad51d2f4421a1c571ae23b57dff8bd9f8cb9dc388522f3594",
  185. "Gateway": "172.17.0.1",
  186. "GlobalIPv6Address": "",
  187. "GlobalIPv6PrefixLen": 0,
  188. "IPAddress": "172.17.0.2",
  189. "IPPrefixLen": 16,
  190. "IPv6Gateway": "",
  191. "MacAddress": "02:42:ac:11:00:02",
  192. "Networks": {
  193. "bridge": {
  194. "IPAMConfig": null,
  195. "Links": null,
  196. "Aliases": null,
  197. "NetworkID": "b8c6e4c7efe651ae8da665a76cd8c32824c001447019b97207efbe54ce6f6d9d",
  198. "EndpointID": "dd044b9ffa1396cad51d2f4421a1c571ae23b57dff8bd9f8cb9dc388522f3594",
  199. "Gateway": "172.17.0.1",
  200. "IPAddress": "172.17.0.2",
  201. "IPPrefixLen": 16,
  202. "IPv6Gateway": "",
  203. "GlobalIPv6Address": "",
  204. "GlobalIPv6PrefixLen": 0,
  205. "MacAddress": "02:42:ac:11:00:02",
  206. "DriverOpts": null
  207. }
  208. }
  209. }
  210. }
  211. ]

今日当前正在运行的容器

  1. # 我们通常容器都是使用后台运行的, 需要进入容器,修改一些配置
  2. # 命令
  3. docker exec -it 容器id /bin/bash
  4. # 测试
  5. liuyang@docker:~$ docker exec -it 2d4591ca21ca /bin/bach
  6. OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"/bin/bach\": stat /bin/bach: no such file or directory": unknown
  7. liuyang@docker:~$ docker exec -it 2d4591ca21ca /bin/bash
  8. [root@2d4591ca21ca /]# ls
  9. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  10. [root@2d4591ca21ca /]# ps -ef
  11. UID PID PPID C STIME TTY TIME CMD
  12. root 1 0 0 01:34 ? 00:00:00 /bin/sh -c while true;do echo liuyang;sleep 1; done
  13. root 1134 0 0 01:53 pts/0 00:00:00 /bin/bash
  14. root 1177 1 0 01:53 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
  15. root 1178 1134 0 01:53 pts/0 00:00:00 ps -ef
  16. # 方式二
  17. docker attach 容器id
  18. # 测试
  19. liuyang@docker:~$ docker attach 2d4591ca21ca
  20. 正在执行当前的代码...
  21. # docker exec # 进入容器后开启一个新的终端 ,可以在里面操作(常用)
  22. # docker attach # 进入容器正在执行的终端,不会启动新的进程!

从容器内拷贝文件到主机上

  1. docker cp 容器id:容器内路径 目的地主机路径
  2. # 测试
  3. # 查看当前主机目录下
  4. liuyang@docker:~/文档$ ls
  5. # 启动并进入centos容器内部
  6. liuyang@docker:~/文档$ docker run -it centos /bin/bash
  7. # 在容器内部新建一个文件
  8. [root@80f203be8dd9 home]#touch demo.php
  9. [root@80f203be8dd9 home]# ls
  10. demo.php
  11. [root@80f203be8dd9 home]# exit
  12. exit
  13. liuyang@docker:~/文档$ ls
  14. liuyang@docker:~/文档$ docker ps -a
  15. CONTAINER ID
  16. 80f203be8dd9
  17. # 将文件拷贝到主机上
  18. liuyang@docker:~/文档$ docker cp 80f203be8dd9:/home/demo.php ~/文档
  19. liuyang@docker:~/文档$ ls
  20. demo.php
  21. # 拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现

可视化

portainer (先用这个)

Docker图形化界面管理工具! 提供一个后台面板供我们操 作!

  1. docker run -d -p 8088:9000 \
  2. --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

Rancher(CI/CD)