一、 帮助命令

1. docker版本

docker version

2. docker详细信息

docker info

3. docker帮助,列出所有的命令

docker --htlp

二、 镜像命令

1.docker images(列出本地主机上的镜像)

[root@localhost ~]# docker images

#镜像的仓库源        #镜像的标签          #镜像ID             #镜像创建时间        #镜像大小
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        10 months ago       1.84kB
  • 同一个仓库源可以有多个TAG,代表这个仓库源的不同版本,我们使用REPOSITORY:TAG来定义不同的镜像。
  • 如果你不指定一个镜像的版本标签,例如你只使用tomcat,docker将默认使用tomcat:latest镜像

OPTIONS说明:

OPTIONS

说明

命令

-a

列出本地所有镜像(含中间镜像层)

docker images -a

-q

只显示镜像id

docker images -q

-qa

列出本地所有镜像(含中间镜像层)的id

docker images -qa

–digests

显示镜像的摘要信息

docker images --digests

–no-trunc

显示完整的镜像信息

docker images --no-trunc

2. docker search [某个镜像的名字] (从Docker Hub 上查找镜像)

[root@localhost ~]# docker search tomcat
NAME                          DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
tomcat                        Apache Tomcat is an open source implementati…   2562                [OK]                
tomee                         Apache TomEE is an all-Apache Java EE certif…   70                  [OK]                
dordoka/tomcat                Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   53                                      [OK]
bitnami/tomcat                Bitnami Tomcat Docker Image                     29                                      [OK]
kubeguide/tomcat-app          Tomcat image for Chapter 1                      28                                      
consol/tomcat-7.0             Tomcat 7.0.57, 8080, "admin/admin"              16                                      [OK]
cloudesire/tomcat             Tomcat server, 6/7/8                            15                                      [OK]
aallam/tomcat-mysql           Debian, Oracle JDK, Tomcat & MySQL              11                                      [OK]
tutum/tomcat                  Base docker image to run a Tomcat applicatio…   11                                      
arm32v7/tomcat                Apache Tomcat is an open source implementati…   10                                      
rightctrl/tomcat              CentOS , Oracle Java, tomcat application ssl…   5                                       [OK]
maluuba/tomcat7-java8         Tomcat7 with java8.                             4                                       
arm64v8/tomcat                Apache Tomcat is an open source implementati…   2                                       
amd64/tomcat                  Apache Tomcat is an open source implementati…   2                                       
ppc64le/tomcat                Apache Tomcat is an open source implementati…   1                                       
99taxis/tomcat7               Tomcat7                                         1                                       [OK]
i386/tomcat                   Apache Tomcat is an open source implementati…   1                                       
camptocamp/tomcat-logback     Docker image for tomcat with logback integra…   1                                       [OK]
oobsri/tomcat8                Testing CI Jobs with different names.           1                                       
secoresearch/tomcat-varnish   Tomcat and Varnish 5.0                          0                                       [OK]
picoded/tomcat7               tomcat7 with jre8 and MANAGER_USER / MANAGER…   0                                       [OK]
appsvc/tomcat                                                                 0                                       
jelastic/tomcat               An image of the Tomcat Java application serv…   0                                       
s390x/tomcat                  Apache Tomcat is an open source implementati…   0                                       
cfje/tomcat-resource          Tomcat Concourse Resource                       0

OPTIONS说明:

  • 使用: docker search [OPTIONS] 镜像名字

OPTIONS

说明

命令

–no-trunc

显示完整的镜像信息

docker search --no-trunc tomcat

-s

列出收藏数不小于指定值的镜像

docker search -s 30 tomcat

–automated

只列出automated build类型的镜像

docker search --automated tomcat

3. docker pull [镜像的名字] (下载镜像)

docker pull <镜像的名字> [:TAG]

如:
docker pull tomcat:latest

4. docker rmi [镜像的名字ID] (删除镜像)

  • 删除单个 docker rmi -f [镜像名字或id[:TAG]]
#加-f强制删除
[root@localhost ~]# docker rmi -f hello-world 
Untagged: hello-world:latest
Untagged: hello-world@sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e
Deleted: sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3
  • 删除多个 docker rmi -f [镜像名字或id[:TAG]] [镜像名字或id[:TAG]]
