前面我们聊了docker的基本概念、架构、镜像、网络、数据卷,回顾请参考https://www.cnblogs.com/qiuhom-1874/category/1766327.html;今天这篇博客主要是对前面博客中的常用命令做一个总结补充说明;

  在前面的博客中我们说过docker是基于LXC之上封装来实现容器的,其核心就是利用内核的资源名称空间和Cgroup实现资源的管控和隔离;这里要补充一点的是docker容器把资源抽象成对象;作为客户端,docker这个命令其实就是在对这些抽象出来的资源对象做增删查改的操作;docker的API是RESTful风格的API,所以它支持类似像http协议里的GET、POST、PUT、DELETE等操作;RESTful风格的API有这样的特点;1、每一个URI代表1种资源;2、支持类似http里的GET、POST、PUT、DELETE;GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;3、通过操作资源的表现形式来操作资源;4、资源的表现形式是XML或者HTML;5、客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。这也是docker客户端和服务端使用http或https协议通信的原因吧!!

  了解了上面docker的API风格,我们接下来再说说docker的对象;docker的对象大概有这样几个,1、镜像(image),2、容器(container),3、网络(network),4、卷(volumes),5、插件(plugins);除上5种还有就是其他对象;其中最为核心的就image,container,network;对于docker来说运行一容器的最最基础的是需要一镜像,其次就是网络,对于容器来讲,我们运行容器的目的就是为了提供服务,而绝大部分服务都是基于网络的,所以真正产生价值的是把服务通过网络提供给客户;所以网络是必不可少的资源;

  镜像相关操作

  镜像搜索

  1. [root@node1 ~]# docker search nginx
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. nginx Official build of Nginx. 13255 [OK]
  4. jwilder/nginx-proxy Automated Nginx reverse proxy for docker con 1812 [OK]
  5. richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of 775 [OK]
  6. linuxserver/nginx An Nginx container, brought to you by LinuxS 113
  7. bitnami/nginx Bitnami nginx Docker Image 83 [OK]
  8. tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp 74 [OK]
  9. alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou 64 [OK]
  10. jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho 61
  11. nginxdemos/hello NGINX webserver that serves a simple page co 50 [OK]
  12. jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 44 [OK]
  13. nginx/nginx-ingress NGINX Ingress Controller for Kubernetes 32
  14. privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al 25 [OK]
  15. schmunk42/nginx-redirect A very simple container to redirect HTTP tra 18 [OK]
  16. nginxinc/nginx-unprivileged Unprivileged NGINX Dockerfiles 16
  17. centos/nginx-112-centos7 Platform for running nginx 1.12 or building 13
  18. blacklabelops/nginx Dockerized Nginx Reverse Proxy Server. 13 [OK]
  19. centos/nginx-18-centos7 Platform for running nginx 1.8 or building n 13
  20. raulr/nginx-wordpress Nginx front-end for the official wordpress:f 12 [OK]
  21. nginx/nginx-prometheus-exporter NGINX Prometheus Exporter 12
  22. mailu/nginx Mailu nginx frontend 7 [OK]
  23. sophos/nginx-vts-exporter Simple server that scrapes Nginx vts stats a 7 [OK]
  24. bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr 5 [OK]
  25. ansibleplaybookbundle/nginx-apb An APB to deploy NGINX 1 [OK]
  26. wodby/nginx Generic nginx 1 [OK]
  27. centos/nginx-110-centos7 Platform for running nginx 1.10 or building 0
  28. [root@node1 ~]#

  提示:docker search 命令是从dockerhub中检索对应镜像的命令;该命令有个-s选项,是用于指定镜像的星级;通过使用-s选项可以筛选出我们指定星级以上的镜像;

  1. [root@node1 ~]# docker search -s 5000 nginx
  2. Flag --stars has been deprecated, use --filter=stars=3 instead
  3. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  4. nginx Official build of Nginx. 13255 [OK]
  5. [root@node1 ~]# docker search -s 500 nginx
  6. Flag --stars has been deprecated, use --filter=stars=3 instead
  7. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  8. nginx Official build of Nginx. 13255 [OK]
  9. jwilder/nginx-proxy Automated Nginx reverse proxy for docker con 1812 [OK]
  10. richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of 775 [OK]
  11. [root@node1 ~]#

  镜像下载

  1. [root@node1 ~]# docker pull nginx
  2. Using default tag: latest
  3. latest: Pulling from library/nginx
  4. afb6ec6fdc1c: Pull complete
  5. b90c53a0b692: Pull complete
  6. 11fa52a0fdc0: Pull complete
  7. Digest: sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097
  8. Status: Downloaded newer image for nginx:latest
  9. docker.io/library/nginx:latest
  10. [root@node1 ~]# docker image pull centos:7
  11. 7: Pulling from library/centos
  12. 524b0c1e57f8: Pull complete
  13. Digest: sha256:e9ce0b76f29f942502facd849f3e468232492b259b9d9f076f71b392293f1582
  14. Status: Downloaded newer image for centos:7
  15. docker.io/library/centos:7
  16. [root@node1 ~]#

  提示:docker pull和docker image pull两个命令都是从dockerhub仓库中下载指定镜像;这里需要提示一下,docker的镜像是镜像名+版本组成的;如果我们只指定了镜像名称没有指定版本,默认是latest版本(最新版);

  查看镜像列表

  1. [root@node1 ~]# docker image ls
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. nginx latest 9beeba249f3e 13 days ago 127MB
  4. centos 7 b5b4d78bc90c 3 weeks ago 203MB
  5. [root@node1 ~]# docker images
  6. REPOSITORY TAG IMAGE ID CREATED SIZE
  7. nginx latest 9beeba249f3e 13 days ago 127MB
  8. centos 7 b5b4d78bc90c 3 weeks ago 203MB
  9. [root@node1 ~]#

  提示:docker image ls 等同docker images 这两个命令都是用来查看本地仓库所有镜像列表;

  除了上面的两种操作外,还有其他操作,我们可以通过docker image --help 来查看对镜像的命令帮助;如下

  1. [root@node1 ~]# docker image --help
  2.  
  3. Usage: docker image COMMAND
  4.  
  5. Manage images
  6.  
  7. Commands:
  8. build Build an image from a Dockerfile
  9. history Show the history of an image
  10. import Import the contents from a tarball to create a filesystem image
  11. inspect Display detailed information on one or more images
  12. load Load an image from a tar archive or STDIN
  13. ls List images
  14. prune Remove unused images
  15. pull Pull an image or a repository from a registry
  16. push Push an image or a repository to a registry
  17. rm Remove one or more images
  18. save Save one or more images to a tar archive (streamed to STDOUT by default)
  19. tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  20.  
  21. Run 'docker image COMMAND --help' for more information on a command.
  22. [root@node1 ~]#

  提示:build子命令是基于dockerfile来构建镜像;history:显示镜像的历史制作过程;import:从tarball导入内容以创建文件系统镜像;inspect:显示镜像的详细信息;load:指定本地一个tar包格式的文件从标准输入导入镜像;prune:移除未使用的镜像;push:把指定镜像推送到仓库;rm:删除一个或多个镜像;save:导出一个或多个镜像到本地指定tar文件中;默认是从标准输出导出;tag:对指定镜像新建一个标签;

  查看镜像历史

  1. [root@node1 ~]# docker image history nginx
  2. IMAGE CREATED CREATED BY SIZE COMMENT
  3. 9beeba249f3e 13 days ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
  4. <missing> 13 days ago /bin/sh -c #(nop) STOPSIGNAL SIGTERM 0B
  5. <missing> 13 days ago /bin/sh -c #(nop) EXPOSE 80 0B
  6. <missing> 13 days ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx 22B
  7. <missing> 13 days ago /bin/sh -c set -x && addgroup --system -… 57.6MB
  8. <missing> 13 days ago /bin/sh -c #(nop) ENV PKG_RELEASE=1~buster 0B
  9. <missing> 13 days ago /bin/sh -c #(nop) ENV NJS_VERSION=0.3.9 0B
  10. <missing> 13 days ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.17.10 0B
  11. <missing> 13 days ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
  12. <missing> 2 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
  13. <missing> 2 weeks ago /bin/sh -c #(nop) ADD file:7780c81c33e6cc5b6… 69.2MB
  14. [root@node1 ~]#

  提示:以上默认是显示部分命令,如果要显示命令全部可以使用 --no-trunc选项;

  查看镜像详细信息

  1. [root@node1 ~]# docker image inspect nginx
  2. [
  3. {
  4. "Id": "sha256:9beeba249f3ee158d3e495a6ac25c5667ae2de8a43ac2a8bfd2bf687a58c06c9",
  5. "RepoTags": [
  6. "nginx:latest"
  7. ],
  8. "RepoDigests": [
  9. "nginx@sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097"
  10. ],
  11. "Parent": "",
  12. "Comment": "",
  13. "Created": "2020-05-15T20:15:52.366876108Z",
  14. "Container": "ed0a25109c2acf3dcb0b4926cad00692e01717b8417d36e50928aa6f03a711ca",
  15. "ContainerConfig": {
  16. "Hostname": "ed0a25109c2a",
  17. "Domainname": "",
  18. "User": "",
  19. "AttachStdin": false,
  20. "AttachStdout": false,
  21. "AttachStderr": false,
  22. "ExposedPorts": {
  23. "80/tcp": {}
  24. },
  25. "Tty": false,
  26. "OpenStdin": false,
  27. "StdinOnce": false,
  28. "Env": [
  29. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  30. "NGINX_VERSION=1.17.10",
  31. "NJS_VERSION=0.3.9",
  32. "PKG_RELEASE=1~buster"
  33. ],
  34. "Cmd": [
  35. "/bin/sh",
  36. "-c",
  37. "#(nop) ",
  38. "CMD [\"nginx\" \"-g\" \"daemon off;\"]"
  39. ],
  40. "ArgsEscaped": true,
  41. "Image": "sha256:23edbb1066877bcc22193518edb32ee3a50a18d52787c4f45f9a8bca95d329eb",
  42. "Volumes": null,
  43. "WorkingDir": "",
  44. "Entrypoint": null,
  45. "OnBuild": null,
  46. "Labels": {
  47. "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
  48. },
  49. "StopSignal": "SIGTERM"
  50. },
  51. "DockerVersion": "18.09.7",
  52. "Author": "",
  53. "Config": {
  54. "Hostname": "",
  55. "Domainname": "",
  56. "User": "",
  57. "AttachStdin": false,
  58. "AttachStdout": false,
  59. "AttachStderr": false,
  60. "ExposedPorts": {
  61. "80/tcp": {}
  62. },
  63. "Tty": false,
  64. "OpenStdin": false,
  65. "StdinOnce": false,
  66. "Env": [
  67. "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
  68. "NGINX_VERSION=1.17.10",
  69. "NJS_VERSION=0.3.9",
  70. "PKG_RELEASE=1~buster"
  71. ],
  72. "Cmd": [
  73. "nginx",
  74. "-g",
  75. "daemon off;"
  76. ],
  77. "ArgsEscaped": true,
  78. "Image": "sha256:23edbb1066877bcc22193518edb32ee3a50a18d52787c4f45f9a8bca95d329eb",
  79. "Volumes": null,
  80. "WorkingDir": "",
  81. "Entrypoint": null,
  82. "OnBuild": null,
  83. "Labels": {
  84. "maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
  85. },
  86. "StopSignal": "SIGTERM"
  87. },
  88. "Architecture": "amd64",
  89. "Os": "linux",
  90. "Size": 126773960,
  91. "VirtualSize": 126773960,
  92. "GraphDriver": {
  93. "Data": {
  94. "LowerDir": "/var/lib/docker/overlay2/4728ce1723abfab65d8065858c616360f45e258d53e7573be8e0f7bbe338be5d/diff:/var/lib/docker/overlay2/e998de0cd64ffe2b0410fb4595cbc3358b1b28626c8d356c6c6ac0ef97234a31/diff",
  95. "MergedDir": "/var/lib/docker/overlay2/d9c40ef0bb9226e6a84b720b9c6ce18ed46b4f61caab567b5ee13a801dbc7ef5/merged",
  96. "UpperDir": "/var/lib/docker/overlay2/d9c40ef0bb9226e6a84b720b9c6ce18ed46b4f61caab567b5ee13a801dbc7ef5/diff",
  97. "WorkDir": "/var/lib/docker/overlay2/d9c40ef0bb9226e6a84b720b9c6ce18ed46b4f61caab567b5ee13a801dbc7ef5/work"
  98. },
  99. "Name": "overlay2"
  100. },
  101. "RootFS": {
  102. "Type": "layers",
  103. "Layers": [
  104. "sha256:ffc9b21953f4cd7956cdf532a5db04ff0a2daa7475ad796f1bad58cfbaf77a07",
  105. "sha256:2f4accd375d93db49e5a47c9bebe4e0dd3cef35f765f5cd36840a986435affc9",
  106. "sha256:6c7de695ede33d90077f01d60ec29e6a51552a3e350757018ff1b1ecd6cee0bf"
  107. ]
  108. },
  109. "Metadata": {
  110. "LastTagTime": "0001-01-01T00:00:00Z"
  111. }
  112. }
  113. ]
  114. [root@node1 ~]#

  提示:docker image inspect 是显示指定镜像的详细信息;其中-f选项可以只显示指定字段;起着过滤功能

  1. [root@node1 ~]# docker image inspect -f {{.RootFS}} nginx
  2. {layers [sha256:ffc9b21953f4cd7956cdf532a5db04ff0a2daa7475ad796f1bad58cfbaf77a07 sha256:2f4accd375d93db49e5a47c9bebe4e0dd3cef35f765f5cd36840a986435affc9 sha256:6c7de695ede33d90077f01d60ec29e6a51552a3e350757018ff1b1ecd6cee0bf] }
  3. [root@node1 ~]# docker image inspect -f {{.RootFS.Type}} nginx
  4. layers
  5. [root@node1 ~]# docker image inspect -f {{.RootFS.Layers}} nginx
  6. [sha256:ffc9b21953f4cd7956cdf532a5db04ff0a2daa7475ad796f1bad58cfbaf77a07 sha256:2f4accd375d93db49e5a47c9bebe4e0dd3cef35f765f5cd36840a986435affc9 sha256:6c7de695ede33d90077f01d60ec29e6a51552a3e350757018ff1b1ecd6cee0bf]
  7. [root@node1 ~]#

  提示:-f指定字段必须从“.”开始且需要用双大括号把字段括起来;如果一级字段是下还有二级字段,可以使用“.”加二级字段名称来表示显示二级字段的值;以此类推;

  删除镜像

  1. [root@node1 ~]# docker pull busybox
  2. Using default tag: latest
  3. latest: Pulling from library/busybox
  4. d9cbbca60e5f: Pull complete
  5. Digest: sha256:836945da1f3afe2cfff376d379852bbb82e0237cb2925d53a13f53d6e8a8c48c
  6. Status: Downloaded newer image for busybox:latest
  7. docker.io/library/busybox:latest
  8. [root@node1 ~]# docker pull alpine
  9. Using default tag: latest
  10. latest: Pulling from library/alpine
  11. cbdbe7a5bc2a: Pull complete
  12. Digest: sha256:9a839e63dad54c3a6d1834e29692c8492d93f90c59c978c1ed79109ea4fb9a54
  13. Status: Downloaded newer image for alpine:latest
  14. docker.io/library/alpine:latest
  15. [root@node1 ~]# docker images
  16. REPOSITORY TAG IMAGE ID CREATED SIZE
  17. nginx latest 9beeba249f3e 13 days ago 127MB
  18. busybox latest 78096d0a5478 2 weeks ago 1.22MB
  19. centos 7 b5b4d78bc90c 3 weeks ago 203MB
  20. alpine latest f70734b6a266 5 weeks ago 5.61MB
  21. [root@node1 ~]# docker image rm centos:7
  22. Untagged: centos:7
  23. Untagged: centos@sha256:e9ce0b76f29f942502facd849f3e468232492b259b9d9f076f71b392293f1582
  24. Deleted: sha256:b5b4d78bc90ccd15806443fb881e35b5ddba924e2f475c1071a38a3094c3081d
  25. Deleted: sha256:edf3aa290fb3c255a84fe836109093fbfeef65c08544f655fad8d6afb53868ba
  26. [root@node1 ~]# docker images
  27. REPOSITORY TAG IMAGE ID CREATED SIZE
  28. nginx latest 9beeba249f3e 13 days ago 127MB
  29. busybox latest 78096d0a5478 2 weeks ago 1.22MB
  30. alpine latest f70734b6a266 5 weeks ago 5.61MB
  31. [root@node1 ~]#

  提示:删除镜像的前提是该镜像没有运行成容器;docker image rm 等同docker rmi命令;如果需要强行删除已经运行为容器的镜像,可以使用-f选项来指定;

  1. [root@node1 ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. alpine latest f70734b6a266 5 weeks ago 5.61MB
  4. [root@node1 ~]# docker run --name a1 -d alpine
  5. d0abe1efe7138dfb409574a785e77b4941a50534a23740d6f7d2f1af36d05589
  6. [root@node1 ~]# docker ps -a
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. d0abe1efe713 alpine "/bin/sh" 4 seconds ago Exited (0) 2 seconds ago a1
  9. [root@node1 ~]# docker image rm alpine
  10. Error response from daemon: conflict: unable to remove repository reference "alpine" (must force) - container d0abe1efe713 is using its referenced image f70734b6a266
  11. [root@node1 ~]# docker rmi alpine
  12. Error response from daemon: conflict: unable to remove repository reference "alpine" (must force) - container d0abe1efe713 is using its referenced image f70734b6a266
  13. [root@node1 ~]# docker image rm -f alpine
  14. Untagged: alpine:latest
  15. Untagged: alpine@sha256:9a839e63dad54c3a6d1834e29692c8492d93f90c59c978c1ed79109ea4fb9a54
  16. Deleted: sha256:f70734b6a266dcb5f44c383274821207885b549b75c8e119404917a61335981a
  17. [root@node1 ~]# docker images
  18. REPOSITORY TAG IMAGE ID CREATED SIZE
  19. [root@node1 ~]#

  提示:只要运行为容器,不管容器是否是运行状态,删除镜像都需要先删除容器在删除镜像,否则就需要用-f来指定强制删除镜像;通常不建议这么干;

  给镜像打标签

  1. [root@node1 ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. alpine latest f70734b6a266 5 weeks ago 5.61MB
  4. [root@node1 ~]# docker image tag alpine:latest alpine:v1
  5. [root@node1 ~]# docker image tag alpine:latest alpine:v2
  6. [root@node1 ~]# docker images
  7. REPOSITORY TAG IMAGE ID CREATED SIZE
  8. alpine latest f70734b6a266 5 weeks ago 5.61MB
  9. alpine v1 f70734b6a266 5 weeks ago 5.61MB
  10. alpine v2 f70734b6a266 5 weeks ago 5.61MB
  11. [root@node1 ~]# docker tag alpine alpine:v3
  12. [root@node1 ~]# docker images
  13. REPOSITORY TAG IMAGE ID CREATED SIZE
  14. alpine latest f70734b6a266 5 weeks ago 5.61MB
  15. alpine v1 f70734b6a266 5 weeks ago 5.61MB
  16. alpine v2 f70734b6a266 5 weeks ago 5.61MB
  17. alpine v3 f70734b6a266 5 weeks ago 5.61MB
  18. [root@node1 ~]#

  提示:docker image tag 和docker tag 等同;都是用于给镜像打标签;打标签的意思类似给镜像取别名的意思;

  移除未使用的镜像

  1. [root@node1 ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. nginx latest 9beeba249f3e 13 days ago 127MB
  4. alpine latest f70734b6a266 5 weeks ago 5.61MB
  5. alpine v1 f70734b6a266 5 weeks ago 5.61MB
  6. alpine v2 f70734b6a266 5 weeks ago 5.61MB
  7. alpine v3 f70734b6a266 5 weeks ago 5.61MB
  8. [root@node1 ~]# docker ps -a
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. d0abe1efe713 alpine "/bin/sh" 11 minutes ago Exited (0) 11 minutes ago a1
  11. [root@node1 ~]# docker image prune -a
  12. WARNING! This will remove all images without at least one container associated to them.
  13. Are you sure you want to continue? [y/N] y
  14. Deleted Images:
  15. untagged: alpine:latest
  16. untagged: alpine:v1
  17. untagged: alpine:v2
  18. untagged: nginx:latest
  19. untagged: nginx@sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097
  20. deleted: sha256:9beeba249f3ee158d3e495a6ac25c5667ae2de8a43ac2a8bfd2bf687a58c06c9
  21. deleted: sha256:8fb6373b4cca3383756d7fd7843dd92f95827e5f2913609e09a9621dcddb3752
  22. deleted: sha256:8b09841626797a03a9fe5e73aa38aeacf9ff0ce85a3004236ff35234eec3b35c
  23. deleted: sha256:ffc9b21953f4cd7956cdf532a5db04ff0a2daa7475ad796f1bad58cfbaf77a07
  24.  
  25. Total reclaimed space: 126.8MB
  26. [root@node1 ~]# docker images
  27. REPOSITORY TAG IMAGE ID CREATED SIZE
  28. alpine v3 f70734b6a266 5 weeks ago 5.61MB
  29. [root@node1 ~]#

  提示:-a表示移除全部未使用的镜像;如果不想交互式确认可以使用-f选项,-f表示强制删除,不询问;

  把指定镜像推送到仓库

  1. [root@node1 ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. linux1874/myimg latest e408b1c6e04f 6 days ago 1.22MB
  4. linux1874/myimg v0.1 e408b1c6e04f 6 days ago 1.22MB
  5. alpine v3 f70734b6a266 5 weeks ago 5.61MB
  6. [root@node1 ~]# docker image push linux1874/myimg
  7. The push refers to repository [docker.io/linux1874/myimg]
  8. Get https://registry-1.docker.io/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
  9. [root@node1 ~]# docker image push linux1874/myimg
  10. The push refers to repository [docker.io/linux1874/myimg]
  11. 4d567d38fed1: Layer already exists
  12. 1079c30efc82: Layer already exists
  13. latest: digest: sha256:6c2f6b7a0df5ca0a46cd46d858e9fd564169471e6715c0155027ac77672508f6 size: 734
  14. 4d567d38fed1: Layer already exists
  15. 1079c30efc82: Layer already exists
  16. v0.1: digest: sha256:6c2f6b7a0df5ca0a46cd46d858e9fd564169471e6715c0155027ac77672508f6 size: 734
  17. [root@node1 ~]#

  提示:如果是往自己私有仓库里推送镜像,需要先登录,然后在推镜像;这里需要注意一点镜像的命名需要同仓库一样;如果是顶级仓库则没有“/”分割;如果推送镜像没有指定版本,默认会把本地指定镜像的所有版本的推送到仓库;

  镜像导出

  1. [root@node1 ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. linux1874/myimg latest e408b1c6e04f 6 days ago 1.22MB
  4. linux1874/myimg v0.1 e408b1c6e04f 6 days ago 1.22MB
  5. alpine v3 f70734b6a266 5 weeks ago 5.61MB
  6. [root@node1 ~]# docker save alpine > alpine.tar.gz
  7. [root@node1 ~]# ls
  8. alpine.tar.gz
  9. [root@node1 ~]#

  提示:docker save默认是把镜像输出到标准输出,所以我们导出时需要用重定向的方式存储到某个文件中,通常这个文件是tar格式的文件;

  镜像导入

  1. [root@node1 ~]# scp alpine.tar.gz 192.168.0.22:/root
  2. The authenticity of host '192.168.0.22 (192.168.0.22)' can't be established.
  3. ECDSA key fingerprint is SHA256:EG9nua4JJuUeofheXlgQeL9hX5H53JynOqf2vf53mII.
  4. ECDSA key fingerprint is MD5:57:83:e6:46:2c:4b:bb:33:13:56:17:f7:fd:76:71:cc.
  5. Are you sure you want to continue connecting (yes/no)? yes
  6. Warning: Permanently added '192.168.0.22' (ECDSA) to the list of known hosts.
  7. alpine.tar.gz 100% 5750KB 31.9MB/s 00:00
  8. [root@node1 ~]#
  1. [root@docker_node1 ~]# ip a s ens33
  2. 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
  3. link/ether 00:0c:29:22:36:7f brd ff:ff:ff:ff:ff:ff
  4. inet 192.168.0.22/24 brd 192.168.0.255 scope global ens33
  5. valid_lft forever preferred_lft forever
  6. inet6 fe80::20c:29ff:fe22:367f/64 scope link
  7. valid_lft forever preferred_lft forever
  8. [root@docker_node1 ~]# ls
  9. alpine.tar.gz
  10. [root@docker_node1 ~]# docker images
  11. WARNING: Error loading config file: /root/.docker/config.json: EOF
  12. REPOSITORY TAG IMAGE ID CREATED SIZE
  13. linux1874/myimg v0.1 e408b1c6e04f 6 days ago 1.22MB
  14. wordpress latest c3fa1c8546fb 4 weeks ago 540MB
  15. mysql 5.7 f965319e89de 4 weeks ago 448MB
  16. httpd 2.4.37-alpine dfd436f9a5d8 17 months ago 91.8MB
  17. [root@docker_node1 ~]# docker load -i alpine.tar.gz
  18. WARNING: Error loading config file: /root/.docker/config.json: EOF
  19. 3e207b409db3: Loading layer 5.879MB/5.879MB
  20. Loaded image: alpine:v3
  21. [root@docker_node1 ~]# docker images
  22. WARNING: Error loading config file: /root/.docker/config.json: EOF
  23. REPOSITORY TAG IMAGE ID CREATED SIZE
  24. linux1874/myimg v0.1 e408b1c6e04f 6 days ago 1.22MB
  25. wordpress latest c3fa1c8546fb 4 weeks ago 540MB
  26. mysql 5.7 f965319e89de 4 weeks ago 448MB
  27. alpine v3 f70734b6a266 5 weeks ago 5.61MB
  28. httpd 2.4.37-alpine dfd436f9a5d8 17 months ago 91.8MB
  29. [root@docker_node1 ~]#

  有关容器的操作

  1. [root@node1 ~]# docker container --help
  2. WARNING: Error loading config file: /root/.docker/config.json: EOF
  3.  
  4. Usage: docker container COMMAND
  5.  
  6. Manage containers
  7.  
  8. Commands:
  9. attach Attach local standard input, output, and error streams to a running container
  10. commit Create a new image from a container's changes
  11. cp Copy files/folders between a container and the local filesystem
  12. create Create a new container
  13. diff Inspect changes to files or directories on a container's filesystem
  14. exec Run a command in a running container
  15. export Export a container's filesystem as a tar archive
  16. inspect Display detailed information on one or more containers
  17. kill Kill one or more running containers
  18. logs Fetch the logs of a container
  19. ls List containers
  20. pause Pause all processes within one or more containers
  21. port List port mappings or a specific mapping for the container
  22. prune Remove all stopped containers
  23. rename Rename a container
  24. restart Restart one or more containers
  25. rm Remove one or more containers
  26. run Run a command in a new container
  27. start Start one or more stopped containers
  28. stats Display a live stream of container(s) resource usage statistics
  29. stop Stop one or more running containers
  30. top Display the running processes of a container
  31. unpause Unpause all processes within one or more containers
  32. update Update configuration of one or more containers
  33. wait Block until one or more containers stop, then print their exit codes
  34.  
  35. Run 'docker container COMMAND --help' for more information on a command.
  36. [root@node1 ~]#

  提示:docker container 操作大概有这么多;其中run ,exec,kill,port,logs,inspect用的比较多;其余命令其实我们看子命令就大概知道什么意思;如果需要查看某个子命令的具体用法和选项,我们可以加上子命令 然后用--help来查看帮助即可;如下

  1. [root@node1 ~]# docker container logs --help
  2. WARNING: Error loading config file: /root/.docker/config.json: EOF
  3.  
  4. Usage: docker container logs [OPTIONS] CONTAINER
  5.  
  6. Fetch the logs of a container
  7.  
  8. Options:
  9. --details Show extra details provided to logs
  10. -f, --follow Follow log output
  11. --since string Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative
  12. (e.g. 42m for 42 minutes)
  13. --tail string Number of lines to show from the end of the logs (default "all")
  14. -t, --timestamps Show timestamps
  15. --until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative
  16. (e.g. 42m for 42 minutes)
  17. [root@node1 ~]#

  提示:以上就是查看logs指明的用法和选项说明;

  创建容器

  1. [root@node1 ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. linux1874/myimg latest e408b1c6e04f 6 days ago 1.22MB
  4. linux1874/myimg v0.1 e408b1c6e04f 6 days ago 1.22MB
  5. alpine v3 f70734b6a266 5 weeks ago 5.61MB
  6. [root@node1 ~]# docker container create alpine
  7. Unable to find image 'alpine:latest' locally
  8. latest: Pulling from library/alpine
  9. Digest: sha256:9a839e63dad54c3a6d1834e29692c8492d93f90c59c978c1ed79109ea4fb9a54
  10. Status: Downloaded newer image for alpine:latest
  11. 13bcdb5067a31389acd75b8218f73c9d759590b81e178084de3c8110af330d0b
  12. [root@node1 ~]# docker container ls
  13. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  14. [root@node1 ~]# docker container ls -a
  15. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  16. 13bcdb5067a3 alpine "/bin/sh" 17 seconds ago Created tender_grothendieck
  17. d0abe1efe713 alpine "/bin/sh" 49 minutes ago Exited (0) 49 minutes ago a1
  18. [root@node1 ~]# docker ps
  19. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  20. [root@node1 ~]# docker ps -a
  21. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  22. 13bcdb5067a3 alpine "/bin/sh" 3 minutes ago Created tender_grothendieck
  23. d0abe1efe713 alpine "/bin/sh" 53 minutes ago Exited (0) 53 minutes ago a1
  24. [root@node1 ~]#

  提示:用create命令创建容器,容器不会自动运行;查看容器用ls命令,其中ls不加选项表示查看运行状态的容器列表,-a表示查看所有状态容器列表;docker container ls 就等同docker ps 都用于查看运行态容器列表;

  创建并运行容器

  1. [root@node1 ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. [root@node1 ~]# docker images
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. linux1874/myimg latest e408b1c6e04f 6 days ago 1.22MB
  6. linux1874/myimg v0.1 e408b1c6e04f 6 days ago 1.22MB
  7. alpine latest f70734b6a266 5 weeks ago 5.61MB
  8. alpine v3 f70734b6a266 5 weeks ago 5.61MB
  9. [root@node1 ~]# docker run --name a1 -d linux1874/myimg
  10. 6be4be4e54690bc10fb07b12cc00c3173636ed95bd456f04ed2cca6cb8cc93e9
  11. [root@node1 ~]# docker ps -a
  12. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  13. 6be4be4e5469 linux1874/myimg "/bin/sh -c '/bin/ht…" 4 seconds ago Up 2 seconds a1
  14. [root@node1 ~]#

  提示:docker run 等同docker container run;其中--name表示指定容器的的名称;-d表示后台运行,不占据现有终端;用run命令表示运行一容器,如果本地没有镜像,它默认会从dockerhub上去拖镜像,然后直接创建并运行容器;如果有镜像,则直接创建并运行为容器;

  停止、启动、重启容器

  1. [root@node1 ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 6be4be4e5469 linux1874/myimg "/bin/sh -c '/bin/ht…" 4 minutes ago Up 4 minutes a1
  4. [root@node1 ~]# docker stop a1
  5. a1
  6. [root@node1 ~]# docker ps -a
  7. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  8. 6be4be4e5469 linux1874/myimg "/bin/sh -c '/bin/ht…" 4 minutes ago Exited (137) 5 seconds ago a1
  9. [root@node1 ~]# docker start a1
  10. a1
  11. [root@node1 ~]# docker ps -a
  12. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  13. 6be4be4e5469 linux1874/myimg "/bin/sh -c '/bin/ht…" 4 minutes ago Up 3 seconds a1
  14. [root@node1 ~]# docker restart a1
  15. a1
  16. [root@node1 ~]# docker ps -a
  17. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  18. 6be4be4e5469 linux1874/myimg "/bin/sh -c '/bin/ht…" 5 minutes ago Up 6 seconds a1
  19. [root@node1 ~]#

  提示:以上命令都支持后面跟多个容器,表示同时操作多个容器;docker start;docker stop ;docker restart;这三个命令等同docker contaier start,docker container stop ,docker container restart;停止容器除了正常用stop停止外,还可以使用kill命令停止容器;两者不同的是一个是给docker进程发送15号信号,正常停止容器,一个是发送9号信号,强杀容器;如下

  提示:--rm选项表示启动一次性容器,容器停止后,自动删除容器;

  查看容器日志

  1. [root@node1 ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. [root@node1 ~]# docker images
  4. REPOSITORY TAG IMAGE ID CREATED SIZE
  5. linux1874/myimg latest e408b1c6e04f 6 days ago 1.22MB
  6. linux1874/myimg v0.1 e408b1c6e04f 6 days ago 1.22MB
  7. nginx stable-alpine ab94f84cc474 5 weeks ago 21.3MB
  8. alpine latest f70734b6a266 5 weeks ago 5.61MB
  9. alpine v3 f70734b6a266 5 weeks ago 5.61MB
  10. [root@node1 ~]# docker run --name n1 -d nginx:stable-alpine
  11. a859fda7c6021a1e5398f744826d5a62257eb1d272b622ea32dac39f83009fc9
  12. [root@node1 ~]# docker ps -a
  13. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  14. a859fda7c602 nginx:stable-alpine "nginx -g 'daemon of…" 3 seconds ago Up 2 seconds 80/tcp n1
  15. [root@node1 ~]# docker container inspect -f {{.NetworkSettings.Networks.bridge.IPAddress}} n1
  16. 172.17.0.2
  17. [root@node1 ~]# curl http://172.17.0.2
  18. <!DOCTYPE html>
  19. <html>
  20. <head>
  21. <title>Welcome to nginx!</title>
  22. <style>
  23. body {
  24. width: 35em;
  25. margin: 0 auto;
  26. font-family: Tahoma, Verdana, Arial, sans-serif;
  27. }
  28. </style>
  29. </head>
  30. <body>
  31. <h1>Welcome to nginx!</h1>
  32. <p>If you see this page, the nginx web server is successfully installed and
  33. working. Further configuration is required.</p>
  34.  
  35. <p>For online documentation and support please refer to
  36. <a href="http://nginx.org/">nginx.org</a>.<br/>
  37. Commercial support is available at
  38. <a href="http://nginx.com/">nginx.com</a>.</p>
  39.  
  40. <p><em>Thank you for using nginx.</em></p>
  41. </body>
  42. </html>
  43. [root@node1 ~]# elinks -dump http://172.17.0.2
  44. Welcome to nginx!
  45.  
  46. If you see this page, the nginx web server is successfully installed and
  47. working. Further configuration is required.
  48.  
  49. For online documentation and support please refer to [1]nginx.org.
  50. Commercial support is available at [2]nginx.com.
  51.  
  52. Thank you for using nginx.
  53.  
  54. References
  55.  
  56. Visible links
  57. 1. http://nginx.org/
  58. 2. http://nginx.com/
  59. [root@node1 ~]# docker logs n1
  60. 172.17.0.1 - - [29/May/2020:16:20:15 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
  61. 172.17.0.1 - - [29/May/2020:16:20:27 +0000] "GET / HTTP/1.1" 200 612 "-" "ELinks/0.12pre6 (textmode; Linux; -)" "-"
  62. [root@node1 ~]# docker container logs n1
  63. 172.17.0.1 - - [29/May/2020:16:20:15 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
  64. 172.17.0.1 - - [29/May/2020:16:20:27 +0000] "GET / HTTP/1.1" 200 612 "-" "ELinks/0.12pre6 (textmode; Linux; -)" "-"
  65. [root@node1 ~]#

  提示:docker container logs等同docker logs命令,用于查看指定容器的日志信息;跟踪某个容器的日志信息可以使用-f选项;该选项同tail -f选项一样;

  删除容器

  1. [root@node1 ~]# docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. d6bd7c0a29bb nginx:stable-alpine "nginx -g 'daemon of…" 3 seconds ago Up 3 seconds 80/tcp n1
  4. [root@node1 ~]# docker container rm n1
  5. Error response from daemon: You cannot remove a running container d6bd7c0a29bb4ea4cb60266727bd534fa086c8a70831dfea00791034bb2a84c4. Stop the container before attempting removal or force remove
  6. [root@node1 ~]# docker container rm -f n1
  7. n1
  8. [root@node1 ~]#

  提示:删除容器必须得是停止状态的容器才可正常删除;如果删除正在运行的容器需要用到-f选项;docker rm 等同docker container rm 用于删除容器;

  附加到现运行的容器终端

  提示:容器运行服务和传统系统上运行服务端方式有点不同,传统运行服务都是把服务运行到后台,而容器运行服务通常是把服务运行为前台;所以我们进入到容器内部终端是可以直接看到nginx访问日志的输出的;docker attach命令等同docker container attach;

  通过上面对镜像和容器的一些基本操作,总结为一点docker客户端命令就是对docker的资源对象做增删查改操作,每个资源对象后面都有一些子命令支持对该资源的操作;我们可以使用docker +资源对象+--help 来查看该资源对象支持那些操作,每个子命令的用法可以使用docker + 资源对象 + 子命令 + --help来查看具体资源对象子命令的操作命令用法和选项的说明;有关网络和卷的操作我这里就不多去演示;有兴趣的朋友可以试试docker + 资源对象 + --help去了解每个资源对象的用法吧;

容器技术之Docker常用命令说明的更多相关文章

  1. 『现学现忘』Docker常用命令 — 21、容器常用命令(三)

    目录 13.进入正在运行的容器并以命令行交互 (1)方式一 (2)方式二 (3)attach和exec的区别 14.从容器内拷贝文件到主机上 15.Docker常用命令小结 (1)容器生命周期管理 ( ...

  2. docker常用命令与容器创建

    ################docker安装##################### Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个 ...

  3. docker常用命令,及进入Tomcat的WebApps发布目录(就是进入docker容器后台目录)

    docker常用命令,及进入Tomcat的WebApps发布目录(就是进入docker容器后台目录)   一.常用命令 1.显示所有的容器,包括未运行的 docker ps -a   2.启动容器.注 ...

  4. docker常用命令、镜像命令、容器命令、数据卷,使用dockerFile创建镜像,dockefile的语法规则。

    一.docker常用命令? 1. 常用帮助命令 1.1 docker的信息以及版本号 /* docker info 查看docker的信息 images2 docker本身就是一个镜像. docker ...

  5. Docker——常用命令

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

  6. 【Docker】(3)---linux部署Docker、Docker常用命令

    linux部署Docker.Docker常用命令 本次部署Linux版本:CentOS 7.4 64位. 说明: 因为Docker是基于Linux 64bit的 所以Docker要求64位的系统且内核 ...

  7. Docker常用命令(二)

    Docker常用命令 查看Docker所有正在运行的容器 docker ps 查看Docker已退出的容器 docker ps -a 查看Docker所有镜像 docker images 删除镜像 删 ...

  8. Docker应用二:docker常用命令介绍

     Docker常用命令使用介绍 docker中常用的命令: 1.docker search image_name:搜查镜像 2.docker pull image_name:从镜像库中拉去镜像 3.d ...

  9. Docker常用命令汇总,和常用操作举例

    Docker命令 docker 常用命令如下 管理命令: container 管理容器 image 管理镜像 network 管理网络 node 管理Swarm节点 plugin 管理插件 secre ...

随机推荐

  1. 顺序表的C语言实现

    在现实应用中,有两种实现线性表数据元素存储功能的方法,分别是顺序存储结构和链式存储结构.顺序表操作是最简单的操作线性表的方法.下面的代码实现了顺序表的几种简单的操作.代码如下 //start from ...

  2. Ansible入门知识

    一.ansible概述 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具.它用Python写成,类似于saltstack和Puppet,但是有一个不同和优点是我们不需要在节点中安装 ...

  3. P2766 最长不下降子序列问题 网络流重温

    P2766 最长不下降子序列问题 这个题目还是比较简单的,第一问就是LIS 第二问和第三问都是网络流. 第二问要怎么用网络流写呢,首先,每一个只能用一次,所以要拆点. 其次,我们求的是长度为s的不下降 ...

  4. Spring官网阅读(十一)ApplicationContext详细介绍(上)

    文章目录 ApplicationContext 1.ApplicationContext的继承关系 2.ApplicationContext的功能 Spring中的国际化(MessageSource) ...

  5. GroupJoin()各参数的意义及用法

    EF Core中GroupJoin的注释比较复杂: public static IEnumerable<TResult> GroupJoin<TOuter, TInner, TKey ...

  6. Spring Cloud 系列之 Config 配置中心(一)

    服务配置现状 配置文件是我们再熟悉不过的,在微服务系统中,每个微服务不仅仅只有代码,还需要连接其他资源,例如数据库的配置或功能性的开关 MySQL.Redis .Security 等相关的配置.除了项 ...

  7. 在Qsys中创建用户自定义IP

    在SOC FPGA的设计中,必须使用Qsys软件才能将ARM和FPGA之间的接口引入到FPGA设计中.为了设计上的方便,客户经常希望将Qsys中的一些接口信号引入到FPGA顶层设计文件中.本文以Ava ...

  8. REST模式中HTTP请求方法

    一直在测试REST模式的WEB SERVICE接口,客户端的HTTP的请求方式一般分为四种:GET.POST.PUT.DELETE,这四种请求方式有什么不同呢.简单的说,GET就是获取资源,POST就 ...

  9. 省市县三级联动sql文件

    截止于2018年,中国有34个省级, 地级行政区划单位334个 县级行政区划单位2851个 乡级行政区划单位39888个 例如 湖南省有多少个市级单位: 先拿到湖南省的code,再查city表: SE ...

  10. 2018-06-28 jq CSS处理

    CSS处理 1.CSS样式 css() -> 获取jq对象的css样式 css({'':"'}) ->设置jq对象的css样式 相当于js对象的style()方法 2.位置 of ...