docker间共享内存
2024-05-20 本文已影响0人
DifferentMan
1.概论
默认情况下,docker间使用共享内存是无法跨docker查看的,因为docker使用了Namespace和Cgroups进行资源隔离。
查看命令如下:
ipcs 命令可以列出系统中的共享内存段、信号量和消息队列。使用 -m 选项可以只显示共享内存段的信息。
Resource options:
-m, --shmems shared memory segments 共享内存
-q, --queues message queues 消息队列
-s, --semaphores semaphores 信号量
-a, --all all (default)
ipcs -m
结果如下
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0xfefe0001 17 root 660 2104 2
0x06fe0001 18 root 660 2104 2
0x00fe0001 19 root 660 2104 2
查看 /proc/sysvipc/shm 文件,它包含了系统中所有共享内存段的详细信息。
cat /proc/sysvipc/shm
结果如下
key shmid perms size cpid lpid nattch uid gid cuid cgid atime dtime ctime rss swap
-16908287 17 660 2104 437901 438530 2 0 0 0 0 1716254796 1716254796 1716254794 4096 0
117309441 18 660 2104 437901 438423 2 0 0 0 0 1716254795 0 1716254795 4096 0
16646145 19 660 2104 437901 438515 2 0 0 0 0 1716254795 0 1716254795 4096 0
2.实现方案
2.1 映射共享内存文件
- /dev/shm:/dev/shm:rw
volumes:
- shm_volume:/dev/shm:rw
...
volumes:
shm_volume:
driver: local
driver_opts:
type: tmpfs
device: tmpfs
version: "2.2"
services:
core-agwMmeOamProcess:
# ...
volumes:
- ./shm:/dev/shm # 将 shm 文件映射为共享内存文件
# ...
core-agwMmeIlf:
# ...
volumes:
- ./shm:/dev/shm # 将 shm 文件映射为共享内存文件
# ...
2.2 IPC (Inter-Process Communication) 命名空间
--ipc=host: 将容器的 IPC 命名空间与主机系统共享,允许容器访问主机上的 IPC 资源,如共享内存和信号量。
--ipc=private: 为容器创建一个新的私有 IPC 命名空间(默认值)。
--ipc=container:<name|id>: 将容器加入另一个容器的 IPC 命名空间。
user: root
logging:
options:
max-file: "4"
max-size: "100M"
compress: "true"
extra_hosts:
- "agwMmeS1Listener:127.0.0.1"
network_mode: host
ipc: host