0.帮助命令

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

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


1.镜像命令

镜像仓库的操作

docker search

从Docker Hub查找镜像

语法

  1. docker search [OPTIONS] TERM

OPTIONS说明:

  • —automated :只列出 automated build类型的镜像;
  • —no-trunc :显示完整的镜像描述;
  • -s :列出收藏数不小于指定值的镜像。

实例

从Docker Hub查找所有镜像名包含mysql,并且收藏数大于3000的镜像
image.png

参数说明: NAME: 镜像仓库源的名称 DESCRIPTION: 镜像的描述 OFFICIAL: 是否 docker 官方发布 stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。 AUTOMATED: 自动构建。

docker pull

从镜像仓库中拉取或者更新指定镜像

语法

  1. docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS说明:

  • -a :拉取所有 tagged 镜像
  • —disable-content-trust :忽略镜像的校验,默认开启

实例

image.png

  1. [root@iZbp1g1c3fleilvpwl6240Z ~]# docker pull java
  2. Using default tag: latest # 如果不写tag, 默认就是latest
  3. latest: Pulling from library/java
  4. 5040bd298390: Pull complete # 分层下载, docker iamge的核心 联合文件系统
  5. fce5728aad85: Pull complete
  6. 76610ec20bf5: Pull complete
  7. 60170fec2151: Pull complete
  8. e98f73de8f0d: Pull complete
  9. 11f7af24ed9c: Pull complete
  10. 49e2d6393f32: Pull complete
  11. bb9cdec9c7f3: Pull complete
  12. Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d # 签名
  13. Status: Downloaded newer image for java:latest
  14. docker.io/library/java:latest # 真实地址

本地镜像管理

docker images

查看所有本地主机上的镜像

语法

  1. docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS说明:

  • -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
  • —digests :显示镜像的摘要信息;
  • -f :显示满足条件的镜像;
  • —format :指定返回值的模板文件;
  • —no-trunc :显示完整的镜像信息;
  • -q :只显示镜像ID。

image.png

解释

REPOSITORY 镜像的仓库源 TAG 镜像的标签 IMAGE ID 镜像的ID CREATED 镜像的创建时间 SIZE 镜像的大小

docker rmi

docker rmi : 删除本地一个或多少镜像。

语法

  1. docker rmi [OPTIONS] IMAGE [IMAGE...]
  2. docker rmi -f 容器 id #删除指定的容器
  3. docker rmi -f 容器 id 容器 id 容器 id 容器id #删除多个容器
  4. docker rmi -f $(docker images-aq) #删除全部的容器

OPTIONS说明:

  • -f :强制删除;
  • —no-prune :不移除该镜像的过程镜像,默认移除;

image.png

docker push

将本地的镜像上传到镜像仓库,要先登陆dcoker login到镜像仓库

语法

  1. docker push [OPTIONS] NAME[:TAG]

OPTIONS说明:

  • —disable-content-trust :忽略镜像的校验,默认开启

image.png

docker save

docker save : 将指定镜像保存成 tar 归档文件。

语法

  1. docker save [OPTIONS] IMAGE [IMAGE...]


OPTIONS 说明:

  • -o :输出到的文件。

image.png

docker load

导入使用 docker save 命令导出的镜像

语法

  1. docker load [OPTIONS]

OPTIONS 说明:

  • —input , -i : 指定导入的文件,代替 STDIN。
  • —quiet , -q : 精简输出信息。

image.png


2.容器命令

容器生命周期管理
image.png

docker run

docker run :创建一个新的容器并运行一个命令
image.png

语法

  1. docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • —name=”nginx-lb”: 为容器指定一个名称;
  • —dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • —dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h “mars”: 指定容器的hostname;
  • -e username=”ritchie”: 设置环境变量;
  • —env-file=[]: 从指定文件读入环境变量;
  • —cpuset=”0-2” or —cpuset=”0,1,2”: 绑定容器到指定CPU运行;
  • -m :设置容器使用内存最大值;
  • —net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  • —link=[]: 添加链接到另一个容器;
  • —expose=[]: 开放一个端口或一组端口;
  • —volume , -v: 绑定一个卷

