• docker理论


    主机级虚拟化:

    1,基于物理硬件直接虚拟化 hypervisor

    2,基于操作系统的虚拟化软件 vmware kvm vmworkstation

    内核的作用:资源的分配和管理

    Jail  vserver(chroot)

    6种名称空间

    Ipc进程间通信  信号量 消息队列 共享内容

    uts主机名和域名 namespace隔离

    mount文件数 挂载点

    进程树pid : init:没有父进程的进程 进程编号

    User用户和用户组:隔离 kernel 3.18+加入

    Net网络设备 网络栈 端口  隔离

    Namespace: clone(),setns() 实现

    容器级虚拟化:

    Control groups: cgroups控制组 blkio cpu cpuset devices freezer memory perf-event net_cls

    Namespace

    chroot

    LXC:LinuX Container

    lxc-create  template

    镜像文件: 容器要用到的所有组件编排好打包成一个文件,这个文件就是镜像文件

    共享文件 分层挂载  

    centos镜像 容器不可修改à nginx 镜像 容器不可修改 à 容器的可修改存储

    dockers管理容器标准: libcontainer  à runc

    OCI: open container initiative 开放容器标准

    1, 运行时标准

    2, 镜像格式标准

    OCF: open container Format 开放容器格式  runC

    Dockers官方镜像源

    https://hub.docker.com/

    docker架构

    client -- -----------sock文件----> docker_host -------------àregistry

    docker build                 docker daemon

    docker pull                containers -<--images   

    docker run  

    docker-ee 企业版 跟随moby

    docker-ce  社区版

    registry的组成:repository 单个运用的仓库 仓库名:运用名+标签组成

                 登录registry的账号验证

                 镜像表单

    镜像:静态 类似于程序文件

    容器: 动态,有生命周期 类似于进程

    Docker对象:

    Images

    Containers

    Networks

    Volumes

    plugins

    docker的网络类型

    docker network ls

    birdge: 就如同桥接的switch/hub, 使用bridge网络的container会分配一个当前bridge配置的子网IP, 在通过run创建container时通过 --ip 指定

    host: 需要使用 --network=host 参数指定. 使用主机网络, 此时 container 的网络会附属在主机上, 两者是互通的. 例如在container中的服务监听8080端口, 则主机的8080端口就会自动映射到这个端口

    none: 需要使用 --network=none 参数指定不分配局域网的IP

    需要环境

    64 bit cpu

    Kernerl 3.10+

    Kernelnamespacecgrpups

    Docker client 就是docker命令

    镜像:  含有启动容器所需要的文件系统及其内容,

    分层构建: 最底层 bootfs 引导的文件系统 bootloader + kernel 容器启动完成以后会被卸载以节约资源(从内存中移除)

              其次 rootfs 位于bootfs之上,表现为容器的根文件系统 rootfs由内核挂载为只读模式,而后通过”联合挂载”技术挂载一个额外的”可写层”

      

    联合挂载技术:

    Aufs 高级多层统一文件系统  advanced multi-layed unification filesystem

    Overlay 整合到3.18linux内核 叠加文件系统 目前用在 centos7

    Btrfs devicemappercentos7) 和vfs均支持联合挂载技术

    registry  repository + index

    repositoy: 顶层仓库 + 用户仓库 用户名/仓库名

    index:维护账户 镜像校验和公共命名空间 等于是用户认证的检索接口

    sponsor registry

    mirror registry

    vendor registry

    private registry

    docker registry:镜像由开发人员制作 而后推送到公共或私有registry上保存

    云原生:传环境变量来配置容器,用来运行在云环境上

    base image:docker提供,可下载docker的官方基础镜像

    dockerfile --> github 项目 ---> docker hub自动创建镜像并保存在你用户名的仓库下

    有名的镜像仓库:

    知名镜像仓 quay.io

    官方镜像仓库 docker.io  

    阿里云镜像仓 registry.cn-shenzhen.aliyuncs.com

    docker pull registry:port/用户名/镜像名:tag

    commit镜像制作

    docker commit -a “lwb” -c “CMD [‘/bin/httpd’,’-f’,’-h’,’data/html’]” -p b1 maggedu/httpd:v0.2

                  作者   修改启动参数                   先暂停 基于bi容器 制作后镜像名

    1.

    docker镜像仓库

    docker login

    docker push docker.io/leiwenbin627/仓库名:版本

    2.

    阿里镜像仓库

    docker login --username=859826896@qq.com registry.cn-shenzhen.aliyuncs.com

    docker tag [ImageId] registry.cn-shenzhen.aliyuncs.com/leiwenbin627/[镜像版本号]

    docker push registry.cn-shenzhen.aliyuncs.com/leiwenbin627/[镜像版本号]     

    ovs:OpenVSwitch 开源虚拟网关

    SDNsoftware define network 软件定义网络 软件驱动网络

    桥接:物理网卡当交换机使用

    overlay network(k8s)

    docker 网络: 

    bridge: nat桥接网络 通过软交换docker0---> 容器 veth虚拟网卡  关联关系用brctl showip link show看网卡连接对      yum install bridge-utils  

    docker0类似于仅主机桥 容器默认这种网络  用docker network inspect bridge查看

    iptables -t nat -vnL  docker0地址伪装 masquerade

    docker inspect 容器名 查看详细信息

    容器间共享网络空间:容器使用物理机的网络名称空间 两个容器共用一个网络名称空间 主机名称空间和IPC进程间通信空间,  用户空间 mount挂载文件空间 pid进程树空间独立 即联盟式容器

    none:容器自己的lo网卡127.0.0.1  non e意味着不给容器适配网络 容器用于后台处理任务,挂载存储卷,处理存储卷里面的数据,不与外界通信,就用none网络

    open container:直接使用物理机的网络名称空间,直接使用物理网口 即host网络

    查询网络名称空间:ip help

                      ip netns help

    添加网络名称空间:ip netns add r1

                      ip netns add r2

                      ip netns add r3

    查询网络名称空间:ip netns list

    在网络名称空间中执行命令:ip netns exec r1 ifconfig -a

    给网络名称空间创建网卡对

    ip link help

    ip link add name veth1.1 type veth peer name veth1.2

                   网卡一     类型       网卡2

    把网卡移到网络名称空间中

    ip link set dev veth1.2 netns r1

                网卡    网络名称空间      

    一个设备只能属于一个网络名称空间

    ip netns exec r1 ifconfig -a 在网络名称空间r1中执行命令 ifconfig -a

    改名

    ip netns exec r1 ip link set dev veth1.2 name eth0 

    ip netns exec r1 ifconfig -a

    测试

    ifconfig veth1.1 10.1.0.1/24 up 激活

    ip netns exec r1 ifconfig eth0 10.1.0.2/24 up

    ip netns exec r1 ifconfig

    docker help

    docker run --name t2 --network bridge -it busybox:latest  busybox默认执行命令 /bin/bash

                       指定网络

    docker run --name t3 --network none -it busybox:latest

    主机名是容器ID

    docker run --name t5 --network bridge --rm --dns 114.114.114.114  -it busybox:latest

                                        指定dns

    docker run --name t5 --network bridge --rm --dns 114.114.114.114  -it  --add-host www.baidu.com:192.168.81.25  busybox:latest

                                                                        注入/etc/hosts文件

    docker kill t5 容器t5停止运行

    docker start t5 容器t5开始运行

    docker run --name web --rm -p 192.168.81.30::80 nginx

                               绑定宿主机IP映射

    docker port web

    docker run --name web --rm -p 192.168.81.30:90:80 nginx

                              绑定宿主机IP和固定映射端口

    联盟式容器:共享同一个网络空间

    docker run --name b1 -it --rm busybox

    docker run --name b2 --network container:b1 -it --rm busybox  ifconfig查看

                       共享容器b1的网络名称空间 即共用容器b1的网络

    docker run --name b2 --network host  -it --rm busybox ifconfig查看

    docker run --name b1 --network host  -it --rm busybox

                             共享宿主机的网络名称空间 即共用物理机的网络

    / # echo "ffffffffffffff" > /tmp/index.html

    / # httpd -f -h /tmp  

    修改docker0网段

    vim /etc/docker/daemon.json

    {

      "registry-mirrors": ["https://lvb4p7mn.mirror.aliyuncs.com"],

       "bip": "10.0.0.1/16"  指定dockerIP和网段

    }

    docker守护进程的c/s,其默认监听unix socket格式的地址,/var/run/docker.sock,即客户端通过 sock控制docker-daemon

    {

      "registry-mirrors": ["https://lvb4p7mn.mirror.aliyuncs.com"],

       "bip": "10.0.0.1/16",

       "hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]  允许外部通过本机2375端口在通过本机的 sock套接字连本机的docker-daemon

    }

    去另一台测试

    docker -H 192.168.81.30:2375 ps -a (命令去除docker开头)

          指定控制的主机  端口 运行的命令

    docker网桥的创建 也即docker网络的创建

    docker network create --help

    docker network create -d bridge --subnet "172.26.0.0/16" --gateway "172.26.0.1" mybr0

                      docker网络类型 子网          网桥的默认网关  网桥名/网络名

    docker network ls 查看

    docker run --name t6 -it --network mybr0 busybox

                         使用mybr0网络

    存储:

    有状态运用:当前这次连接的处理一定与此前的处理有关联关系 例如mysql redis tomcat

    无状态运用:前后处理没有关联关系 例如nginx反向代理

    任何有状态的运用都要持久存储数据

    如果存储在容器内:删除容器,数据全部丢失,存储在联合文件系统中,不易于宿主机访问,容器间数据不共享。

    存储卷:是容器上一个或多个目录,此类目录可绕过联合文件系统与宿主机上的某目录绑定

    有两种存储卷:

    1,绑定挂载卷 容器目录和宿主机目录都指明

    docker run -it --name b5  --rm -v /opt:/data  busybox

                              宿主机路径:容器路径

    2,docker管理的卷 用于存储临时文件 容器内指定目录路径,docker在宿主机找一个或创建一个目录挂载

    docker run -it --name b3 -v /data busybox

    查看json格式数据

    docker inspect b5

    docker inspect -f {{.Mounts}} b5 查看Mounts -f 过滤

    docker inspect -f {{.NetworkSettings.Networks.bridge}} b5

    NMT: nginx + mariadb + tomcat

    docker run --name infracon -it -v /data/infracon/volume:/data/web/html busybox  作为基础支撑容器

    docker run --name nginx --network container:infracon --volumes-from infracon -it busybox

                                  使用infracon容器的网络  复制infracon容器的存储

    自制镜像:

    dockerfile:构建镜像的源码

    .dockerignore 忽略的文件写里面

    mkdir img1 & cd img1

    vim Dockerfile

    # base image

    FROM busybox:latest

    MAINTAINER "lwb"

    COPY index.html  /data/web/html/

    COPY yum.repos.d /etc/yum.repos.d/

     #下载并保存到指定目录 向目标路径打包文件

    ADD http://nginx.org/download/nginx-1.16.1.tar.gz /usr/local/src/

    docker build -t tinyhttpd:v0.1-3 .

    验证

    docker run --name tinyweb1 --rm tinyhttpd:v0.1-3  ls /usr/local/src/

    例子二:

    wget  http://nginx.org/download/nginx-1.16.1.tar.gz

    # base image

    FROM busybox:latest

    MAINTAINER "lwb"

    COPY index.html  /data/web/html

    COPY yum.repos.d /etc/yum.repos.d

    #下载并保存到指定目录  ADD http://nginx.org/download/nginx-1.16.1.tar.gz /usr/local/src/

    WORKDIR /usr/local/src/   #指定工作目录

    ADD nginx-1.16.1.tar.gz ./  #放在当前工作目录下

    #容器建立存储卷 /data/mysql/与宿主机建立关联关系

    VOLUME /data/mysql/

    docker build -t tinyhttpd:v0.1-4 .

                 镜像名:tag  .表示当前目录

    验证

    docker run --name tinyweb1 --rm tinyhttpd:v0.1-4  ls  /usr/local/src/

    例子三

    # base image

    FROM busybox:latest

    MAINTAINER "lwb"

    #传入环境变量

    ENV DOC_ROOT=/data/web/html/

        WEB_SERVER_PACKAGE="nginx-1.16.1.tar.gz"

    #DOC_ROOT环境变量前面没有定义就用-后面的

    COPY index.html  ${DOC_ROOT:-/data/web/html/}

    COPY yum.repos.d /etc/yum.repos.d

    #下载到指定目录  

    ADD http://nginx.org/download/${WEB_SERVER_PACKAGE} /usr/local/src/

    #工作目录

    WORKDIR /usr/local/src/

    #ADD ${WEB_SERVER_PACKAGE} ./

    #容器建立存储卷 /data/mysql/与宿主机建立关联关系

    VOLUME /data/mysql/

    #待暴露端口

    EXPOSE 80/tcp

    #RUN 定义docker build 定义制作镜像的容器运行的命令

    RUN cd /usr/local/src &&

        tar -xf ${WEB_SERVER_PACKAGE} &&

    docker run --name tinyweb1 --rm -e WEB_SERVER_PACKAGE="nginx-1.16.0" tinyhttpd:v0.1-5  printenv

                                 -e 启动容器传入或修改环境变量      printenv打印容器环境变量      

    init进程:内核启动的进程 进程号为1

      nohup command & 剥离于shell父进程,是init子进程

    exec command 开启shell子进程,并替换当前进程成为主进程,而且在容器中进程号为1

    僵尸进程:子进程比父进程先结束,而父进程又没有收回子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程,如果父进程先退出,子进程被init接管,子进程退出后会回收其占用的相关资源

    孤儿进程:父进程退出,子进程还在运行,那么子进程就会变成孤儿进程,孤儿进程将会被init进程收养,并由init进程对他们完成状态收集工作

    CMD命令定义:

    CMD <command> 进程号不为1  RUN

    CMD [“<executable>”,”<param1>”,”<param2>”] 进程号为1,即类似init进程 可与docker sock通信 同RUN

    CMD [“<param1>”,”<param2>” ] 用于为ENTRYPOINT提供默认参数

    cmd例一

    mkdir img2 & cd img2

    FROM busybox

    LABEL maintainer="<34697826@qq.com>" app="httpd"

    ENV WEB_DOC_ROOT="/data/web/html/"

    RUN mkdir -p  $WEB_DOC_ROOT &&

        echo "<h1>Busybox httpds server</h1>" > ${WEB_DOC_ROOT}/index.html

    #定义容器启动时运行的命令

    CMD /bin/httpd -f -h ${WEB_DOC_ROOT}

    docker build -t tinyhttpd:v0.2-1 ./

    docker run --name tinyweb2 -it --rm tinyhttpd:v0.2-1

    cmd例二

    FROM busybox

    LABEL maintainer="<34697826@qq.com>" app="httpd"

    ENV WEB_DOC_ROOT="/data/web/html/"

    RUN mkdir -p  $WEB_DOC_ROOT &&

        echo "<h1>Busybox httpds server</h1>" > ${WEB_DOC_ROOT}/index.html

    #不以shell子进程来解析 “/bin/sh”,”-c” 手动开启shell子进程

    CMD [“/bin/sh”,”-c”,"/bin/httpd","-f","-h /data/web/html/"]

    docker build -t tinyhttpd:v0.2-2 ./

    docker run --name tinyweb2 -it --rm tinyhttpd:v0.2-2

    ENTRYPOINT例子三

    docker run运行容器时在指定命令和参数,改变容器启动默认运行的命令

    FROM busybox

    LABEL maintainer="<34697826@qq.com>" app="httpd"

    ENV WEB_DOC_ROOT="/data/web/html/"

    RUN mkdir -p  $WEB_DOC_ROOT &&

        echo "<h1>Busybox httpds server</h1>" > ${WEB_DOC_ROOT}/index.html

    #定义容器启动时运行的命令不会被docker run后面接的参数而改变,而是当成参数传给容器默认启动执行命令

    ENTRYPOINT  /bin/httpd -f -h ${WEB_DOC_ROOT}

    docker build -t tinyhttpd:v0.2-5 ./

    docker run --name tinyweb2 -it --rm tinyhttpd:v0.2-5 ls /data/web/html

                                              定义了默认执行ENTRYPOINT类命令,当成参数传给ENTRYPOINT命令

    如果要覆盖,就要用docker run  --entrypoint 来覆盖Dockerfile定义的ENTRYPOINT

    ENTRYPOINTCMD组合 例子四

    FROM busybox

    LABEL maintainer="<34697826@qq.com>" app="httpd"

    ENV WEB_DOC_ROOT="/data/web/html/"

    RUN mkdir -p  $WEB_DOC_ROOT &&

        echo "<h1>Busybox httpds server</h1>" > ${WEB_DOC_ROOT}/index.html

    #CMD的命令当成参数传给ENTRYPOINT

    CMD ["/bin/httpd","-f","-h ${WEB_DOC_ROOT}"]

    ENTRYPOINT ["/bin/sh","-c"]

    docker build -t tinyhttpd:v0.2-7 ./

    docker image inspect tinyhttpd:v0.2-7  查看默认启动命令

    docker run --name tinyweb3 -it --rm tinyhttpd:v0.2-7

    docker run --name tinyweb5 -it --rm tinyhttpd:v0.2-7 ls /

                                           覆盖Dockerfile定义的CMD传给ENTRYPOINT  

    容器接受配置通过环境变量是最好的方式

    nginx更灵活配置

    mkdir img3 && cd img3

    vim Dockerfile

    FROM nginx:1.14-alpine

    LABEL maintainer="346978526@qq.com"

    ENV NGX_DOC_ROOT='/data/web/html/'

    ADD index.html ${NGX_DOC_ROOT}

    ADD entrypoint.sh /bin/

    CMD [“/usr/sbin/nginx”,”-g”,”daemon off;”]

    ENTRYPOINT [“/bin/entrypoint.sh”]

    vim entrypoint.sh

    #!/bin/sh

    cat > /etc/nginx/conf.d/www.conf <<EOF

    server  {

        server_name $HOSTNAME;

        listen ${IP:-0.0.0.0}:${PORT:-80};

        root ${NGX_DOC_ROOT:-/usr/share/nginx/html};

    }

    EOF

    # $@为脚本的所有参数,即DockerfileCMD传过来的所有参数 exec /usr/sbin/nginx -g daemon off;

    exec "$@"

    chmod +x entrypoint.sh

    docker build -t myweb:v0.3-1 ./

    docker run --name myweb1 --rm -P -it  myweb:v0.3-1

    docker exec -it  myweb1  /bin/sh

    docker run --name myweb1 --rm -P -it -e "PORT=8080" myweb:v0.3-1

                                  -e 还能在docker run定义环境变量传进去

    docker exec -it myweb1 /bin/sh 验证

    helthcheck健康探测

    FROM nginx:1.14-alpine

    LABEL maintainer="346978526@qq.com"

    ENV NGX_DOC_ROOT='/data/web/html/'

    ADD index.html ${NGX_DOC_ROOT}

    ADD entrypoint.sh /bin/

    EXPOSE 80/tcp

    HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/

                    容器启动后3秒开始   wget -q静默模式     

    CMD ["/usr/sbin/nginx","-g","daemon off;"]

    ENTRYPOINT ["/bin/entrypoint.sh"]

                                        

    ARG的使用 用于docker build时传参数和替换参数

    FROM nginx:1.14-alpine

    ARG author="lwb 346978526@qq.com"

    LABEL maintainer="${author}"

    ENV NGX_DOC_ROOT='/data/web/html/'

    ADD index.html ${NGX_DOC_ROOT}

    ADD entrypoint.sh /bin/

    EXPOSE 80/tcp

    HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}

    CMD ["/usr/sbin/nginx","-g","daemon off;"]

    ENTRYPOINT ["/bin/entrypoint.sh"]

    docker build -t myweb:v0.3-10 ./

    docker image inspect myweb:v0.3-10 验证

    docker build --build-arg author="pony pony@qq.com" -t  myweb:v0.3-11 ./

    docker image inspect myweb:v0.3-11 验证

    ONBUIld  触发器。当做成的镜像被别的Dockerfile用来做基础镜像时触发  一般是接RUN指令

    FROM nginx:1.14-alpine

    ARG author="lwb 346978526@qq.com"

    LABEL maintainer="${author}"

    ENV NGX_DOC_ROOT='/data/web/html/'

    ADD index.html ${NGX_DOC_ROOT}

    ADD entrypoint.sh /bin/

    EXPOSE 80/tcp

    ONBUILD ADD http://mirrors.163.com/elastic/6.x/apt/dists/stable/Release /etc/yum.repos.d/

    CMD ["/usr/sbin/nginx","-g","daemon off;"]

    ENTRYPOINT ["/bin/entrypoint.sh"]

    docker build --build-arg author="pony pony@qq.com" -t  myweb:v0.3-12 ./

    mkdir img4 && cd img4

    vim Dockerfile

    FROM myweb:v0.3-12

    RUN mkdir /tmp/test

    docker run --name test1 --rm test:v0.1-1 ls /etc/yum.repos.d/  验证

    私有仓创建

    docker-distribution项目

    rpm -ql docker-distribution

    registry仓库

    yum install docker-registry -y 安装的包是docker-distribution

    镜像保存目录:/var/lib/registry

    配置文件:/etc/docker-distribution/registry/config.yml

    systemctl start docker-distribution

    vim /etc/docker/daemon.json

    {

      "registry-mirrors": ["https://lvb4p7mn.mirror.aliyuncs.com"],

      "insecure-registries": ["node1:5000"]  #接受不安全服务器

    }

    systemctl restart docker

    docker tag myweb:v0.3-11 node1:5000/myweb:v0.3-11

    docker push node1:5000/myweb:v0.3-11

    下载节点要这样设置

    vim /etc/docker/daemon.json

    {

      "registry-mirrors": ["https://lvb4p7mn.mirror.aliyuncs.com"],

      "insecure-registries": ["node1:5000"]  #接受不安全服务器

    }

    systemctl restart docker

    测试下载

    docker pull node1:5000/myweb:v0.3-11

    镜像层在/var/lib/registry/docker/registry/v2/repositories/myweb/_layers/sha256

    vmware harbor企业镜像仓

    1,多租户

    2,安全及风险扫描

    3,日志审计

    4,标识集成和基于角色访问控制策略

    5,主备仓镜像同步

    6,扩展的API和图形用户界面

    7,支持中文

    安装手册 https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

    https://github.com/goharbor/harbor

    https://github.com/goharbor/harbor/releases/tag/v1.5.2

    下载https://storage.googleapis.com/harbor-releases/harbor-offline-installer-v1.5.2.tgz

    tar xf harbor-offline-installer-v1.5.2.tgz -C /usr/local/

    /usr/local/harbor

    vim harbor.cfg

    hostname = node1.com

    max_job_workers = 3

    harbor_admin_password = 123456

    db_password = 123456

    yum install docker-compose -y

    ./install.sh  工作端口 80 443 4443

    测试

    http://192.168.81.20

    admin/123456

    使用

    用户管理 -->创建用户 lwb/She5216600

    仓库管理 -->新建目标 目标名:myproject 目标url;http://node1/myproject 用户名:lwb 密码:同上 不验证远程证书

    复制规则 -->

    用普通用户登陆 --> 项目 -->新建项目 devel 公开 -->点击推送镜像

    docker tag SOURCE_IMAGE[:TAG] node1/devel/IMAGE[:TAG]  / docker push node1/devel/IMAGE[:TAG]

    测试: node2 上测试

    vim /etc/docker/daemon.json

    {

      "registry-mirrors": ["https://lvb4p7mn.mirror.aliyuncs.com"],

      "insecure-registries": ["node1.com"]

    }

    systemctl restart docker

    docker login node1.com

    docker tag myweb:v0.3-10 node1.com/devel/myweb:v0.3-10

    docker tag myweb:v0.3-11 node1.com/devel/myweb:v0.3-11

    docker tag myweb:v0.3-12 node1.com/devel/myweb:v0.3-12

    docker push node1.com/devel/myweb myweb仓库的所有镜像都推上去

                       项目名  仓库名           

    停止harbor服务

    cd /usr/local/harbor

    docker-compose pause 暂停

    docker-compose unpause 取消暂停

    docker-compose 单机编排工具

    yum info docker-compose

    资源限制

    OOM_ADJ: out of memory的权重 权重越高评分就越高

    OOM_SCORE: out of memory 评分

    memory-swap   memory

    正数s          正数m    常用可用总空间为s,其中ramm, swap(s-m),s=m,则无可用 swap资源

    0              正数m   相当于未设置swapunset

    unset           正数m    若主机(docker host)启用了 swap,则容器的可用swap2*m

    -1              正数m     若主机(docker host)启用了swap,则容器可使用最大至主机上的所有swap空间的swap资源

    -m --memory 最大使用内存

    --memory-swappiness 使用swap倾向性 值0-100  0表示能不用 swap就尽量不用,100表示到了能用 swap就用swap

    --oom-kill-disable=true 不会被oom kill

    --memeory-reservation 能预留的内存空间

    --cpu-period 每次使用cpu的时间

    CFS scheduler:同时运行的进程小于等于CPU核心数,所以其他进程需要CFS scheduler来调度运行

    --cpu-shares=<values> 按比例切分可用CPU

    --cpus=<values> 定义最多使用几核CPU

    --cpuset-cpus 限制在哪个CPU核心上运行

    lscpu 查看cpu信息

    docker run --help

    压测镜像  docker pull lorel/docker-stress-ng

    验证memory

    docker run --name stress -it --rm -m 256m  lorel/docker-stress-ng stress --help

    docker run --name stress -it --rm -m 256m  lorel/docker-stress-ng stress --vm 2

                              限制memory 256m                  ---vm 开启两个进程(每个进程用256m内存)

    docker top stress 查看 stress容器资源占用

    docker stats  查看容器资源变动

    验证 CPU

    docker run --name stress -it --rm --cpus=2 lorel/docker-stress-ng stress --cpu 8

                            限制使用2CPU             开启8个测试cpu进程

    docker stats 查看

    docker run --name stress -it --rm  --cpuset-cpus 0,2 lorel/docker-stress-ng stress --cpu 8

                                 选定在哪颗cpu

    docker run --name stress2 -it --rm  --cpu-shares 512  lorel/docker-stress-ng stress --cpu 8

                                按比例分cpu 512是最小单位

  • 相关阅读:
    Windows开启telnet服务 + 连接失败处理
    注册表比较工具
    wmic命令
    python netifaces模块
    【转】wireshark基本用法及过虑规则
    设置Intel网卡以抓取报文的vlan tag
    【转】 中兴OLT-C300常用命令
    Iris分类以及数组reshape想到的
    关于plot画图的原理
    Python的rand vs randn以及linspace
  • 原文地址:https://www.cnblogs.com/leiwenbin627/p/11445395.html
Copyright © 2020-2023  润新知