帮助命令

  1. docker version #查看docker版本信息
  2. docker info #查看docker系统级信息
  3. docker [命令] --help #查看命令说明

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

镜像命令

docker images查看本地主机所有镜像

  1. [root@localhost /]# 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. -q --quiet #只显示镜像id

docker search 镜像搜索

  1. [root@localhost /]# docker search mysql
  2. mysql MySQL is a widely used, open-source relation 9958 [OK]
  3. mariadb MariaDB is a community-developed fork of MyS 3642 [OK]
  4. mysql/mysql-server Optimized MySQL Server Docker images. Create 725 [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 9958 [OK]
  10. mariadb MariaDB is a community-developed fork of MyS 3642 [OK]

docker pull 下载镜像

image-20200913194111836.png

  1. #指定版本下载
  2. docker pull mysql:5.7

docker rmi删除镜像

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

容器命令

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

  1. docker pull centos

docker run 新建容器启动

  1. docker run [可选参数] [镜像名]
  2. #参数说明
  3. --name=“Name 容器名字 tomcat01 tomcat02,用来区分容器
  4. -d
  5. -it
  6. -p
  7. -p ip:主机端口:容器端口
  8. -p 主机端口:容器端口(常用)
  9. -p 容器端口
  10. -p 随机指定端口
  11. #测试,启动并进入容器
  12. #docker run -it centos 的意思是,为centos这个镜像创建一个容器
  13. #-it就等于 -i和-t,这两个参数的作用是,为该docker创建一个伪终端,这样就可以进入到容器的交互模式(也就是直接进入到容器里面)
  14. #后面的/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这个/bin/bash就表示启动容器后启动bash
  15. [root@localhost /]# docker run -it centos /bin/bash
  16. [root@481cfb6a514b /]# ls
  17. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  18. #退出容器到主机
  19. [root@481cfb6a514b /]# exit
  20. exit

docker ps 列出所有运行的容器

  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. b15b3c7d483d centos "/bin/bash" 5 minutes ago Exited (0) 8 seconds ago infallible_ardinghelli
  11. 481cfb6a514b centos "/bin/bash" 2 hours ago Exited (0) 5 minutes ago exciting_sammet
  12. 9e0de3487965 bf756fb1ae65 "/hello" 4 hours ago Exited (0) 4 hours ago suspicious_robinson

exit 退出容器

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

删除容器

  1. docker rm 容器id #删除指定容器,不能删除正在执行的容器,如果强制删除rm -f
  2. docker rm -f $(docker images -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. docker run -d centos
  3. #问题docker ps 后发现开启的centos容器停止了
  4. #常见的坑:docker容器使用后台运行,就有必要有一个前台进程,docker发现没有应用,就自动停止了(容器没有对外提供服务)

查看日志
image-20200913215345705.png

查看容器内部进程信息

  1. #docker top 容器id
  2. [root@localhost /]# docker top 74b98e2b58ce
  3. UID PID PPID C STIME TTY TIME CMD
  4. root 11505 11489 0 21:55 ? 00:00:00 /bin/bash

查看镜像原数据

  1. #docker inspect 容器id
  2. [root@localhost /]# docker inspect 74b98e2b58ce
  3. [
  4. {
  5. "Id": "74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379",
  6. "Created": "2020-09-13T13:55:55.133386006Z",
  7. "Path": "/bin/bash",
  8. "Args": [],
  9. "State": {
  10. "Status": "running",
  11. "Running": true,
  12. "Paused": false,
  13. "Restarting": false,
  14. "OOMKilled": false,
  15. "Dead": false,
  16. "Pid": 11505,
  17. "ExitCode": 0,
  18. "Error": "",
  19. "StartedAt": "2020-09-13T13:55:57.25370239Z",
  20. "FinishedAt": "0001-01-01T00:00:00Z"
  21. },
  22. "Image": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
  23. "ResolvConfPath": "/var/lib/docker/containers/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379/resolv.conf",
  24. "HostnamePath": "/var/lib/docker/containers/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379/hostname",
  25. "HostsPath": "/var/lib/docker/containers/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379/hosts",
  26. "LogPath": "/var/lib/docker/containers/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379/74b98e2b58ce17668d107537678bfb27b46f0b560febe12c09441f04b0ad0379-json.log",
  27. "Name": "/funny_keldysh",
  28. "RestartCount": 0,
  29. "Driver": "overlay2",
  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. "Capabilities": null,
  54. "Dns": [],
  55. "DnsOptions": [],
  56. "DnsSearch": [],
  57. "ExtraHosts": null,
  58. "GroupAdd": null,
  59. "IpcMode": "private",
  60. "Cgroup": "",
  61. "Links": null,
  62. "OomScoreAdj": 0,
  63. "PidMode": "",
  64. "Privileged": false,
  65. "PublishAllPorts": false,
  66. "ReadonlyRootfs": false,
  67. "SecurityOpt": null,
  68. "UTSMode": "",
  69. "UsernsMode": "",
  70. "ShmSize": 67108864,
  71. "Runtime": "runc",
  72. "ConsoleSize": [
  73. 0,
  74. 0
  75. ],
  76. "Isolation": "",
  77. "CpuShares": 0,
  78. "Memory": 0,
  79. "NanoCpus": 0,
  80. "CgroupParent": "",
  81. "BlkioWeight": 0,
  82. "BlkioWeightDevice": [],
  83. "BlkioDeviceReadBps": null,
  84. "BlkioDeviceWriteBps": null,
  85. "BlkioDeviceReadIOps": null,
  86. "BlkioDeviceWriteIOps": null,
  87. "CpuPeriod": 0,
  88. "CpuQuota": 0,
  89. "CpuRealtimePeriod": 0,
  90. "CpuRealtimeRuntime": 0,
  91. "CpusetCpus": "",
  92. "CpusetMems": "",
  93. "Devices": [],
  94. "DeviceCgroupRules": null,
  95. "DeviceRequests": null,
  96. "KernelMemory": 0,
  97. "KernelMemoryTCP": 0,
  98. "MemoryReservation": 0,
  99. "MemorySwap": 0,
  100. "MemorySwappiness": null,
  101. "OomKillDisable": false,
  102. "PidsLimit": null,
  103. "Ulimits": null,
  104. "CpuCount": 0,
  105. "CpuPercent": 0,
  106. "IOMaximumIOps": 0,
  107. "IOMaximumBandwidth": 0,
  108. "MaskedPaths": [
  109. "/proc/asound",
  110. "/proc/acpi",
  111. "/proc/kcore",
  112. "/proc/keys",
  113. "/proc/latency_stats",
  114. "/proc/timer_list",
  115. "/proc/timer_stats",
  116. "/proc/sched_debug",
  117. "/proc/scsi",
  118. "/sys/firmware"
  119. ],
  120. "ReadonlyPaths": [
  121. "/proc/bus",
  122. "/proc/fs",
  123. "/proc/irq",
  124. "/proc/sys",
  125. "/proc/sysrq-trigger"
  126. ]
  127. },
  128. "GraphDriver": {
  129. "Data": {
  130. "LowerDir": "/var/lib/docker/overlay2/632450a6583ca3e93ecd9cf689ac3f56983c77e111c668ee7ea1befcf62f4410-init/diff:/var/lib/docker/overlay2/295a3faa7fd7ddbf81b948e17667f4bb8be8e805176e2e075969d6f30a84f426/diff",
  131. "MergedDir": "/var/lib/docker/overlay2/632450a6583ca3e93ecd9cf689ac3f56983c77e111c668ee7ea1befcf62f4410/merged",
  132. "UpperDir": "/var/lib/docker/overlay2/632450a6583ca3e93ecd9cf689ac3f56983c77e111c668ee7ea1befcf62f4410/diff",
  133. "WorkDir": "/var/lib/docker/overlay2/632450a6583ca3e93ecd9cf689ac3f56983c77e111c668ee7ea1befcf62f4410/work"
  134. },
  135. "Name": "overlay2"
  136. },
  137. "Mounts": [],
  138. "Config": {
  139. "Hostname": "74b98e2b58ce",
  140. "Domainname": "",
  141. "User": "",
  142. "AttachStdin": true,
  143. "AttachStdout": true,
  144. "AttachStderr": true,
  145. "Tty": true,
  146. "OpenStdin": true,
  147. "StdinOnce": true,
  148. "Env": [
  149. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  150. ],
  151. "Cmd": [
  152. "/bin/bash"
  153. ],
  154. "Image": "centos",
  155. "Volumes": null,
  156. "WorkingDir": "",
  157. "Entrypoint": null,
  158. "OnBuild": null,
  159. "Labels": {
  160. "org.label-schema.build-date": "20200809",
  161. "org.label-schema.license": "GPLv2",
  162. "org.label-schema.name": "CentOS Base Image",
  163. "org.label-schema.schema-version": "1.0",
  164. "org.label-schema.vendor": "CentOS"
  165. }
  166. },
  167. "NetworkSettings": {
  168. "Bridge": "",
  169. "SandboxID": "b7dea3086c89e9a055d11c4e5dc055d89d95b0cf8fdb37ff385c4ead0f7b92ff",
  170. "HairpinMode": false,
  171. "LinkLocalIPv6Address": "",
  172. "LinkLocalIPv6PrefixLen": 0,
  173. "Ports": {},
  174. "SandboxKey": "/var/run/docker/netns/b7dea3086c89",
  175. "SecondaryIPAddresses": null,
  176. "SecondaryIPv6Addresses": null,
  177. "EndpointID": "31a5179e24c36615c74ead28c1adbe229a6f290cfdff6d35444e2d96fa943c2e",
  178. "Gateway": "172.17.0.1",
  179. "GlobalIPv6Address": "",
  180. "GlobalIPv6PrefixLen": 0,
  181. "IPAddress": "172.17.0.2",
  182. "IPPrefixLen": 16,
  183. "IPv6Gateway": "",
  184. "MacAddress": "02:42:ac:11:00:02",
  185. "Networks": {
  186. "bridge": {
  187. "IPAMConfig": null,
  188. "Links": null,
  189. "Aliases": null,
  190. "NetworkID": "08f35ada5fbb99d55506e2866abec35d63c788eb2485f9f0b6a3f569af255d08",
  191. "EndpointID": "31a5179e24c36615c74ead28c1adbe229a6f290cfdff6d35444e2d96fa943c2e",
  192. "Gateway": "172.17.0.1",
  193. "IPAddress": "172.17.0.2",
  194. "IPPrefixLen": 16,
  195. "IPv6Gateway": "",
  196. "GlobalIPv6Address": "",
  197. "GlobalIPv6PrefixLen": 0,
  198. "MacAddress": "02:42:ac:11:00:02",
  199. "DriverOpts": null
  200. }
  201. }
  202. }
  203. }
  204. ]

进入当前正在运行的容器

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

从容器内拷贝到主机

  1. #docker cp 容器id:容器文件路径 主机目录路径
  2. [root@74b98e2b58ce home]# touch test.java
  3. [root@74b98e2b58ce home]# ls
  4. test.java
  5. [root@74b98e2b58ce home]# exit
  6. exit
  7. [root@localhost /]# cd home
  8. [root@localhost home]# ls
  9. redis-6.0.6.tar.gz wise
  10. [root@localhost home]# docker cp 74b98e2b58ce:/home/test.java /home
  11. [root@localhost home]# ls
  12. redis-6.0.6.tar.gz test.java wise

小结

Docker常用命令 - 图3

  1. $ docker --help
  2. attach 将标准输入和标准输出连接到正在运行的容器
  3. build 使用dockerfile文件创建镜像
  4. commit 从容器的修改项中创建新的镜像
  5. cp 将容器的目录或文件复制到本地文件系统中
  6. create 创建一个新的镜像
  7. diff 检查容器文件系统的修改
  8. events 实时输出docker服务器中发生的事件
  9. exec 从外部运行容器内部的命令
  10. export 将容器的文件系统到处为tat文件包
  11. history 显示镜像的历史
  12. images 输出镜像列表
  13. import 从压缩为tar文件的文件系统中创建镜像
  14. info 显示当前系统信息、docker容器与镜像个数、设置信息等
  15. inspect 使用JSON格式显示容器与镜像的详细信息
  16. kill 向容器发送kill信号关闭容器
  17. load tar文件或标准输入中加载镜像
  18. login 登录docker注册服务器
  19. logout 退出docker注册服务器
  20. logs 输出容器日志信息
  21. pause 暂停容器中正在运行的所有进程
  22. port 查看容器的端口是否处于开放状态
  23. ps 输出容器列表
  24. pull 从注册服务器中拉取一个镜像或仓库
  25. push 将镜像推送到docker注册服务器
  26. rename 重命名一个容器
  27. restart 重启一个或多个容器
  28. rm 删除一个或多个容器,若没有指定标签则删除lastest标签。
  29. rmi 删除一个或多个镜像,若没有指定标签则删除lastest标签。
  30. run 在一个新容器中中运行命令,用于指定镜像创建容器。
  31. save 将一个或多个镜像保存为tar
  32. search Docker Hub中搜索镜像
  33. start 启动一个或多个已经停止的容器
  34. stats Display a live stream of container(s) resource usage statistics
  35. stop 停止一个或多个正在运行的容器
  36. tag 设置镜像标签
  37. top 显示容器中正在运行的进程信息
  38. unpause 重启pause命令暂停的容器
  39. update 更新一个或多个容器的配置
  40. version 显示docker版本信息
  41. wait 等待容器终止然后输出退出码

练习

安装nginx

  1. # 1.命令行搜索nginx 推荐在dockerhub搜索https://hub.docker.com/ 可看到详细信息
  2. docker search nginx
  3. # 2.拉取nginx镜像到本地主机
  4. docker pull nginx
  5. #启动镜像 docker run -d --name [容器名称] -p [宿主机端口]:[容器内部端口] -d后台运行
  6. docker run -d --name nginx01 -p 3344:80
  7. #查看启动的镜像
  8. docker images
  9. #在宿主机上访问nginx服务 也可以在外网测试访问http://192.168.91.130:3344/
  10. curl localhost3344
  11. #进入nginx01容器
  12. [root@localhost ~]# docker exec -it nginx01 /bin/bash
  13. root@294af4025b29:/# whereis nginx
  14. nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
  15. root@294af4025b29:/# cd /etc/nginx
  16. root@294af4025b29:/etc/nginx# ls
  17. conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf

接口暴露概念
image-20200914124550414.png

这样操作,我们每次需要修改nginx配置文件时,都需要进入容器内部。十分麻烦,我们要可以在容器外部提供映射路径,达到在容器修改文件名,容器内部就可以自动修改?-v数据卷!!

docker安装tomcat

  1. #官方推荐使用
  2. #这个命令一般用作测试,容器用完即删除tomcat镜像及容器(不建议使用)
  3. docker run -it --rm tomcat:9.0
  4. #下载启动
  5. docker pull tomcat
  6. #启动运行
  7. docker run -d --name tomcat01 -p 3355:8080 tomcat
  8. #测试访问
  9. curl localhost:3355
  10. #进入tomcat容器
  11. docker exec -it tomcat /bin/bash
  1. docker部署es+kibana
  1. #es暴露端口很多
  2. #es十分耗费内容
  3. #es的数据一般需要放置到安全目录!挂载
  4. #--net somenetwork ?网络配置
  5. #启动es
  6. docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
  7. #启动了 linux就很卡 docker stats 查看cpu状态
  8. #测试访问es是否成功
  9. curl localhost:9200
  10. #关闭es,增加内存限制,修改配置文件 -e环境配置参数
  11. docker run -d --name elasticsearch03 -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms256m -Xmx512m" elasticsearch:7.6.2

使用kibana连接es?网络如何能连接过去

image-20200914134233077.png

可视化

portainer

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

什么portainer?

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

访问测试:

http://[ip]:8088/

首次登陆需要注册用户,给admin用户设置密码:

Docker常用命令 - 图6

单机版这里选择local即可,选择完毕,点击Connect即可连接到本地docker
Docker常用命令 - 图7

注意:该页面上有提示需要挂载本地 **/var/run/docker.socker**与容器内的**/var/run/docker.socker**连接。因此,在启动时必须指定该挂载文件。

首页:
Docker常用命令 - 图8
容器列表:
Docker常用命令 - 图9
点击容器列表中的容器名Name,即可查看容器详情:
Docker常用命令 - 图10
并且在容器详情页可以使用该容器创建镜像:
Docker常用命令 - 图11
镜像列表(在镜像列表可以直接pull一个镜像,可以从远程pull,也可以从私有库中pull。从私有库中pull,需要将私有库的地址提前进行配置,这个在后面会说):
Docker常用命令 - 图12
点击镜像ID,即可查看镜像详情信息,在详情信息页面,除了镜像的一些信息外,还可以对该镜像进行打标签tag操作,然后将镜像push到远程仓库或者私有仓库中。
Docker常用命令 - 图13
仓库管理页面(该界面可以查看配置的镜像仓库列表,同时可以添加仓库,添加成功之后,即可在image镜像页面进行pullpush操作。):
Docker常用命令 - 图14
添加镜像仓库:
Docker常用命令 - 图15