跳转至

与宿主机和其它容器共享文件

在 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

查看共享的结果:

[root@devmaster ~]# cat /tmp/name 
Hello

其它容器间共享

基于 containerd 的方式实现 pid ns 共享:

ctr -n k8s.io t ls

将容器中运行的进程共享注入到 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 的命令

ctr -n k8s.io t start -d python python

至此可以在 busybox-2 容器中看见刚执行的 python 命令

ctr -n k8s.io t exec -t --exec-id $RANDOM busybox-2 sh

输出结果:

/ # 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