[root@localhost ~]# docker rmi -f tomcat:8.5.47-jdk8-openjdk-slim hello-world
Untagged: tomcat:8.5.47-jdk8-openjdk-slim
Untagged: tomcat@sha256:d74dbae81b8083559e760e0e1baecfa8b31c8ef3ce69d2d4374c5f8e2aa22730
Deleted: sha256:1a2c6822cb15704dcec63e35b82485e3c024eb8a6823ab186dcff2d2a4e29957
Deleted: sha256:1b5cf5e87848c47ea21db77da819b41b1fb46b52a83e4b7ba36767a5d1daec3a
Deleted: sha256:8fb0043ff39a9ba3a81cf70497aeeb70c3795023326accde3d7ea8d1ff283823
Deleted: sha256:5bf992547f4c52e6129774a3475e90f27a424f6e94406fe30af33e51e4d5a678
Deleted: sha256:00b538c04a50d51f14ff942dc65cfff3c01d720a4421a9b9db0013104cfbf111
Deleted: sha256:55e68d3e9750443d24a3fa35843e77297401d627ef12adb660beb9b19249b77f
Deleted: sha256:e954fd5e1f99995d6e62d428aec9bfe3250ea19923d213edcdd5e3b5d0ba703a
Deleted: sha256:b67d19e65ef653823ed62a5835399c610a40e8205c16f839c5cc567954fcf594
Untagged: hello-world:latest
Untagged: hello-world@sha256:4df8ca8a7e309c256d60d7971ea14c27672fc0d10c5f303856d7bc48f8cc17ff
Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e
  • 删除全部 docker rmi -f `docker images -qa` 或者 docker rmi -f $(docker images -qa)
[root@localhost ~]# docker rmi -f `docker images -q`
Untagged: nginx:latest
Untagged: nginx@sha256:9916837e6b165e967e2beb5a586b1c980084d08eb3b3d7f79178a0c79426d880
Deleted: sha256:4152a960875253728e0ba43da37d023e4626c43a268ca0a9c6083119542119fb
Deleted: sha256:1cdfdca2c291c5d20901fcedf580cfb67252d515e4d8bcbd5c9f0d60d7a1ee10
Deleted: sha256:dd9ce25e5c89862300ac75fc6cd2071c572aabeff7e4685238a1d41066af6500
Deleted: sha256:b67d19e65ef653823ed62a5835399c610a40e8205c16f839c5cc567954fcf594
Untagged: tomcat:latest
Untagged: tomcat@sha256:77e41dbdf7854f03b9a933510e8852c99d836d42ae85cba4b3bc04e8710dc0f7
Deleted: sha256:882487b8be1d58ec8471a74344492b3ec013aa5867b095e6efee26bc1d6c6a71
Deleted: sha256:4907cbdba2f2a906d3cc2f17622d38a46df5fcae23f71c8f639842cbb93f3c10
Deleted: sha256:d2a5cb03a22e54004906121e91a845c2c7b059264354a172207753ea7f54900a
Deleted: sha256:e8a161b70a916219b80a9561f6dab0da5f20069a00b74d2788449acebf611cff
Deleted: sha256:ba1fee4da787d294a8ad0198975a3f01dff906e72ce5ac9d2886bc832afff8ef
Deleted: sha256:b0e683cc52ac5e1ffa80bc94d1a59efd8cd5784ac2d41160ad082b79a2fd6b36
Deleted: sha256:a0af7ac0375fc0aafb757db99852e61206bdee896449d24dbacbbd7e1a6a54a8
Deleted: sha256:8c6e838124281f8765fddafbfb7c5bc015f0769f718362ade66d1b5b906c8ab7
Deleted: sha256:3cd9cff53d9c022f5e53afaf401749b06903f2552b0fedb10fb74fc1e29b07aa
Deleted: sha256:9da20796bb5a214a92bae09420f7bb1422c7e8cb3f8fcd971973535d1e39a874
Deleted: sha256:97041f29baff775daa9b4f608c11db724fbe406c6478f69721a85df4006ef7c0
Untagged: hello-world:latest
Untagged: hello-world@sha256:4df8ca8a7e309c256d60d7971ea14c27672fc0d10c5f303856d7bc48f8cc17ff
Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e

三、 容器命令

