Docker - 常用命令:帮助、镜像、容器

前言

docker是现在最流行的应用容器引擎
本篇将介绍常用的一些命令:帮助命令、镜像命令、容器命令,并完全实现一遍

可以把docker容器看作简易版的Linux环境

实际上大部分Linux命令在Docker也可以运行


帮助命令


docker version

得到客户端、服务器的信息

在这里插入图片描述


docker info

也是打印docker的信息,不过这里打印的是docker镜像、容器等信息

在这里插入图片描述


docker --help

和Linux的指令一样,这个指令能够得到docker的所有的命令参数、命令集合

在这里插入图片描述

并且在输入其他命令时也可以在后面带上--help获得相关参数
例如:docker run --help
在这里插入图片描述

这才是官方文档,在实际遇到问题时主要还是靠help命令


镜像命令


docker images:显示本地镜像

在这里插入图片描述

当前只有一个hello-world镜像,
可以看出有5个属性:
repository表示镜像的仓库源、tag镜像标签、image id镜像id,created创建时间,size大小

同一个仓库源可以有多个tag,表示不同的版本,repository:tag定义不同的镜像,不指定标签默认是latest

相关参数: 我们可以通过help命令查询docker image --help
在这里插入图片描述

  • -a列出本地所有的仓库,含中间映像层,默认情况会过滤中间映像层
    在这里插入图片描述
  • -q只显示iamge id
    在这里插入图片描述
  • --digests显示镜像的摘要信息,这在我们下载镜像时显示的摘要

在这里插入图片描述

  • --no-trunc显示完整的镜像信息,前面的image id只截取了12位,实际上完整信息还有很多,这个命令是显示完整信息
    在这里插入图片描述

docker search:查找镜像

docker search 镜像名命令从docker hub查找对应的镜像,虽然我们配置了阿里云下载镜像,但是查找镜像还是在docker hub上查找

例如:docker search tomcat

在docker hub上查找:

在这里插入图片描述

命令:
在这里插入图片描述

其中automated是自动构建,official是指官方版,stars就类似与github的stars,点赞数,description是描述信息

相关参数:

  • -s列出点赞数不小于指定值的镜像

在这里插入图片描述

  • --no-trunc显示完整的描述信息

在这里插入图片描述

  • --automated显示存在automated属性的镜像

这里stars>50并且存在automated属性的镜像只有一个
在这里插入图片描述


docker pull:下载镜像

默认是去docker hub下载,因为外网的原因下载会很慢,建议使用国内的阿里云等

docker pull tomcat,没有写版本号,自动下载最新版Using default tag: latest
在这里插入图片描述


docker rmi:删除镜像

删除镜像:docker rmi 镜像名:版本号,如果不写版本号默认删除latest最新版
也可以用镜像id:docker rmi imageid:tag

但当该镜像正在运行时,会删除失败
在这里插入图片描述

可以加上-f强制删除

在这里插入图片描述

删除多个:docker rmi -f 镜像名:版本号 镜像名:版本号 ,以空格分隔

latest可以省略
在这里插入图片描述

删除全部:可以使用组合命令实现docker rmi -f $(docker images -q)

删除命令可以使用$()得到子命令的结果,docker images -q得到所有的镜像id

在这里插入图片描述


容器命令

有镜像才有容器


docker run:启动

启动镜像,创建容器:docker run [option] 镜像名

在这里插入图片描述

有很多相关参数,可以通过docker run --help查看
常用的参数有:

  • --name 容器名 :给容器重命名
  • -d:后台运行容器,并返回容器id(守护式容器,类似与Linux守护线程)
  • -i:交互模式运行容器,也就是我将会在前台使用该容器进行shell操作
  • -t:为容器重新分配一个伪输入终端,通常与-i同时使用
  • -P:随机端口映射
  • -p:指定端口映射,有四种格式:ip::hostPort:containerPortip::containerPorthostPort:containerPortcontainerPort

这里以一个centos镜像为例:

下载了一个centos镜像,仅215mb,可以看出docker镜像确实是Linux的精简版
在这里插入图片描述

交互模式运行并分配伪端口,容器命名为mycentos

可以看到,centos名字发生了改变,进入了docker的centos系统
在这里插入图片描述

可以进docker内的centos查看,可以看到这就是一个centos
在这里插入图片描述

docker run -it centos /bin/sh 也是启动


守护式容器

当使用docker run -d centos后台运行容器,与交互式不同,仅输出容器id,并且依旧是当前界面

守护式容器必须要有前台程序

在这里插入图片描述

docker容器后台运行,没有前台程序,如果不是一直挂起的命令,后台程序会自动退出
交互式容器-it与守护式容器-d


docker ps:列出运行容器

接上面的步骤,可以再启动一个终端查看docker ps

可以看到:
容器id就是前面终端的id,images镜像,
command启动容器时运行的命令,“/bin/bash”说明这个容器的初始进程为bash进程
created创建时间
status状态:正在运行且运行了3分钟
ports是 容器的端口信息和使用的连接类型(tcp\udp)
name是我们设置的容器名,如果没有设置随机分配默认名

在这里插入图片描述

相关参数:

  • -a:列出当前所有运行的容器+历史上运行过的容器
  • -l:显示最近创建的容器
  • -n:显示最近创建的n个容器,docker ps -n 3
  • -q:只显示容器编号,静默模式
  • --no-trunc:不截断输出