docker start/stop/restart

docker start :启动一个或多个已经被停止的容器 docker stop :停止一个运行中的容器 docker restart :重启容器

image.png

docker rm

docker rm :删除一个或多个容器。

OPTIONS说明:

  • -f :通过 SIGKILL 信号强制删除一个运行中的容器。
  • -l :移除容器间的网络连接,而非容器本身。
  • -v :删除与容器关联的卷。
  1. docker rm $(docker ps -a -q) # 删除所有已经停止的容器
  2. docker rm -f db01 db02 # 强制删除容器 db01、db02
  3. docker rm -l db # 移除容器 nginx01 对容器 db01 的连接,连接名 db
  4. docker rm -v nginx01 # 删除容器 nginx01, 并删除容器挂载的数据卷

image.png

容器操作

docker ps

OPTIONS说明:

  • -a :显示所有的容器,包括未运行的。
  • -f :根据条件过滤显示的内容。
  • —format :指定返回值的模板文件。
  • -l :显示最近创建的容器。
  • -n :列出最近创建的n个容器。
  • —no-trunc :不截断输出。
  • -q :静默模式,只显示容器编号。
  • -s :显示总的文件大小。

image.png

输出详情介绍: CONTAINER ID: 容器 ID。 IMAGE: 使用的镜像。 COMMAND: 启动容器时运行的命令。 CREATED: 容器的创建时间。 STATUS: 容器状态。 状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。 NAMES: 自动分配的容器名称。 列出最近创建的5个容器信息。

退出容器

exit # 直接容器停止并退出 Ctrl + p + q # 容器不停止退出

docker logs

查看日志

docker logs -f -t —tail num 容器

1.编写一段shell脚本 docker run -d centos /bin/sh -c “while true; do echo yuanzi; sleep 1 ; done”

显示日志

-tf # 显示日志 —tail number # 要显示日志的数量

image.png

docker top

查看容器中的进程信息
image.png

docker inspect

docker inspect : 获取容器/镜像的元数据。

  1. docker inspect [OPTIONS] NAME|ID [NAME|ID...]

