1、docker有着比虚拟机更少的抽象层。不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在CPU、内存利用率上docker将会在效率上有明显优势。
2、docker利用的是宿主机的内核、不需要重新加载操作系统内核OS。当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。进而避免引寻、加载操作系统内核返回等,比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载OS,返回新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返回过程,因此新建一个docker容器只需要几秒钟。
启动docker: systemctl start docker
停止docker: systemctl stop docker
重启docker: systemctl restart docker
查看docker状态: systemctl status docker
开机启动: systemctl enable docker
查看docker概要信息: docker info
查看docker总体帮助文档: docker --help
查看docker命令帮助文档: docker具体命令--help
docker images 列出本地主机上的镜像
docker search 某个xxx镜像名字
docker pull 某个xxx镜像名字
docker system df 查看镜像/容器/数据卷所占的空间docker rmi 某个xxx镜像名字ID
docker images如下图所示,列出本机上的镜像
docker search redis,在docker远程仓库中搜索镜像名字如下图:
docker search --limit 5 redis
--limit:只列出N个镜像,默认25个
docker pull redis [:TAG] 下载指定TAG(版本号)的redis镜像
docker pull redis 默认下载最新的镜像
docker system df 查看空间
docker rmi hello-world
docker rmi [IMAGE ID]
两者均可删除镜像,第二种是通过指定唯一值的IMAGE ID 来进行删除。删除前需要先停止该镜像在容器中的使用。否则会出警告。
或者使用如下命令,强制删除
docker rmi -f [IMAGE ID]
docker rmi -f 镜像名1:TAG 镜像名2:TAG
删除多个镜像
docker rmi -f $(docker images -qa)
删除全部镜像
docker images执行后,在本地镜像列表显示仓库名、标签都是的镜像,俗称虚悬镜像dangling image。
有镜像才能创建容器,这是一个根本的前提。docker是运行在linux类型资源上。例如在一个linux物理机器上,先docker pull ubuntu
,下载一个最新的ubuntu镜像。
下载ubuntu镜像后,就是进行容器的操作。
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
docker run -it ubuntu /bin/bash
-i 是代表交互式操作
-t 是代表终端
/bin/bash 是因为我们希望有个交互式的shell显示。
exit 在交互式的shell中输入该命令,是退出容器,关闭容器,并不能使得容器在后台运行,因为是交互式容器。
ctrl+p+q 同样是退出,则容器不停止
使用最新的镜像ubuntu以交互模式启动一个容器,在容器内执行/bin/bash命令。
保持容器ubuntu的存在,然后新建一个shell,连接到该机器,执行以下命令。则能看到当前在运行状态的容器。因为启动容器时并没有指定名字,所以看到NAMES字段下的名字是随机生成的。
docker ps
指定容器名字后运行
docker run -it --name=test ubuntu /bin/bash
在容器外的命令行界面查看容器运行状态
docker ps
这里可以看到容器的名字变为了规定好的test,形象的表示就是一头鲸鱼身上背了两个集装箱。
docker ps --help
命令帮助说明
docker ps -a
历史启动过的容器和当前正在运行的容器
docker ps -l
显示最近创建的容器
docker ps -n [数字]
显示最近N个创建的容器
docker start 容器id或容器名
启动已经停止运行的容器
docker restart 容器ID或容器名
重启容器
docker stop 容器id或容器名
停止容器
docker kill 容器id或容器名
强制停止容器
docker rm 容器id
删除容器
docker rm -f 容器id
强制删除容器
docker ps -aq
显示所有容器的id
启动守护式容器,即后台可保持运行的容器
docker run -d 容器名
需要注意的点是,以后台进程形式启动容器后,记得docker ps -a
查看下。有时会出现以下情况。redis默认会有前台运行进程,所以使用-d
启动,后台进程不会自杀。
docker logs 容器id
查看容器日志
docker top 容器id
查看容器内运行的进程
docker inspect 容器id
查看容器内部细节
docker exec -it 容器id /bin/bash
以交互式重新进入容器,即在容器中打开新的终端,用exit退出时不会导致容器的停止
docker attach 容器id
重新进入容器,在使用exit退出后,会杀死容器
docker cp 容器id:容器内路径 目的主机路径
将容器内的文件filetest.txt拷贝到了主机上root目录内
docker export 容器ID>文件名.tar
导出容器的内容留作一个tar归档文件
cat 文件名.tar|docker import - 镜像用户/镜像名:镜像版本号
从tar包中的内容创建一个新的文件系统在导入为镜像
将前一步导出的包在导进去,重名了一个新镜像
然后在新建一个容器,该容器就跟刚刚导出的容器是一样的