有镜像才能创建容器,这是必要的前提条件。

1. docker run [OPTIONS] IMAGE

OPTIONS说明(常用):

OPTIONS

说明

命令

–name=“容器别名”

为容器指定一个名称

docker run -it --name=“mycentos” centos:7或docker run -it --name mycentos centos:7

-d

后台运行容器并返回容器ID,也即启动守护式容器

docker run -d centos:7

-i

以交互式模式启动容器,通常与-t同时使用

docker run -it centos:7

-t

为容器重新分配一个伪输入终端,通常与-i同时使用

docker run -it centos:7

-P(大写P)

随机端口映射

docker run -it -P tomcat:jdk8-openjdk

-p(小写p)

指定端口映射,有四种格式ip:hostPort:containerPortip::containerPorthostPort:containerPortcontainerPort

-p后面第一个8080为docker的端口,后面的8080是tomcat的端口docker run -it -p 8080:8080 tomcat:jdk8-openjdk

2. docker ps [OPTIONS] (列出当前所有正在运行的容器)

OPTIONS说明:

OPTIONS

说明

命令

-a

列出当前所有正在运行的容器+历史上运行过的容器

docker ps -a

-l

显示最近创建的容器

docker ps -l

-n

显示最近n个创建的容器

docker ps -n 3

-q

静默模式,只显示容器编号

docker ps -q

–no-trunc

不截断输出

docker ps --no-trunc

3. 退出容器

exit      容器停止退出
ctrl+P+Q  容器不停止退出

4. docker start [容器名字或id] (启动容器)

测试命令: docker start -i 5106a8d4d595

加-i表示以交互式模式启动容器

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
6b047e047b9d        centos:7            "/bin/bash"         8 minutes ago       Up 8 minutes                                      mycentos01
5924a8060567        centos:7            "/bin/bash"         9 minutes ago       Up 8 seconds                                      mycentos
5106a8d4d595        centos:7            "/bin/bash"         34 minutes ago      Exited (127) 10 minutes ago                       heuristic_rubin
100315d542cd        fce289e99eb9        "/hello"            2 hours ago         Exited (0) 2 hours ago                            happy_yonath
[root@localhost ~]# docker start -i 5106a8d4d595
[root@5106a8d4d595 /]#

5. docker restart [容器名字或id] (重启容器)

测试命令: docker restart 6b047e047b9d

STATUS上面的时间已经从Up 15 minutes变为Up 1 second,说明重启成功

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6b047e047b9d        centos:7            "/bin/bash"         17 minutes ago      Up 15 minutes                           mycentos01
5924a8060567        centos:7            "/bin/bash"         19 minutes ago      Up 9 minutes                            mycentos
5106a8d4d595        centos:7            "/bin/bash"         43 minutes ago      Up About a minute                       heuristic_rubin
[root@localhost ~]# docker restart 6b047e047b9d
6b047e047b9d
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6b047e047b9d        centos:7            "/bin/bash"         17 minutes ago      Up 1 second                             mycentos01
5924a8060567        centos:7            "/bin/bash"         19 minutes ago      Up 9 minutes                            mycentos
5106a8d4d595        centos:7            "/bin/bash"         44 minutes ago      Up 2 minutes                            heuristic_rubin

6. docker stop [容器名字或id] (停止容器)

测试命令: docker stop 6b047e047b9d

列出的正在启动容器列表中已没有了ID为6b047e047b9d的容器,表示停止成功

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6b047e047b9d        centos:7            "/bin/bash"         22 minutes ago      Up 12 seconds                           mycentos01
5924a8060567        centos:7            "/bin/bash"         24 minutes ago      Up 14 minutes                           mycentos
5106a8d4d595        centos:7            "/bin/bash"         48 minutes ago      Up 6 minutes                            heuristic_rubin
[root@localhost ~]# docker stop 6b047e047b9d
6b047e047b9d
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5924a8060567        centos:7            "/bin/bash"         24 minutes ago      Up 14 minutes                           mycentos
5106a8d4d595        centos:7            "/bin/bash"         49 minutes ago      Up 7 minutes                            heuristic_rubin

7. docker kill [容器名字或id] (强制停止容器)

8. docker rm [容器id] (删除已停止的容器)

