第4节 docker命令基本用法说明

cli分类

image-20240329141147278

swarm不行了,被k8s替代了,不学。

管理类👇

image-20240329141828036

container 管理容器

image 管理镜像

network 管理网络

volume 管理存储

进一步还可以看docker image 大类下的子命令👇

image-20240329142036001

image-20240329142238407

但是老司机不爱这种分类的cli,更爱直接点比如

docker image ls 就= docker images

image-20240329142439034

docker container ls = docker ps

image-20240329142811660

image-20240329143553883

docker info 还可以看到docker compose的版本👇 以及 server 里的容器:

running运行的几个,paused暂停的几个,stopped停止的几个

image-20240329143618045

docker 跑一个hello world,

1、要知道docker 跑容器,容器靠镜像,镜像哪里来呢

2、本地找找

3、仓库找找

image-20240329143910324

上图就的Hello from Docker!字眼 就说明执行成功了,容器就是运行完就释放掉了,这里又不是当作守护进程来跑的,所以docker ps里看不到了就。

docker pull hello-world 只下载 不run

image-20240329150130027

docker run hello-world = docker pull hello-world + docker start hello-world

image-20240329150719607

注意知识容器进程退出了,只是程序退出了,这个容器还在磁盘上。

进程没了,磁盘空间照样占着的会,

image-20240329151130034

image-20240329151310820

start 起来后运行完了也会退出的

image-20240329151547964

image-20240329160037603

很重要的一个目录-image下载存放目录

image-20240329152028825

这个目录是默认存放镜像和容器相关文件的,这个目录没了,所有容器 和 所有镜像就都没了。

速度线索尝试总结,我感觉要单拎出来①★:这个目录必须是一个高速且大的磁盘,又高又大,因为所有的images和containers都默认扔在这里,跑起来,硬盘慢也会拖累容器的运行速度。生产中可以找个目录单独挂一个高速的SSD,没预算就算了哦,一起ssd也是ok的,哈哈,缝缝补补有三年也是ok的

彻底删除容器

1、卸载软件:apt purge docker-ce # ubuntu的

centos的“:yum remove docker-ce ? 还是yum history list 找到id后yum history undo xx 卸的还全呢,对吧。

2、删除软件产生的文件:rm -rf /var/lib/docker

学到这里,我又要逼逼两句了,删除A,就是要两步走①删除A②删除A的影响,有首歌叫 你身上的香水味~~,就是人走了,还得通风。HA也是这个道理,不管是线路的HA还是节点的HA,当HA的成员挂了一个,作为HA的底层逻辑同样需要①去掉故障成员②去掉故障成员当前的影响(比如全网ARP,会话缓存、MAC缓存等)③如果故障恢复一样要观察一下是不是真的恢复了稳定了才能将故障点重新加回HA并继续提供服务。

docker info也是可以看到整个默认存放的关键目录的

image-20240329155611670

可以换成成别的目录,比如换到一块牛逼plus的单独硬盘上去,或者将整个目录挂过去都是一样的。

搞一个run后不退出的容器

image-20240329161054740

image-20240329161216695

镜像是基于不同的操作系统做出来的,所以docker run也好pull也罢都是要注意的,

image-20240329171213541

然后还可以到tag里去看细节

👇看着就是不同系统的镜像,docker pull nginx就是下载linux的且是latest的版本。

image-20240329171258782

alpine是一个精简的linux os。是基于某个os制作出来的镜像。区别默认的应该就是deban和ubuntu的os做出来的。这句话怎么了理解哦:

就是docker的分层模型

image-20240329174910547

container层就是docker engine了实现了容器的隔离,通过namespace和cgroup两大组件做到了隔离和资源的分配以及限制。

那么要理清楚一个点:就是

image-20240329175029455

这些版本代表的意思是啥,对分层理解就会加深一点,

image-20240329175247257

根据GPT多说,可以认为她讲的是对的,我们下载的镜像它肯定不是dockerengine ,docker engine是docker server进程,而images名称里的os就是说我整个image利用了底层宿主os的内核(大家都是linux内核啦),然后我image里还自带一些基于整个内核实现精简os,整个os是半成品os是没有内核的os,GPT称之为用户空间--Alpine linux的用户空间,所以这部分+宿主的内核就构成了完整的os了。

image-20240329175853139

image-20240329175901167

image-20240329180315384

之前学习sendfile这个0复制技术逻辑的时候,还头头是道,其实殊不知当时的整张图就是在OS里聊的,对吧,用户空间,内核空间,这些就是OS啊,唉,蠢笨如我~~~

image-20240329180704642

image-20240329180646848

image-20240329181112552

user Space 1 2 3 就是你下载的image 并且运行起来的 容器,这些容器通过 container也就是docker 引擎 (namespace + Cgroup) 来隔离且限制地使用了HOST OS的内核,但是OS本身还有用户空间,这部分userSpace1 2 3 的容器是没有使用的,他们各自用的自家的image里封装好的自带了os一部分的用户空间。

好了反复拉扯应该靠谱了

image-20240401092736721

容器运行起来就是一个小OS,自己image里的用户空间 + 底层宿主的OS里的内核空间 构成了一个完整的OS,那么是有自己的IP地址的。查看方法docker inspect # 其实还可以inspect 镜像 网络 存储 等所有资源的详细信息,好比一个万能命令。

image-20240401093327812

inspect里是有容器的IP的,ip a是看不到的哦👇

image-20240401093704711

再run一个nginx,ip就是0.3,按需发放的。

image-20240401094620664·

image-20240401094815991

image-20240401094854277

再把容器启动起来,大小就恢复了

image-20240401095819841

image-20240401095909492

image-20240401100057933

image-20240401095255449

图中N是image的nginx的n简称,N1 N2就是两个容器,各自启动就会各自从image复制一份镜像过来。停止N1后从镜像复制过来的那部分就删了,但是N1的数据还在。

image-20240401100705465

不要用swap,算作内存优化吧

以前的docker info 就是老版本会有一个提示就是swap的限制limit

image-20240401102253666

解决方法就是,关闭swap,内存不够加内存,别TMD用磁盘作内存,到时候速度跟不上麻烦的很!

docker 和 k8s都 要关掉swap!

swapoff -a # 临时禁swap

在/etc/fstab里删掉挂载swap的那行,保存后,并swapoff -a一下。

image-20240401102833846

还可以停止swap的服务

image-20240401103312439

mask就是停掉了,怎么不是stop和 disable呢。

mask掉,start都起不来的,

image-20240401111217027

image-20240401111429604

docker0也是网桥

image-20240401112334393

确实下是否是网桥,安装查看工具

image-20240401112408213

image-20240401112422064

如果开一个容器,容器也会生成专门的网卡,容器的网卡就会和这个网桥docker0关联在一起

image-20240401112741387

而且这些容器专门的网卡ip a都能看到,只是IP还需要docker inpsect去查看

image-20240401112854011

这点和kvm一样👆:关联网卡,以及ip地址,docker是172.17 kvm那里是192.168.122;都可以改。后面专门单篇讲网络。

同样和kvm一样的,iptables 规则也会自动生成

image-20240401113108357

Copyright 🌹 © oneyearice@126.com 2022 all right reserved,powered by Gitbook文档更新时间: 2024-07-28 14:47:24

results matching ""

    No results matching ""