一、 帮助命令
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 [COMMAND][ARG…] (新建并启动容器)
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