文章目录
- 1、Docker简介
- 1.1、Docker能解决什么问题
- 1.2、什么是虚拟机技术
- 1.2.1、虚拟机的缺点
- 1.3、什么是容器
- 1.3.1、容器与虚拟机比较
- 1.4、分析 Docker 容器架构
- 1.4.1、Docker客户端和服务器
- 1.4.2、Docker 镜像(Image)
- 1.4.3、Docker 容器(Container)
- 1.4.4、Docker 仓库(repository)
- 2、VMware和CentOS7安装
- 2.1、Docker 安装环境说明
- 2.2、在VMware Workstation10中安装CentOS7
- 3、Docker安装卸载与启停
- 3.1、查看当前系统的内核版本
- 3.2、安装 Docker 服务
- [解决bug]
- 3.2.1、安装所需的软件包
- 3.2.2、设置Docker的镜像仓库
- 3.2.3、安装最新版本的 Docker CE
- 3.2.4、查看安装的版本
- 3.3、卸载 Docker 服务
- 3.3.1、卸载旧版本:(如果安装过旧版本的话)
- 3.3.2、卸载 Docker 软件包
- 3.3.3、删除镜像/容器等
- 3.4、启动与停止Docker服务
- 3.5、Docker 帮助命令
- 4、Docker 镜像操作
- 4.1、什么是Docker镜像
- 4.2、拉取镜像
- 4.2.1、从Docker Hub拉取镜像
- 4.2.2、配置国内镜像加速器
- 4.3、列出镜像
- 4.4、搜索镜像
- 4.5、删除镜像
- 5、Docker 容器操作
- 5.1、查看容器
- 5.2、创建与启动容器
- 5.2.1、创建容器的命令
- 5.2.2、交互式容器
- 5.2.3、创建守护式容器
- 5.3、退出创建守护式容器
- 5.4、启动与停止容器
- 5.5、登录容器
- 5.6、拷贝宿主机与容器中的文件
- 5.7、数据目录挂载
- 5.7.1、需求
- 5.7.2、实现
- 5.7.3、目录挂载只读(Read-only)权限
- 5.8、看容器内部细节
- 5.9、查看容器IP地址
- 5.10、删除容器
1、Docker简介
1.1、Docker能解决什么问题
难题:
软件开发中最麻烦的事之一,就是环境配置。软件从开发到上线,一般都要经过开发、测试、上线。
而每个人的计算机环境配置可能都不相同,谁能保证自已开发的软件,能在每一台机器上跑起来?
每台机器必须保证:操作系统的设置,各种依赖和组件的安装都正确,软件才能运行起来。
比如,开发与部署一个 Java 应用,计算机必须安装 JDK,并配置环境变量,还必须有各种依赖。
在windows上进行开发,到Linux上进行部署时这些环境又得重装,这样很就麻烦。
而且系统如果需要集群,那每一台机器都得重新配置环境。
开发人员经常说:“它在我的机器可以正常运行”,言下之意就是,其他机器很可能跑不了。
环境配置如此麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?
也就是说,安装的时候,把原始环境一模一样地复制过来。
解决:
开发人员可以使用 Docker 来解决 “它在我的机器可以正常运行” 的问题,它会将运行程序的相关配置打包(打包成一个镜像),然后直接搬移到新的机器上运行。
1.2、什么是虚拟机技术
虚拟机(virtual machine)就是带环境安装的一种解决方案。
它可以在一种操作系统里面运行另一种操作系统,比如 VMware workstation 虚拟化产品提供了虚拟的硬件,在Windows 系统里面运行 Linux 系统。
1.2.1、虚拟机的缺点
- 资源占用多
每个虚拟机会独占一部分内存和硬盘空间。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运行。 - 冗余步骤多
虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。 - 启动慢
启动硬件上的操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,虚拟机才能真正运行。
1.3、什么是容器
由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术:Linux 容器(Linux Containers,缩写为 LXC)。
容器技术可以将软件需要的环境配置都打包到一个隔离的容器中。让多个独立的容器高效且轻量的运行在同一台宿主机上。而Docker就是为了实现这一切而生的。
1.3.1、容器与虚拟机比较
虚拟机通过虚拟软件中间层将一台或者多台独立的虚拟机器运行在物理硬件之上。
容器则是直接运行在操作系统内核之上,是进程级别的,并对进程进行了隔离,而不是模拟一个完整的操作系统。
虚拟机:冗余步骤多、启动慢、资源占用多
容器: 体积小、启动快(秒级)、资源占用少(只占用需要的资源)
1.4、分析 Docker 容器架构
1.4.1、Docker客户端和服务器
Docker是一个客户端-服务器(C/S)架构程序。
Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。
Docker提供了一个命令行工具和一整套RESTful API。
你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
1.4.2、Docker 镜像(Image)
镜像(Image)是Docker中的一个模板。通过 Docker镜像来创建Docker容器,一个镜像可以创建出多个容器。
镜像与容器的关系类似于Java中类与对象的关系。镜像体积很小,非常便携,易于分享、存储和更新。
Docker | Java |
---|---|
镜像 | 类 |
容器 | 对象 |
1.4.3、Docker 容器(Container)
容器(Container)是基于镜像创建的运行实例,一个容器中可以运行一个或多个应用程序(jdk+开发的java应用程序)。
Docker可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。
我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。
可以理解容器中有包含:一个精简版的Linux环境 + 要运行的应用程序
1.4.4、Docker 仓库(repository)
仓库(Repository)是集中存放镜像文件的场所。
实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
仓库分为公有仓库(Public)和私有仓库(Private)两种。
- Docker公司运营的公共仓库叫做 Docker Hub (https://hub.docker.com/),存放了数量庞大的镜像供用户下载。
- 用户可以在Docker Hub注册账号,分享并保存自己的镜像。(说明:在Docker Hub下载镜像巨慢)
- 国内的公有仓库包括阿里云 、网易云等,可以提供大陆用户更稳定快速的访问。
当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。
Docker 仓库的概念跟 Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。
2、VMware和CentOS7安装
2.1、Docker 安装环境说明
- Docker官方建议在Ubuntu中安装,因为 Docker 是基于Ubuntu发布的,而且一般 Docker 出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的 CentOS 中是不支持更新最新的一些补丁包的。
- 由于很多公司的环境都使用的是 CentOS ,因此这里我们将 Docker 安装到 CentOS 上。
- 注意:
- Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看此前提条件来验证你的 CentOS 版本是否支持 Docker 。
- 需要安装 64位 CentOS7.x 以上的版本,在 CentOS6.x 的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。
- docker中文社区,docker帮助,docker手册,docker教程,docker安装手册 - docker中文社区 https://www.docker.org.cn/
2.2、在VMware Workstation10中安装CentOS7
VMware和CentOS7安装
a.安装 VMware Workstation10虚拟软件
b.安装 CentOS7
c.开启CentOS7 采用Xshell终端工具连接CentOS7 服务器
d.把防火墙关掉: systemctl stop firewalld 并且开机禁用 systemctl disable firewalld
firewalld 防火墙的基本使用
查看状态: systemctl status firewalld
启动: systemctl start firewalld
关闭: systemctl stop firewalld
开机禁用: systemctl disable firewalld
开机启用: systemctl enable firewalld
3、Docker安装卸载与启停
3.1、查看当前系统的内核版本
查看当前系统的内核版本是否高于 3.10
uname -r
3.2、安装 Docker 服务
使用镜像仓库进行安装,采用 yum 命令在线安装(即电脑需要联网)
[解决bug]
Another app is currently holding the yum lock; waiting for it to exit...
另一个应用程序是:PackageKit
内存:194 M RSS (1.1 GB VSZ)
已启动: Mon Feb 27 18:40:06 2023 - 07:09之前
状态 :睡眠中,进程ID:2884
解决办法:
rm -f /var/run/yum.pid
原因分析:
可能是系统自动升级正在运行,yum在锁定状态中,要等待那个进程结束退出:
看报错的那一段话:Another app is currently holding the yum lock;
3.2.1、安装所需的软件包
yum-utils 提供了 yum-config-manager 实用程序,并且 devicemapper 存储驱动需要 device-mapper-persistent-data 和 lvm2 。
yum install -y yum-utils device-mapper-persistent-data lvm2
3.2.2、设置Docker的镜像仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
上面处可能会报错 (原因是国内访问不到docker官方镜像的缘故)
Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo to file/etc/yum.repos.d/docker-ce.repo:
解决:使用以下方式:阿里源访问
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.2.3、安装最新版本的 Docker CE
# 安札最新版本Docker CE
yum install docker-ce docker-ce-cli containerd.io
# 查看Docker历史版本
yum list docker-ce.x86_64 --showduplicates | sort -r
# 安装指定版本的Docker CE语法: yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
yum install -y docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7 containerd.io-1.2.0-3.el7
安装中出现下面提示, 输入 y 然后回车
如上面安装不成功,则卸载Docker 服务再按上面重新安装
3.2.4、查看安装的版本
docker version
3.3、卸载 Docker 服务
以 root 用户运行以下命令:
3.3.1、卸载旧版本:(如果安装过旧版本的话)
Docker 的早期版本称为 docker 或 docker-engine 。如果安装了这些版本,请卸载它们及关联的依赖资源。
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3.3.2、卸载 Docker 软件包
yum remove docker-ce docker-ce-cli containerd.io
3.3.3、删除镜像/容器等
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
3.4、启动与停止Docker服务
上面安装只是安装好, 但是没有启动Docker服务 。
systemctl 命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合。
启动docker: systemctl start docker
停止docker: systemctl stop docker
重启docker: systemctl restart docker
查看docker状态: systemctl status docker
开机自动启动docker: systemctl enable docker
3.5、Docker 帮助命令
查看 docker 帮助命令: docker --help
查看 docker 概要信息: docker info
4、Docker 镜像操作
4.1、什么是Docker镜像
Docker 镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。
Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像。
4.2、拉取镜像
4.2.1、从Docker Hub拉取镜像
docker官网镜像搜索:https://hub.docker.com/
命令:
docker pull 镜像名:标签名
例如:我们拉取 mysql 5.6版本的镜像
docker pull mysql:5.6
4.2.2、配置国内镜像加速器
目前国内访问 Docker HUB 官方的相关镜像下载比较慢,可以使用国内的一些镜像加速器,镜像保持和官方一致,关键是速度块,推荐使用。
阿里云镜像, 需要注册帐号
- 注册并登陆阿里云https://www.aliyun.com/,进入“管理控制台”后,在如下图找到 容器镜像服务 或者搜索 容器镜像服务。
- 通过修改daemon配置文件/etc/docker/daemon.json来使用加速器,如果daemon.json配置文件不存在则手动创建
vim /etc/docker/daemon.json
- 文件加入以下内容 镜像地址 https://u7ln4k0c.mirror.aliyuncs.com是你自己的不要复制我的
{
"registry-mirrors": ["https://u7ln4k0c.mirror.aliyuncs.com"]
}
- 一定要重启docker服务,如果重启docker后无法加速,可以重新启动CentOS
systemctl daemon-reload
systemctl restart docker
- 再通过 docker pull 命令下载镜像:速度杠杠的
docker pull mysql
4.3、列出镜像
- 列出docker下的已安装所有镜像:
docker images
查询结果:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.6 dd3b2a5dcb48 14 months ago 303MB
REPOSITORY:镜像所在仓库的名称
TAG:镜像标签(一般是版本号)
IMAGE ID:镜像ID
CREATED:镜像的创建日期
SIZE:镜像大小
-
只显示镜像ID
docker images -q
查询结果:
[root@localhost ~]# docker images -q dd3b2a5dcb48
-
这些镜像都是存储在Docker宿主机的 /var/lib/docker 目录下
ll /var/lib/docker
查询结果:
[root@localhost ~]# ll /var/lib/docker 总用量 4 drwx------. 2 root root 24 2月 27 19:01 builder drwx------. 4 root root 92 2月 27 19:01 buildkit drwx------. 2 root root 6 2月 27 19:00 containers drwx------. 3 root root 22 2月 27 19:00 image drwxr-x---. 3 root root 19 2月 27 19:00 network drwx------. 14 root root 4096 2月 27 19:14 overlay2 drwx------. 4 root root 32 2月 27 19:00 plugins drwx------. 2 root root 6 2月 27 19:00 runtimes drwx------. 2 root root 6 2月 27 19:01 swarm drwx------. 2 root root 6 2月 27 19:14 tmp drwx------. 2 root root 6 2月 27 19:00 trust drwx------. 2 root root 25 2月 27 19:00 volumes
-
为了区分同一个仓库下的不同镜像,Docker提供了一种称为标签(TAG)的功能。每个镜像都带有一个标签(TAG),例如10.2.1、lastest 等等。这种机制使得同一个仓库中可以存储多个镜像。— 版本号
-
我们可以使用仓库名后面加上一个冒号和标签名 ( REPOSITORY:TAG ) 来指定该仓库中的某一具体的镜像,如果未指定镜像的标签,将下载lastest最新版本,例如:只写了centos,docker将默认使用 centos:lastest镜像。
4.4、搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
docker search [OPTIONS] 镜像名称
例如:docker search centos
查询结果:
[root@localhost ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
.. .. .. .. ..
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:关注度,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
OPTIONS 选项说明:
- -s 列出关注数大于指定值的镜像 最新版没有 -s 这个参数了。
docker search -s 100 centos #列出关注度大于100的镜像
- –no-trunc 显示完整的镜像描述DESCRIPTION
docker search --no-trunc centos
4.5、删除镜像
- 删除某一个镜像
docker rmi 镜像ID
docker rmi 镜像名称:版本号
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest 4f06b49211c0 3 days ago 530MB
mysql 5.6 dd3b2a5dcb48 14 months ago 303MB
[root@localhost ~]# docker rmi 4f06b49211c0
[root@localhost ~]# docker rmi mysql:5.6
- 删除所有镜像 (是 `` 反单引号 )
docker rmi `docker images -q`
其中 docker images -q 获取所有镜像id 的意思
5、Docker 容器操作
5.1、查看容器
查看正在运行容器:
docker ps
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
容器 ID 镜像 初始命令 创建日期 容器状态 端口号 容器名字
查看所有的容器(启动与未启动的容器):
docker ps -a
查看最后一次运行的容器:
docker ps –l
查看停止的容器
docker ps -f status=exited
5.2、创建与启动容器
注意:必须先有镜像,再有容器,下面以CentOS镜像演示
先拉取一下 CentOS 镜像
docker pull centos:7
5.2.1、创建容器的命令
docker run [OPTIONS] 镜像名:标签名
- 创建容器 [OPTIONS] 常用的参数说明:
- -i 表示交互式运行容器(就是创建容器后,马上会启动容器,并进入容器 ),通常与 -t 同时使用 。
- -t 启动后会进入其容器命令行, 通常与 -i 同时使用; 加入 -it 两个参数后,容器创建就能登录进去。即分配一个伪终端。
- –name 为创建的容器指定一个名称 。
- -d 创建一个守护式容器在后台运行,并返回容器ID;
- 这样创建容器后不会自动登录容器,如果加 -i 参数,创建后就会运行容器。
- -v 表示目录映射, 格式为: -p 宿主机目录:容器目录
注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。 - -p 表示端口映射,格式为: -p 宿主机端口:容器端口
5.2.2、交互式容器
说明: 就是创建容器后,马上会启动容器,并进入容器
创建一个交互式容器并取名为 mycentos , ( /bin/bash 是linux中的命令解析器,会进入到容器里面命令行)
docker run -it --name=mycentos centos:7 /bin/bash
可以省略 /bin/bash
docker run -it --name=mycentos centos:7
上图显示,已经进入容器中(上面主机名变成了容器实例编号 )
新开一个 shell 窗口,这时我们通过 docker ps 命令查看,发现可以看到启动的容器,状态为 Up 启动状态
docker ps
新开一个 shell 窗口,再创建一个 mycentos1 容器(注意:docker 命令是不能在容器里面使用)
docker run -it --name=mycentos1 centos:7 /bin/bash
再通过 docker ps 命令查看,发现有2个已经启动的容器
总结: 同一个镜像, 可创建运行多个容器 就像一个Java类,可以创建多个对象
5.2.3、创建守护式容器
如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器(后台运行的容器)。
创建(-d)并运行(-i)守护式容器命令如下(容器名称不能重复):
docker run -id --name=mycentos2 centos:7
5.3、退出创建守护式容器
如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器(后台运行的容器)。
创建(-d)并运行(-i)守护式容器命令如下(容器名称不能重复):
docker run -id --name=mycentos2 centos:7
退出并停止当前容器, 注意在容器内部的命令行执行
exit
[root@1c8663090976 /]# exit
exit
[root@localhost ~]#
退出不停止当前容器
按键盘: Ctrl + p + q ,按一次不行的话,则多按几次,一般是连两次即可。
5.4、启动与停止容器
启动已停止的容器的容器
docker start 容器名称|容器id
例如: docker start centos
停止正在运行的容器(正常停止)
docker stop 容器名称|容器id
例如: docker stop mycentos
强制停止正在运行的容器(一般不用此,除非卡了)
docker kill 容器名称|容器id
例如: docker kill mycentos
启动所有运行过的容器(注意:反单引号
),docker ps -a -q 是查询所有运行过的容器ID
docker start `docker ps -a -q`
停止所有在运行的容器
docker stop `docker ps -a -q`
5.5、登录容器
登录已经启动的在后台运行的容器方式
使用 docker exec 进入容器中打开命令行终端
docker exec -it 容器名称|容器id /bin/bash
例如: docker exec -it mycentos2 /bin/bash
注意:exit 针对通过 docker exec 进入的容器,只退出但不停止容器 ,要停止 用 docker stop mycentos2
注意:交互式容器通过 docker exec 进入容器后,使用 exit 也一样的只退出但不停止容器, 要停止 用 docker stop mycentos
5.6、拷贝宿主机与容器中的文件
如果我们需要将宿主机文件拷贝到容器内可以使用 docker cp 命令,也可以将文件从容器内拷贝到宿主机
5.6.1、将宿主机文件拷贝到容器内
docker cp 要拷贝的宿主机文件或目录 容器名称:容器文件或目录
例如: docker cp /demo.txt mycentos:/demo.txt
- 在宿主机上创建一个demo.txt文件并写入内容
cd / #切换到根目录/下
echo 123456 > demo.txt #创建并写入内容 demo.txt 文件中
ls #查看是否已创建
cat demo.txt #查看文件内容
- 将 demo.txt文件拷贝进 mycentos 容器中的 /opt 目录下(mycentos要是UP启动状态)
docker cp /demo.txt mycentos:/opt/demo.txt
- 登录 mycentos 容器,查看/opt目录下是否有 demo.txt 文件
docker exec -it mycentos /bin/bash
ls /opt/
cat /opt/demo.txt
5.6.2、把容器内的文件拷贝到宿主机
docker cp 容器名称:要拷贝的容器文件或目录 宿主机文件或目录
- 在 mycentos 容器中的 创建文件 test.txt (要登录进容器中)
cd /
echo aaaaa > test.txt
ls
-
需要使用 exit 先退出 docker 容器命令行,回到宿主机
-
从容器拷贝 test.txt 文件到宿主机的 /opt 目录下(在宿主机中操作)
docker cp mycentos:/test.txt /opt/test.txt
注意:文件拷贝 docker cp 命令 均在宿主机中操作
5.7、数据目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,
这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。使用 -v 选项
docker run -id -v /宿主机绝对路径目录:/容器内目录 --name=容器名 镜像名
5.7.1、需求
将宿主机的/opt目录与容器内的/opt目录进行映射,当在宿主机 /opt 目录下创建一个文件 test2.txt ,这个 test2.txt 会自动同步到容器映射目录 /opt
5.7.2、实现
- 创建容器并挂载映射目录(使用 -v 宿主机目录:容器目录 )
创建容器时,将 宿主机目录/opt 挂载 容器目录/opt
docker run -id -v /opt:/opt --name=mycentos centos:7
- 在宿主机/opt 目录下创建一个文件 test2.txt ,这个 test2.txt 会自动同步到容器映射目录 /opt 目录下
cd /opt
echo 111111 > test2.txt
- 进入容器的opt目录看一下
docker exec -it mycentos3 /bin/bash
cat /opt/test.txt
- 当你修改宿主机的 test2.txt 文件中的内容,容器中的test2.txt也会同步修改
5.7.3、目录挂载只读(Read-only)权限
实现挂载的目录只有 只读(Read-only)权限,命令如下 : 只需要加个 ro参数
docker run -id -v /宿主机绝对路径目录:/容器内目录:ro --name=容器名 镜像名
实现:
docker run -id -v /dataHost:/dataContainer:ro --name=mycentos4 centos:7
注意: dataHost dataContainer 目录如果没有会自动创建
然后登录容器:hehe.txt 文件就只能读,不能更改
docker exec -it mycentos4 /bin/bash
cd /dataContainer
ls
echo aaabbbb >> hehe.txt
5.8、看容器内部细节
查看容器运行内部细节,比如可看容器的IP ,id 等等一些详细信息
docker inspect mycentos
5.9、查看容器IP地址
直接显示IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos
5.10、删除容器
删除指定的容器:
docker rm 容器名称 | 容器ID
例如:docker rm mycentos
注意,只能删除停止的容器,没有停止的容器是删除不掉的
删除所有容器(其中运行中的容器无法删除,所以先停再删):
docker rm `docker ps -a -q`