实际上通过--hlep可以显示所有参数,所有的指令都可以通过--help获得:

在这里插入图片描述


退出容器

有两种退出容器的方式:

  • 输入exit:停止容器并退出
    在这里插入图片描述

  • ctrl+p+q:不停止容器退出
    直接键盘快捷键控制
    在这里插入图片描述

既然有不停止退出,当然有进入方法


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

有两种进入方法:

  • docker attach 容器id:直接进入容器,启动命令终端,不会启动新的进程
  • docker exec 容器id:在容器外执行(exec)容器的指令,可以启动新进程,当然也可以进入容器docker exec -it 容器id /bin/bash

运行一个centos容器,不停止容器退出
docker attach直接进入容器:

在这里插入图片描述
而docker exec是在主机执行容器的指令:
在这里插入图片描述

在我们的linux上执行docker容器的指令,执行完后还是在容器外
也可以-it分配一个伪终端,/bin/bash,进入容器

在这里插入图片描述


docker start:启动容器

前面通过exit停止的容器,可以通过容器id或者名字启动docker start 596d58f5776a

在这里插入图片描述

这是启动停止容器


docker restart:重启容器

输入容器id或者容器名重启
在这里插入图片描述


stop \ kill:停止与强制停止

通过容器id或容器名可以停止
停止:docker stop ,温柔的停止

命令执行时,会先向容器中PID为1的进程发送系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间,或者默认的10秒,会继续发送SIGKILL的系统信号强行kill掉进程

在这里插入图片描述

强制停止:docker kill,杀死容器

命令执行时会直接发出SIGKILL的系统信号,以强行终止容器中程序的运行

在这里插入图片描述

类似与Linux的kill -9杀死进程


docker rm:删除已停止的容器

没有运行容器:
在这里插入图片描述

实际上docker的会记住已经停止的容器,上面的ps指令就可以显示历史容器

在这里插入图片描述
同样,通过容器id或者容器名删除docker rm 596d58f5776a

在这里插入图片描述

rm 指令和上面的镜像删除 rmi类似-f强制删除,可以删除运行中的容器;删除多个、删除全部也一样的操作


docker logs:日志信息

同样通过--help显示相关参数信息:

在这里插入图片描述命令:docker logs [参数] 容器id/容器名

在这里插入图片描述

即可显示命令日志

常用的参数:

  • -t:加上时间戳

在这里插入图片描述

  • --tail n:打印最后日志条数

在这里插入图片描述

  • -f:跟随最新的日志打印,也就是自动不停的追加,当有一个程序每隔1s打印一次,不加-f就只能显示一次,加了会自动显示最新的日志
    这个可以写一个不断打印的shell脚本测试
    每隔1s打印一次hello:docker run -d centos /bin/sh -c "while true;do echo hellp;sleep 1;done"

在这里插入图片描述


docker top:查看容器内运行进程

在Linux的指令中,top也是显示运行进程:
在这里插入图片描述

在docker的top指令也是一样的:运行上面的循环打印命令,再docker top 容器id/容器名即可显示该容器内运行的进程
在这里插入图片描述


docker inspect:查看容器内部细节

docker镜像是嵌套形式的,inspect查看内部细节会以JSON字符串的形式显示

docker inspect 容器id/容器名
在这里插入图片描述


docker cp:从容器内拷贝数据到主机

进入centos容器,创建一个文件test.txt
在这里插入图片描述

不停止容器退出centos:ctrl+p+q
将test.txt复制到root目录下:docker cp 容器id:文件地址 复制到的地址
在这里插入图片描述


不同端口启动docker容器:端口映射

前面的docker run还有两个参数:

  • -P:随机端口映射
  • -p:指定端口映射,有四种格式:ip::hostPort:containerPortip::containerPorthostPort:containerPortcontainerPort

这个用tomcat演示,先现在镜像docker pull tomcat:8.0.52
碰到了一个问题:docker - 启动tomcat成功但无法打开8080

docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的
所以即使不想改变端口,如果需要在容器外访问也需要设置端口映射

用8088端口启动tomcat:docker run -it -p 8088:8080 tomcat:8.0.52

在这里插入图片描述

启动成功:
在这里插入图片描述

-p是自定义端口启动,-P是随机端口

再试试-P:
在这里插入图片描述

然后ctrl+p+q不停止退出,再查看tomcat运行情况:

在这里插入图片描述

发现随机到了32768端口,我们访问23768端口即映射到8080

在这里插入图片描述


docker commit:提交镜像

我们可以对tomcat进行一定的修改再提交:

运行tomcat,并进入容器:docker exec -it 容器id /bin/bash
在这里插入图片描述
在这里插入图片描述

这样就可以查看到tomcat的文件,进入webapp内删除docs文件夹

在这里插入图片描述

可以查看确实是没有docs了
在这里插入图片描述

现在提交镜像:docker commit -a "zfk" -m "tomcat without docs" 082d295a3106 test/mytomcat:0.2

在这里插入图片描述
然后关闭原先的tomcat,再启动我们的test/mytomcat

在这里插入图片描述

在浏览器访问,点击docs,404,确实是我们的镜像
在这里插入图片描述

commit命令的参数:-a是添加作者,-m是注释
在这里插入图片描述


总结

docker容器的状态:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值