与宿主机和其它容器共享文件
在 Docker 我们常常需要将配置文件或者各类数据映射进入到 docker 容器之中,便于容器内部程序使用或者数据的持久化。
宿主机共享
共享目录:
ctr -n k8s.io c create docker.io/library/busybox:latest busybox-2 --mount type=bind,src=/tmp,dst=/host,options=rbind:rw
ctr -n k8s.io t start -d busybox-2 sh
ctr -n k8s.io t exec -t --exec-id $RANDOM busybox-2 sh
# echo "Hello" > /host/name
查看共享的结果:
其它容器间共享
基于 containerd 的方式实现 pid ns 共享:
将容器中运行的进程共享注入到 3257 pid 之中
ctr -n k8s.io image pull docker.io/library/python:3.6-slim
ctr -n k8s.io c create --with-ns "pid:/proc/3257/ns/pid" docker.io/library/python:3.6-slim python
启动了一个 python 的命令
至此可以在 busybox-2 容器中看见刚执行的 python 命令
输出结果:
/ # ps -ef
PID USER TIME COMMAND
1 root 0:00 sh
18 root 0:00 python3
24 root 0:00 sh
31 root 0:00 ps -ef
docker 的 ns 共享
[root@docker scripts]# docker run --rm -it -d busybox sh
687c80243ee15e0a2171027260e249400feeeee2607f88d1f029cc270402cdd1
[root@docker scripts]# docker run --rm -it -d --pid="container:687c80243ee15e0a2171027260e249400feeeee2607f88d1f029cc270402cdd1" busybox cat
fa2c09bd9c042128ebb2256685ce20e265f4c06da6d9406bc357d149af7b83d2
[root@docker scripts]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fa2c09bd9c04 busybox "cat" 2 seconds ago Up 1 second pedantic_goodall
687c80243ee1 busybox "sh" 22 seconds ago Up 21 seconds hopeful_franklin
[root@docker scripts]# docker exec -it 687c80243ee1 sh
/ # ps aux
PID USER TIME COMMAND
1 root 0:00 sh
8 root 0:00 cat
15 root 0:00 sh