docker 启动容器

  • docker 生成本地image

    docker commit -a ephuizi -m "myapp 4.1.5 version" 993448234d20 myrep/myapp:4.1.5

  • 创建网桥,划分子网

    docker network create –subnet=172.18.0.0/16 mynetwork

  • 启动容器

    指定网络,特权,共享主机device,退出时删除
    docker run –name hui3 –network=mynetwork –ip 172.18.0.12 –cap-add SYS_ADMIN –device /dev/fuse –security-opt apparmor=unconfined -it –rm myrep/myapp:4.1.5 /bin/bash

  • 连接容器

    docker -exec -it 862f428a014c /bin/bash

常见LInux Capabilities

Capabilities is a concept provided by a security system that allows root privileges to be “divided up” into different values. These values can be assigned independently to processes so that to perform a privileged operation, this process may only contain the privilege necessary, without the need to assume the identity of superuser.

  • CAP_CHOWN:修改文件属主的权限
  • CAP_DAC_OVERRIDE:忽略文件的DAC访问限制
  • CAP_DAC_READ_SEARCH:忽略文件读及目录搜索的DAC访问限制
  • CAP_FOWNER:忽略文件属主ID必须和进程用户ID相匹配的限制
  • CAP_FSETID:允许设置文件的setuid位
  • CAP_KILL:允许对不属于自己的进程发送信号
  • CAP_SETGID:允许改变进程的组ID
  • CAP_SETUID:允许改变进程的用户ID
  • CAP_SETPCAP:允许向其他进程转移能力以及删除其他进程的能力
  • CAP_LINUX_IMMUTABLE:允许修改文件的IMMUTABLE和APPEND属性标志
  • CAP_NET_BIND_SERVICE:允许绑定到小于1024的端口
  • CAP_NET_BROADCAST:允许网络广播和多播访问
  • CAP_NET_ADMIN:允许执行网络管理任务
  • CAP_NET_RAW:允许使用原始套接字
  • CAP_IPC_LOCK:允许锁定共享内存片段
  • CAP_IPC_OWNER:忽略IPC所有权检查
  • CAP_SYS_MODULE:允许插入和删除内核模块
  • CAP_SYS_RAWIO:允许直接访问/devport,/dev/mem,/dev/kmem及原始块设备
  • CAP_SYS_CHROOT:允许使用chroot()系统调用
  • CAP_SYS_PTRACE:允许跟踪任何进程
  • CAP_SYS_PACCT:允许执行进程的BSD式审计
  • CAP_SYS_ADMIN:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等
  • CAP_SYS_BOOT:允许重新启动系统
  • CAP_SYS_NICE:允许提升优先级及设置其他进程的优先级
  • CAP_SYS_RESOURCE:忽略资源限制
  • CAP_SYS_TIME:允许改变系统时钟
  • CAP_SYS_TTY_CONFIG:允许配置TTY设备
  • CAP_MKNOD:允许使用mknod()系统调用
  • CAP_LEASE:允许修改文件锁的FL_LEASE标志

[linux capabilities](https://www.jianshu.com/p/069bb123bb50 "linux capabilities")

svg to png or pdf

将svg转化成png或者pdf.不过性能不好.如果svg有几十M,会很慢.

# ! encoding:UTF-8
import cairosvg
import os


def svg_to_png(from_dir, target_dir):
    """
    very slow
    :param from_dir:
    :param target_dir:
    :return:
    """
    return _export(from_dir, target_dir, "png")


def _export(from_dir, target_dir, export_type):
    files = os.listdir(from_dir)
    for fileName in files:
        path = os.path.join(from_dir, fileName)
        if os.path.isfile(path) and fileName[-3:] == "svg":
            file_handle = open(path)
            svg = file_handle.read()
            file_handle.close()
            export_path = os.path.join(target_dir, fileName[:-3] + export_type)
            export_file_handle = open(export_path, 'w')

            if export_type == "png":
                cairosvg.svg2png(bytestring=svg, write_to=export_path)
            elif export_type == "pdf":
                cairosvg.svg2pdf(bytestring=svg, write_to=export_path)

            export_file_handle.close()