OPTIONS说明:

  • -f :指定返回值的模板文件。
  • -s :显示总的文件大小。
  • —type :为指定类型返回JSON
  1. [root@iZbp1g1c3fleilvpwl6240Z ~]# docker inspect centos:latest
  2. [
  3. {
  4. "Id": "sha256:0d120b6ccaa8c5e149176798b3501d4dd1885f961922497cd0abef155c869566",
  5. "RepoTags": [
  6. "centos:latest"
  7. ],
  8. "RepoDigests": [
  9. "centos@sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd"
  10. ],
  11. "Parent": "",
  12. "Comment": "",
  13. "Created": "2020-08-10T18:19:49.837885498Z",
  14. "Container": "3b04ecd9fb2d3f921f12d858edf5f3a6aa7c36c8e1e6f74bd32555fd4d7f7da2",
  15. "ContainerConfig": {
  16. "Hostname": "3b04ecd9fb2d",
  17. "Domainname": "",
  18. "User": "",
  19. "AttachStdin": false,
  20. "AttachStdout": false,
  21. "AttachStderr": false,
  22. "Tty": false,
  23. "OpenStdin": false,
  24. "StdinOnce": false,
  25. "Env": [
  26. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  27. ],
  28. "Cmd": [
  29. "/bin/sh",
  30. "-c",
  31. "#(nop) ",
  32. "CMD [\"/bin/bash\"]"
  33. ],
  34. "ArgsEscaped": true,
  35. "Image": "sha256:69587a438b2c9b803db8ed4f6e6b5abce25a6b8ec2583a394807cf82bfd23693",
  36. "Volumes": null,
  37. "WorkingDir": "",
  38. "Entrypoint": null,
  39. "OnBuild": null,
  40. "Labels": {
  41. "org.label-schema.build-date": "20200809",
  42. "org.label-schema.license": "GPLv2",
  43. "org.label-schema.name": "CentOS Base Image",
  44. "org.label-schema.schema-version": "1.0",
  45. "org.label-schema.vendor": "CentOS"
  46. }
  47. },
  48. "DockerVersion": "18.09.7",
  49. "Author": "",
  50. "Config": {
  51. "Hostname": "",
  52. "Domainname": "",
  53. "User": "",
  54. "AttachStdin": false,
  55. "AttachStdout": false,
  56. "AttachStderr": false,
  57. "Tty": false,
  58. "OpenStdin": false,
  59. "StdinOnce": false,
  60. "Env": [
  61. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
  62. ],
  63. "Cmd": [
  64. "/bin/bash"
  65. ],
  66. "ArgsEscaped": true,
  67. "Image": "sha256:69587a438b2c9b803db8ed4f6e6b5abce25a6b8ec2583a394807cf82bfd23693",
  68. "Volumes": null,
  69. "WorkingDir": "",
  70. "Entrypoint": null,
  71. "OnBuild": null,
  72. "Labels": {
  73. "org.label-schema.build-date": "20200809",
  74. "org.label-schema.license": "GPLv2",
  75. "org.label-schema.name": "CentOS Base Image",
  76. "org.label-schema.schema-version": "1.0",
  77. "org.label-schema.vendor": "CentOS"
  78. }
  79. },
  80. "Architecture": "amd64",
  81. "Os": "linux",
  82. "Size": 215102299,
  83. "VirtualSize": 215102299,
  84. "GraphDriver": {
  85. "Data": {
  86. "MergedDir": "/var/lib/docker/overlay2/b279edc1cbf8437c5373fcba8705b334bc2e804bbac41ad75e7f06ab95bb7dbb/merged",
  87. "UpperDir": "/var/lib/docker/overlay2/b279edc1cbf8437c5373fcba8705b334bc2e804bbac41ad75e7f06ab95bb7dbb/diff",
  88. "WorkDir": "/var/lib/docker/overlay2/b279edc1cbf8437c5373fcba8705b334bc2e804bbac41ad75e7f06ab95bb7dbb/work"
  89. },
  90. "Name": "overlay2"
  91. },
  92. "RootFS": {
  93. "Type": "layers",
  94. "Layers": [
  95. "sha256:291f6e44771a7b4399b0c6fb40ab4fe0331ddf76eda11080f052b003d96c7726"
  96. ]
  97. },
  98. "Metadata": {
  99. "LastTagTime": "0001-01-01T00:00:00Z"
  100. }
  101. }
  102. ]

进入容器

1.docker exec
在运行的容器中执行命令

语法

  1. docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

OPTIONS说明:

  • -d :分离模式: 在后台运行
  • -i :即使没有附加也保持STDIN 打开
  • -t :分配一个伪终端

通过 exec 命令对指定的容器执行 bash:
image.png

2.docker attach
docker attach :连接到正在运行中的容器。

要attach上去的容器必须正在运行,可以同时连接上同一个container来共享屏幕(与screen命令的attach类似)。

image.png

数据卷 volume

作用: 实现宿主机系统与容器之间的文件共享
数据卷使用:
a. 自定义数据卷目录
docker run -d -p 8080:8080 —name tomcat01 -v 宿主机目录(绝对路径):容器内目录 tomcat:8.0-jre8

docker run -d -p 8080:8080 —name tomcat01 -v /root/apps/:/usr/local/tomcat/webapps tomcat:8.0-jre8

b.自动数据卷目录
docker run -d -p 8080:8080 —name tomcat01 -v aa:/usr/local/tomcat/webapps tomcat:8.0-jre8
注意:
1.aa代表一个数据卷名字, 名称可以随便写,docker在不存在时自动创建这个数据卷同时自动映射宿主机中某个目录
2.同事在启动容器时会将aa对应容器中全部内容复制到aa映射目录中


3.将容器打包成新的镜像

docker commit -m “描述信息” -a “作者信息” (容器ID或者名称) 打包的镜像名称:标签
docker commit -m “deploy” test project -a “chenyn” 91ffc62 test-tomcat:1.0
图片.png4.将镜像备份出来
docker save 镜像名称:Tag -o 文件名
docker save test-tomcat:1.0 -o test-tomcat-1.0.tar
docker load -i test-tomcat-1.0.tar