1.帮助命令

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

帮助文档的地址:https://docs.docker.com/engine/reference/commandline/build/

2.镜像命令

  1. [root@localhost /]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. hello-world latest bf756fb1ae65 5 months ago 13.3kB
  4. #解释
  5. REPOSITORY 镜像的仓库源
  6. TAG 镜像标签
  7. IMAGE ID 镜像id
  8. CREATED 镜像的创建时间
  9. SIZE 镜像的大小
  10. #可选项
  11. Options:
  12. -a, --all # 列出所有镜像
  13. -q, --quiet # 只显示镜像id

docker search 搜索镜像

  1. [root@localhost /]# docker search mysql
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. mysql MySQL is a widely used, open-source relation 9604 [OK]
  4. mariadb MariaDB is a community-developed fork of MyS 3490 [OK]
  5. #可选项,通过收藏来过滤
  6. --filter=STARS=3000 #搜索出来的镜像就是STARS大于3000
  7. [root@localhost /]# docker search mysql --filter=STARS=3000
  8. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  9. mysql MySQL is a widely used, open-source relation 9604 [OK]
  10. mariadb MariaDB is a community-developed fork of MyS 3490 [OK]

**

docker pull 下载镜像

  1. # 下载镜像 docker pull 镜像名[:tag]
  2. [root@localhost /]# docker pull mysql
  3. Using default tag: latest # 如果不写 tag,默认就是latest
  4. latest: Pulling from library/mysql
  5. 8559a31e96f4: Pull complete # 分层下载,docker image的核心 联合文件系统
  6. d51ce1c2e575: Pull complete
  7. c2344adc4858: Pull complete
  8. fcf3ceff18fc: Pull complete
  9. 16da0c38dc5b: Pull complete
  10. b905d1797e97: Pull complete
  11. 4b50d1c6b05c: Pull complete
  12. c75914a65ca2: Pull complete
  13. 1ae8042bdd09: Pull complete
  14. 453ac13c00a3: Pull complete
  15. 9e680cd72f08: Pull complete
  16. a6b5dc864b6c: Pull complete
  17. Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6 # 签名
  18. Status: Downloaded newer image for mysql:latest
  19. docker.io/library/mysql:latest # 真实地址
  20. docker pull mysql 等价于: docker pull docker.io/library/mysql:latest
  21. # 指定版本下载
  22. [root@localhost /]# docker pull mysql:5.7
  23. 5.7: Pulling from library/mysql
  24. 8559a31e96f4: Already exists # 联合文件系统的好处:上面下载过的MySQL5.7版本的MySQL有相同的文件时不需要重复下载
  25. d51ce1c2e575: Already exists
  26. c2344adc4858: Already exists
  27. fcf3ceff18fc: Already exists
  28. 16da0c38dc5b: Already exists
  29. b905d1797e97: Already exists
  30. 4b50d1c6b05c: Already exists
  31. d85174a87144: Pull complete
  32. a4ad33703fa8: Pull complete
  33. f7a5433ce20d: Pull complete
  34. 3dcd2a278b4a: Pull complete
  35. Digest: sha256:32f9d9a069f7a735e28fd44ea944d53c61f990ba71460c5c183e610854ca4854
  36. Status: Downloaded newer image for mysql:5.7
  37. docker.io/library/mysql:5.7

docker rmi 删除镜像

  1. [root@localhost /]# docker rmi -f 镜像id #删除指定镜像
  2. [root@localhost /]# docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像
  3. [root@localhost /]# docker rmi -f $(docker images -aq) #删除全部镜像

3.容器命令

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

  1. docker pull centos

新建容器并启动

  1. docker run [可选参数] image
  2. # 参数说明
  3. --name="Name" 容器名字 tomcat01 tomcat02 ,用来区分容器
  4. -d 后台方式运行
  5. -it 使用交互方式运行,进入容器查看内容
  6. -p 指定容器的端口 -p 8080:80
  7. -p ip:主机(即宿主机)端口:容器端口
  8. -p 主机端口:容器端口 #这种方式常用
  9. -p 容器端口
  10. 容器端口P
  11. -P 随机指定端口(大写P)
  12. # 测试,启动并进入容器
  13. [root@localhost /]# docker run -it centos /bin/bash
  14. [root@8b4c74381205 /]# ls #查看容器内的centos,基础版本,很多命令都是不完善的!
  15. bin etc lib lost+found mnt proc run srv tmp var
  16. dev home lib64 media opt root sbin sys usr
  17. # 从容器中退回主机
  18. [root@8b4c74381205 /]# exit
  19. exit
  20. [root@localhost /]# ls
  21. 123 bin dev home lib64 mnt proc run srv tmp var
  22. 222 boot etc lib media opt root sbin sys usr

