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 映射共享内存文件

    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

上一篇 下一篇

猜你喜欢

热点阅读