pstree
pstree -p 1  
pstree 是一个 Linux/Unix 命令,用于显示进程之间的父子关系。-p 选项会显示每个进程的进程 ID(PID)。而 1 参数则指定了要显示的起始进程的 PID,这里是 init 进程的 PID。

因此,pstree -p 1 命令会显示 init 进程及其所有子孙进程的父子关系,以树形结构展示。每个进程都会显示其进程 ID 和父进程的进程 ID,方便查看进程之间的继承关系。

需要注意的是,init 进程是系统中所有进程的祖先进程,它的 PID 通常是 1。pstree -p 1 命令可以帮助我们查看整个系统中的进程层次结构,并了解进程之间的组织和关系。
docker 数据类型
查看指定pid 容器的信息
docker inspect as
  "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/e783e416b5df47c24aea91ea4372ace6a2c3bbfc94ba4783d9421fff42354e21-init/diff:/var/lib/docker/overlay2/nnooo2pre806vlq03f50mvw8y/diff:/var/lib/docker/overlay2/rnj2djgufta72oa9ni5ez3pwg/diff:/var/lib/docker/overlay2/jo2ag7rtj91qkido133hul817/diff:/var/lib/docker/overlay2/f4hzthzfuxulwzzj59jsm4vbv/diff:/var/lib/docker/overlay2/0ihwbu1oui6budb8e02hpl1zs/diff:/var/lib/docker/overlay2/qnk26pqe1l710m6t14uenyra9/diff:/var/lib/docker/overlay2/2c57547f862fdcd06aa0f4b926b08b6579258a03ca04eb18864d2c68741dcbbd/diff",
                "MergedDir": "/var/lib/docker/overlay2/e783e416b5df47c24aea91ea4372ace6a2c3bbfc94ba4783d9421fff42354e21/merged",
                "UpperDir": "/var/lib/docker/overlay2/e783e416b5df47c24aea91ea4372ace6a2c3bbfc94ba4783d9421fff42354e21/diff",
                "WorkDir": "/var/lib/docker/overlay2/e783e416b5df47c24aea91ea4372ace6a2c3bbfc94ba4783d9421fff42354e21/work"


这些字段是 Docker 的 OverlayFS 存储驱动在容器运行时使用的目录结构。下面是对每个字段的解释:

LowerDir:存储镜像层的目录路径。它包含了多个目录,每个目录对应一个镜像层。层按顺序从左到右堆叠,最左边的是基础镜像层,右边的是上层镜像层。在容器中,这些层被合并并以只读方式挂载。
MergedDir:合并后的镜像层目录路径。该目录是 LowerDir 中的所有镜像层合并后的结果。容器中的文件系统通过将这个目录以可写方式挂载来实现对文件的修改和更新。
UpperDir:容器的可写层目录路径。该目录包含了对镜像层的修改,包括添加、删除和修改文件等操作。它会覆盖 MergedDir 中相同路径的文件,实现对文件的修改。
WorkDir:工作目录路径。该目录用于 OverlayFS 内部的工作操作,例如在容器中创建或修改文件时的临时操作。
这些字段组成了 Docker 容器的文件系统层次结构,通过 OverlayFS 技术实现了镜像的分层管理和容器的可写层隔离。这样可以节省存储空间,并且多个容器可以共享相同的基础镜像层,提高效率。
数据卷data volume
数据卷实际上就是宿主机上的目录或者是文件,可以被直接 mount 到容器当中
使用。
实际生产环境中,需要针对不同类型的服务、不同类型的数据存储要求做相应的
规划,最终保证服务的可扩展性、稳定性以及数据的安全性

创建容器
docker run -d --name web1 -v /data/testapp/:/apps/tomcat/webapps/testapp -p 8080:8080 tomcat
docker run -d --name web2 -v /data/testapp/:/apps/tomcat/webapps/testapp -p 8082:8080 tomcat

我们在 /data/testapp 目录下创建内容,
mkdir /data/testapp –p
echo "testapp page" > /data/testapp/index.html
#创建容器的时候指定参数-v,可以删除/var/lib/docker/containers/的容器数据
目录,但是不会删除数据卷的内容