**

列出所有运行的容器

  1. # docker ps 命令
  2. (不加) # 列出当前正在运行的容器
  3. -a # 列出当前正在运行的容器 + 带出历史运行过的容器
  4. -n=? # 显示最近创建的容器
  5. -q # 只显示当前容器的编号
  6. [root@localhost /]# docker ps
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. [root@localhost /]# docker ps -a
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. 8b4c74381205 centos "/bin/bash" 4 minutes ago Exited (0) About a minute ago epic_wilson
  11. fb87667bbc19 bf756fb1ae65 "/hello" 2 hours ago Exited (0) 2 hours ago awesome_banach
  12. [root@localhost /]# docker ps -a -n=1
  13. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  14. 8b4c74381205 centos "/bin/bash" 9 minutes ago Exited (0) 6 minutes ago epic_wilson
  15. [root@localhost /]# docker ps -aq
  16. 8b4c74381205
  17. fb87667bbc19

退出容器

  1. exit # 直接退出容器
  2. Ctrl + p + q # 容器不停止退出

删除容器

  1. docker rm 容器id # 删除指定容器,不能删除正在运行的容器,如果要强制删除 rm -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 # 强制停止当前正在运行的容器

4.常用其他命令

后台启动命令

  1. # 命令 docker run -d 镜像名
  2. [root@localhost /]# docker run -d centos
  3. e9d60f206fa19963203db6c42c2f83c5120eb90eeee2b7ba9fdc4589370fd6b6
  4. [root@localhost /]# docker ps
  5. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  6. # 问题docker ps,发现 centos 停止了
  7. # 常见的坑,docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
  8. # nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了

查看日志

  1. docker logs -f -t --tail 数字 容器id
  2. # 显示日志
  3. -tf # 显示日志
  4. --tail # 要显示的日志条数
  5. [root@localhost /]# docker logs -tf --tail 10 ce989f90023d

查看容器中进程信息

  1. # 命令 docker top 容器id
  2. [root@localhost /]# docker top ce989f90023d
  3. UID PID PPID C STIME TTY TIME
  4. root 12249 12232 0 22:44 pts/0 00:00:00

查看镜像的元数据

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

进入当前正在运行的容器

  1. # 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
  2. # 命令
  3. docker exec -it 容器id bashShell
  4. # 测试
  5. [root@localhost /]# docker exec -it ce989f90023d /bin/bash
  6. [root@ce989f90023d /]# ls
  7. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  8. [root@ce989f90023d /]# ps -ef
  9. UID PID PPID C STIME TTY TIME CMD
  10. root 1 0 0 14:44 pts/0 00:00:00 /bin/bash
  11. root 15 0 0 15:19 pts/1 00:00:00 /bin/bash
  12. root 29 15 0 15:20 pts/1 00:00:00 ps -ef
  13. # 方式二
  14. docker attach 容器id
  15. # 测试
  16. [root@localhost /]# docker attach ce989f90023d
  17. 正在执行当前的代码...
  18. # docker exec # 进入容器后开启一个新的终端,可以在里面操作(常用)
  19. # docker attach # 进入容器正在执行的终端,不会启动新的进程

从容器内拷贝到主机上

  1. docker cp 容器id:容器内目标文件路径 目的主机路径
  2. # 查看当前主机目录
  3. [root@localhost home]# ls
  4. ztx
  5. # 进入docker容器内部
  6. [root@localhost home]# docker attach ce989f90023d
  7. [root@ce989f90023d /]# cd /home/
  8. [root@ce989f90023d home]# ls
  9. # 在容器内新建一个文件
  10. [root@ce989f90023d home]# touch test.java
  11. [root@ce989f90023d home]# exit
  12. exit
  13. [root@localhost home]# docker ps -a
  14. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  15. ce989f90023d centos "/bin/bash" 44 minutes ago Exited (0) 46 seconds ago nifty_johnson
  16. # docker内文件拷贝到主机上
  17. [root@localhost home]# docker cp ce989f90023d:/home/test.java /home
  18. [root@localhost home]# ls
  19. test.java ztx
  20. [root@localhost home]#
  21. # 拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现自动同步

学习方式:将所有笔记敲一遍,自己记录笔记!