测试命令: docker rm 6b047e047b9d

可以配合docker ps删除所有,如 docker rm $(docker ps -qa)

使用docker rm -f,加了-f表示强制删除

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
6b047e047b9d        centos:7            "/bin/bash"         29 minutes ago      Exited (137) 6 minutes ago                        mycentos01
5924a8060567        centos:7            "/bin/bash"         30 minutes ago      Exited (137) 51 seconds ago                       mycentos
5106a8d4d595        centos:7            "/bin/bash"         55 minutes ago      Exited (137) 51 seconds ago                       heuristic_rubin
100315d542cd        fce289e99eb9        "/hello"            2 hours ago         Exited (0) 2 hours ago                            happy_yonath
[root@localhost ~]# docker rm 6b047e047b9d
6b047e047b9d
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
5924a8060567        centos:7            "/bin/bash"         33 minutes ago      Exited (137) 3 minutes ago                       mycentos
5106a8d4d595        centos:7            "/bin/bash"         58 minutes ago      Exited (137) 3 minutes ago                       heuristic_rubin
100315d542cd        fce289e99eb9        "/hello"            2 hours ago         Exited (0) 2 hours ago                           happy_yonath

四、 其他命令

1. docker run -d [容器名[:TAG]] (启动守护式容器)

测试命令:docker run -d centos:7

[root@localhost ~]# docker run -d centos:7
1b8ba570cfd57d60e441fa28c1b09a654a87f3b046ef2e1feeb4ba2c30415023
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
1b8ba570cfd5        centos:7            "/bin/bash"         10 seconds ago      Exited (0) 55 seconds ago                       reverent_wiles

用docker ps -a进行查看,发现容器已经退出了。

很重要的说明一点,Docker容器后台运行,就必须有一个前台进程。

容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

这个是docker的机制问题,比如你的web容器,我们以nginx为例,正常情况下,我们配置启动服务只需要启动相应的service即可,例如service nginx start。

但是,这样做的话nginx为后台进程模式运行,就导致docker前台没有运行的应用,这样的容器后台启动后,会立即自杀,应为他觉得自己没事可做了。
所以,最佳的解决方案是,将你要运行的程序以前台进程的形式运行。

如果是tomcat等有响应的容器是可以直接在后台运行的,但没有响应的容器想要以后台的方式运行,方式:

#在后台运行的同时,运行一个shell脚本,不断的在打印,使前台有个响应,就算以后台的方式运行,docker也不会关闭容器
docker run -d centos:7 /bin/sh -c "while true; do echo hello centos; sleep 2; done"
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@localhost ~]# docker run -d centos:7 /bin/sh -c "while true; do echo hello centos; sleep 2; done"
b61ce3620ed2d51f92e8f180f78d25961ea8a063826f614f0ad8a108f06fe7f6
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
b61ce3620ed2        centos:7            "/bin/sh -c 'while t…"   10 seconds ago      Up 8 seconds                            pedantic_bohr
[root@localhost ~]# docker logs -t -f --tail 2 b61ce3620ed2
2019-11-21T09:03:58.452508632Z hello centos
2019-11-21T09:04:00.457309979Z hello centos
2019-11-21T09:04:02.463551349Z hello centos
2019-11-21T09:04:04.468593858Z hello centos
2019-11-21T09:04:06.473127573Z hello centos
2019-11-21T09:04:08.475451929Z hello centos
2019-11-21T09:04:10.479954868Z hello centos
2019-11-21T09:04:12.485308998Z hello centos

2. docker logs -f -t --tail [容器id] (查看容器日志)

测试命令:docker logs -f -t --tail 5 4692f96ea48c

-f :加入时间戳

-t :跟随最近的日志打印

--tail <数字> :显示最后多少条数据

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
4692f96ea48c        centos:7            "/bin/bash"         3 minutes ago       Up 3 minutes                            myos
[root@localhost ~]# docker logs -f -t --tail 5 4692f96ea48c
2019-11-21T08:45:24.340735706Z root         18      1  0 08:45 pts/0    00:00:00 ps -ef
2019-11-21T08:46:13.227871128Z [root@4692f96ea48c /]# ps -ef
2019-11-21T08:46:13.227913244Z UID         PID   PPID  C STIME TTY          TIME CMD
2019-11-21T08:46:13.227921181Z root          1      0  0 08:44 pts/0    00:00:00 /bin/bash
2019-11-21T08:46:13.227926415Z root         19      1  0 08:46 pts/0    00:00:00 ps -ef

