Docker 相关基本常用命令
帮助命令:
docker version
docker info
docker --help
再来明确一下它们之间的关系:
鲸鱼背上有集装箱
蓝色的大海里面 ----> 宿主机系统windows10
鲸鱼 ------> Docker
集装箱 -----> 容器实例 ----> from ---> 来自 我们的镜像模板
镜像命令:
镜像就相当于千层饼,一层包裹一层,我们看到的就是最外面的一层,例如鸡蛋:鸡蛋皮--> 蛋清-->蛋黄
docker images
1.列出本地主机上的镜像;
2.可选参数(OPTIONS说明)
-a 列出本地所有的镜像(含中间映像层)
-q 只显示镜像ID
-qa 可以联合使用,把所有的镜像ID列出
--digests 显示镜像的摘要信息(类似说明,有则有无则none)
--no-trunc 显示完成的镜像信息(尤其是镜像ID)
图例:
docker search 某个xxx镜像名字
1.网站:查的时候是从docker hub上查,下载是从阿里云/网易云的加速器上下载;
2.命令:
docker search [OPTIONS] 镜像名字
选项参数:
-s 列出收藏数不小于指定值的镜像: docker search -s 30 tomcat (查出tomcat的Starts大于30的镜像)
改为: sudo docker search --filter=stars=30 tomcat
--no-trunc 显示完整的镜像描述
--format 格式化显示:sudo docker search --filter=stars=30 --format "table {{.Name}}\t{{.IsAutomated}}\t{{.IsOfficial}}" tomcat
docker pull 某个xxx镜像名字
1.下载镜像
2.命令:
docker pull 镜像名字[:TAG] ----> docker pull tomcat 等价于 docker pull tomcat:latest
docker rmi 某个xxx镜像名字/唯一镜像ID
1.rmi ---> remove images
2.删除单个:如果删除出现报 conflict ,是因为该镜像的容器再后台运行,
需要强制删除即: docker rmi -f hello-world ---> 等价于 docker rmi -f hello-world:latest
3.删除多个:docker rmi -f 镜像名称/ID 镜像名称/ID
4.删除全部:docker rmi -f $(docker images -qa)
容器命令:
有镜像才能创建容器,这是根本前提(下载一个Ubuntu镜像演示)--> docker pull ubuntu (安装虚拟机差不多2个G,而镜像只有70多M)
新建并启动容器:
1.docker run [OPTIONS] images
OPTIONS说明:
图例:
启动交互式容器:即 -it , i --> 交互模式;t --> 伪终端;
命令为: docker run -it f643c72bc252
图例:命令行已经发生了变化,此时已经进到了以ubuntu为镜像创建的容器实例中:
列出当前所有正在运行的容器:
再打开一个命令行窗口,然后输入:docker ps [OPTIONS] ---> 即鲸鱼背上有哪些集装箱(容器)在跑着;当前正在运行的容器;
图例:
docker ps OPTIONS参数说明:
docker ps -a (所有)
docker ps -n 3 (最近三个,最近的在最上面,以此类推)
docker ps -l (上一个)
docker ps -lq (只显示容器ID)
sudo docker run -it --name myubuntu0319 ubuntu (--name myubuntu0319 可以起别名,不指定系统会随机生成)
退出容器:
1.第一种方式:exit (容器停止退出, 此时容器状态已关闭了)
2.第二种方式:ctrl + p + q (容器不停止退出, 此时使用 docker ps ---> status => up)
此时再输入 docker ps 则刚刚退出来的容器就不在了;
启动容器:
即刚刚通过 exit 退出的,可以通过 docker start 容器id/名称
示例:sudo docker start a6226add4555
重启容器:
即通过 ctrl + p + q退出的,任然处在 up状态下的容器,命令: docker restart 容器ID/名称
示例:sudo docker restart d584d9c19d8b
停止容器:
温柔一些,命令: docker stop 容器ID/名称
示例:sudo docker stop d584d9c19d8b
强制停止容器:
粗暴一些,类似把电源,命令:docker kill 容器ID/名称
示例:sudo docker kill a6226add4555
删除已停止的容器:
命令:docker rm 容器ID
如果删除没有关停的容器使用: docker rm -f 容器ID
一次性删除多个容器:
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
重点:
启动守护式容器:
命令:docker run -d 容器名
示例:sudo docker run -d ubuntu
但是使用 docker ps 时发现没有刚刚启动的容器?
说明:
查看容器日志:
命令:docker logs -f -t --tail 容器ID
-t 是加入时间戳(可以看到日志带时间)
-f 跟随最新的日志打印,追加打印最新输出日志
--tail 数字 显示最后多少条
首先输入:sudo docker run -d ubuntu /bin/sh -c "while true;do echo hello guos;sleep 2; done"
接着 docker ps
最后 sudo docker logs -t -f --tail 3 c3500b8179a2
查看容器内运行的进程:
命令:docker top 容器ID (类似Linux 里的 top)
示例:sudo docker top c3500b8179a2
查看容器内部细节:
命令:docker inspect 容器ID
示例:sudo docker inspect c3500b8179a2 ----> 返回的是类似json的数据结构(对象数组)
进入正在运行的容器并以命令行交互:
命令:docker exec -it 容器ID bashShell
重新进入命令:docker attach 容器ID
上述两者的区别:
1.attach 直接进入容器命令行终端,不会启动新的进程;
我们通过 ctrl + p + q 退出,还想进入
即: docker attach 容器ID (进入当前正在运行的容器)
示例:sudo docker attach 5d60b28faa27
2.exec是在容器中打开新的终端,并且可以启动新的进程;
示例:docker exec -t 容器ID ls -l /tmp ---> 没有进入容器,且把 ls -l /tmp 这个命令的结果返回给宿主机(隔山打牛);
示例:sudo docker exec -t 5d60b28faa27 ls -l /tmp ---> 结果:total 0 和我们在容器内看到的一样;
从容器内拷贝文件到主机上:
即想把容器内的数据持久化;
命令:docker cp 容器ID:容器内路径 目的主机路径
示例:
首现在容器内 : echo guos >> g.log
接着退出:ctrl + p + q
然后到宿主机上:sudo docker cp 5d60b28faa27:/tmp/g.log /home/gs
然后可以 ll 查看结果