[root@light-test data[]# docker ps -a
CONTAINER ID   IMAGE                       COMMAND                   CREATED         STATUS         PORTS                                                  NAMES
8ea4a7939c1c   tomcat                      "catalina.sh run"         3 minutes ago   Up 3 minutes   0.0.0.0:8082->8080/tcp, :::8082->8080/tcp              web2
b7d9db2f962b   tomcat                      "catalina.sh run"         4 minutes ago   Up 4 minutes   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp              web1
9bd66b56259a   nginx:v1                    "/apps/nginx/sbin/ng…"   17 hours ago    Up 17 hours    443/tcp, 0.0.0.0:8888->80/tcp, :::8888->80/tcp         bold_varahamihira
bdf5d162155e   mysql                       "docker-entrypoint.s…"   6 weeks ago     Up 6 weeks     0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
2a296128cadc   jenkins/jenkins:lts-jdk11   "/usr/bin/tini -- /u…"   4 months ago    Up 4 months    50000/tcp, 0.0.0.0:8001->8080/tcp, :::8001->8080/tcp   jenkins
[root@light-test data[]# docker rm -f web1
web1
[root@light-test data[]# docker rm -fv web2
web2
[root@light-test data[]# docker ps -a
CONTAINER ID   IMAGE                       COMMAND                   CREATED        STATUS        PORTS                                                  NAMES
9bd66b56259a   nginx:v1                    "/apps/nginx/sbin/ng…"   17 hours ago   Up 17 hours   443/tcp, 0.0.0.0:8888->80/tcp, :::8888->80/tcp         bold_varahamihira
bdf5d162155e   mysql                       "docker-entrypoint.s…"   6 weeks ago    Up 6 weeks    0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
2a296128cadc   jenkins/jenkins:lts-jdk11   "/usr/bin/tini -- /u…"   4 months ago   Up 4 months   50000/tcp, 0.0.0.0:8001->8080/tcp, :::8001->8080/tcp   jenkins


验证结果
[root@light-test data[]# cat testapp/index.html
testapp page
123


数据卷特点
1、数据卷是宿主机的目录或者文件,并且可以在多个容器之间共同使用。
2、在宿主机对数据卷更改数据后会在所有容器里面会立即更新。
3、数据卷的数据可以持久保存,即使删除使用使用该容器卷的容器也不影响。
4、在容器里面的写入数据不会影响到镜像本身。


1、日志输出
2、静态 web 页面
3、应用配置文件
4、多容器间目录或文件共享
docker容器之间互联
即在同一个宿主机上的容器之间可以通过自定义的容器名称相互访问,比如一
个业务前端静态页面是使用 nginx,动态页面使用的是 tomcat,由于容器在启动
的时候其内部 IP 地址是 DHCP 随机分配的,所以如果通过内部访问的话,自定
义名称是相对比较固定的,因此比较适用于此场景

继续创建2个容器id
docker run -d --name web3 -v /data/testapp/:/apps/tomcat/webapps/testapp -p 8080:80 nginx:v1
docker run -d --name web4 -v /data/testapp/:/apps/tomcat/webapps/testapp -p 8082:80 nginx:v1


第一种是修改容器里面的/etc/hosts,但是缺点是不易维护
第二种
docker run -d --name 新容器名称 --link 目标容器名称:自定义的名称 -p
本地端口:容器端口 镜像名称 shell 命


[root@light-test data[]# docker run -d --name web3 --link web1:web1_link -p 8082:80 nginx:v1
dd24d64aa8836d33a982b39a734e419e8503053b972111d18ad02963e301e621
[root@light-test data[]# docker ^C
[root@light-test data[]# docker run -d --name web2 -p 8081:80 nginx:v1
[root@light-test data[]# docker run  -d --name web1 -p 8080:80 nginx:v1


演示效果
[root@light-test data[]# docker exec -it web3 bash
[root@dd24d64aa883 /]# cat /etc/host
host.conf    hostname     hosts        hosts.allow  hosts.deny
[root@dd24d64aa883 /]# cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
172.17.0.3	web1_link 3e9678eee190 web1
172.17.0.7	dd24d64aa883
[root@dd24d64aa883 /]# ping web1_link
PING web1_link (172.17.0.3) 56(84) bytes of data.
64 bytes from web1_link (172.17.0.3): icmp_seq=1 ttl=64 time=0.140 ms
64 bytes from web1_link (172.17.0.3): icmp_seq=2 ttl=64 time=0.097 ms


网络
[root@light-test data[]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
bf548f58947e   bridge    bridge    local
efacf764b5be   host      host      local
45a419ec5a2d   none      null      local


Bridge:#桥接,使用自定义 IP
Host:#不获取 IP 直接使用物理机 IP,并监听物理机 IP 监听端口
None:  一般创建好后没有配置网卡,路由,等,一般不会使用



docker 的默认模式即不指定任何模式就是 bridge 模式,也是使用比较多的模式,
此模式创建的容器会为每一个容器分配自己的网络 IP 等信息,并将容器连接到
一个虚拟网桥与外界通信。

docker network inspect bridge 


跨主机互联是说 A 宿主机的容器可以访问 B 主机上的容器,但是前提是保证各
宿主机之间的网络是可以相互通信的,然后各容器才可以通过宿主机访问到对方
的容器,实现原理是在宿主机做一个网络路由就可以实现 A 宿主机的容器访问 B
主机的容器的目的,复杂的网络或者大型的网络可以使用 google 开源的 k8s 进
行互联
设置docker启动时候的内网ip段
保证两台机器是内网
其中一台docker的启动网段进行设置 #cat /lib/systemd/system/docker.service |grep bip
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --bip=10.10.0.1/24



docker run -d --name web2 -p 8081:80 nginx:v1


 


docker registry 下载镜像
Docker Registry 作为 Docker 的核心组件之一负责镜像内容的存储与分发,客
户端的 docker pull 以及 push 命令都将直接与 registry 进行交互,最初版本的
registry 由 Python 实现,由于设计初期在安全性,性能以及 API 的设计上有着诸
多的缺陷,该版本在 0.9 之后停止了开发,由新的项目 distribution(新的 docker
register 被称为 Distribution)来重新设计并开发下一代 registry,新的项目由 go
语言开发,所有的 API,底层存储方式,系统架构都进行了全面的重新设计已解
决上一代 registry 中存在的问题,2016 年 4 月份 rgistry 2.0 正式发布,docker 1.6
版本开始支持 registry 2.0,而八月份随着 docker 1.8 发布,docker hub 正式启
用 2.1 版本 registry 全面替代之前版本 registry,新版 registry 对镜像存储格式
进行了重新设计并和旧版不兼容,docker 1.5和之前的版本无法读取2.0的镜像,
另外,Registry 2.4 版本之后支持了回收站机制,也就是可以删除镜像了,在 2.4
版本之前是无法支持删除镜像的,所以如果你要使用最好是大于 Registry 2.4 版
本的,目前最新版本为 2.7.x。
官方文档地址:https://docs.docker.com/registry/
官方 github 地址:https://github.com/docker/distribution

 

12-13 22:47