3. docker top [容器id] (查看容器内运行的进程)

测试命令:docker top b61ce3620ed2

[root@localhost ~]# docker top b61ce3620ed2
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                12855               12839               0                   17:10               ?                   00:00:00            /bin/sh -c while true; do echo hello centos; sleep 2; done
root                12893               12855               0                   17:10               ?                   00:00:00            sleep 2

4. docker inspect [容器id] (查看容器内部细节)

测试命令:docker inspect b61ce3620ed2

[root@localhost docker]# docker inspect b61ce3620ed2
[
    {
        "Id": "b61ce3620ed2d51f92e8f180f78d25961ea8a063826f614f0ad8a108f06fe7f6",
        "Created": "2019-11-21T09:03:29.889520152Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true; do echo hello centos; sleep 2; done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,

...
...

5. 进入正在运行的容器并以命令行交互

1). docker attach [容器id]

测试命令:docker attach f21b5adaea46

[root@localhost docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f21b5adaea46        centos:7            "/bin/bash"         24 seconds ago      Up 23 seconds                           mycentos01
[root@localhost docker]# docker attach f21b5adaea46
[root@f21b5adaea46 /]#
2). docker exec -it [容器id] bashShell

直接进入容器,启动命令的终端

[root@localhost docker]# docker exec -it f21b5adaea46 /bin/bash
[root@f21b5adaea46 /]

在容器外部执行命令,得到结果后返回给宿主机

[root@localhost docker]# docker exec -t f21b5adaea46 ls -l
total 12
-rw-r--r--.   1 root root 12123 Oct  1 01:16 anaconda-post.log
lrwxrwxrwx.   1 root root     7 Oct  1 01:15 bin -> usr/bin
drwxr-xr-x.   5 root root   360 Nov 21 09:23 dev
drwxr-xr-x.   1 root root    66 Nov 21 09:23 etc
drwxr-xr-x.   2 root root     6 Apr 11  2018 home
lrwxrwxrwx.   1 root root     7 Oct  1 01:15 lib -> usr/lib
lrwxrwxrwx.   1 root root     9 Oct  1 01:15 lib64 -> usr/lib64
drwxr-xr-x.   2 root root     6 Apr 11  2018 media
drwxr-xr-x.   2 root root     6 Apr 11  2018 mnt
drwxr-xr-x.   2 root root     6 Apr 11  2018 opt
dr-xr-xr-x. 218 root root     0 Nov 21 09:23 proc
dr-xr-x---.   2 root root   114 Oct  1 01:16 root
drwxr-xr-x.  11 root root   148 Oct  1 01:16 run
lrwxrwxrwx.   1 root root     8 Oct  1 01:15 sbin -> usr/sbin
drwxr-xr-x.   2 root root     6 Apr 11  2018 srv
dr-xr-xr-x.  13 root root     0 Nov 21 02:24 sys
drwxrwxrwt.   7 root root   132 Oct  1 01:16 tmp
drwxr-xr-x.  13 root root   155 Oct  1 01:15 usr
drwxr-xr-x.  18 root root   238 Oct  1 01:15 var
  • docker attach :直接进入容器,启动命令的终端,不会启动新的进程
  • docker exec : 是在容器中打开新的终端,并且可以启动新的进程

6. docker cp [容器id]:[容器中的路径] [宿主机的路径]

在容器中新建一个123.txt文件,并在里面写入一段文字

[root@f21b5adaea46 /]# mkdir /files
[root@f21b5adaea46 /]# cd files/
[root@f21b5adaea46 files]# vi 123.txt
[root@f21b5adaea46 files]# tail 123.txt 
test copy

复制到宿主机中

测试命令:docker cp f21b5adaea46:/files /containerFiles

[root@localhost /]# docker cp f21b5adaea46:/files /containerFiles
[root@localhost /]# ll /containerFiles/
总用量 4
-rw-r--r--. 1 root root 10 11月 21 17:59 123.txt
[root@localhost /]# tail /containerFiles/123.txt 
test copy