190520Docker2

一、容器概念

  • Linux六大名称空间
UTS 主机名和域名
IPC 信号量、消息队列和共享内存
PID 进程编号
Network 网络设备、网线栈、端口等
Mount   挂载点(文件系统)
User    用户和用户组,内核3.8支持
  • Control Group(cgroups)
blkio   块设备IO
cpu cpu
cpuacct cpu资源使用报告
cpuset  多处理器平台上的CPU集合
devices 设备访问
freezer 挂起或恢复任务
memory  内存用量及报告
perf_event  对cgroup中的任务进行统一性能测试
net_cls cgroup中的任务创建的数据报文的类别标识符
  • 容器核心技术
chroot
namespace
cgroups
  • Docker容器引擎:LXC --> libcontainer --> runC
  • Docker Daemon:Docker server端,默认只提供socket文件接入
  • Registry:镜像仓库,默认通信协议HTTPS
  • Containers:容器
  • Images:镜像

二、Docker安装使用

  • 基础环境
64 bits CPU
kernel-3.10+
  • 安装
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# yum makecache fast
# yum list docker-ce.x86_64 --showduplicates | sort -r
# yum install https://mirrors.aliyun.com/centos-vault/7.3.1611/extras/x86_64/Packages/container-selinux-2.9-4.el7.noarch.rpm
# yum install docker-ce-18.06.0.ce-3.el7 -y 
  • 配置镜像加速(以阿里云为例)
# mkdir -p /etc/docker
# tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]  #加速地址登录阿里云后在容器镜像服务中获取
}
EOF
# systemctl daemon-reload
# systemctl start docker
# systemctl enable docker.service
  • 配置Unix Socket监听
# vim /etc/docker/daemon.json
{
  "hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]
}
# systemctl restart docker
# docker -H 192.168.100.9:2375 ps  #客户端使用tcp连接
  • 修改docker0网桥的IP信息
# vim /etc/docker/daemon.json
{
  "bip": "10.0.0.254/16",
  "fixed-cidr": "10.0.0.0/16",
  "mtu": 1500,
  "default-gateway": "10.0.0.1",
  "dns": ["114.114.114.114","8.8.8.8"]
}
  • 创建自定义桥
# docker network create --driver bridge --subnet "172.27.0.0/16" --gateway "172.27.0.1" docker1
# docker network ls
# ip link set br-0a9309aaa170 down
# ip link set br-0a9309aaa170 name docker1  #修改接口名字
# ip link set docker1 up
# docker network rm docker1  #删除网桥
  • 验证
# docker info
# docker version
  • 启动一个容器
# docker pull centos
# docker run --name d1 -it centos:latest
# docker start -ai 64d96be72c59  #再次进入容器
  • 启动一个nginx容器
# docker run --name web1 -d nginx:1.14
# docker inspect e75cfa7018ce |grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",
# curl 172.17.0.2

三、Docker Client命令

  • 常见用法(旧)
attach          将本地标准输入,输出和错误流附加到正在运行的容器
build           从Dockerfile构建映像
commit          根据容器的更改创建新图像
cp              在容器和本地文件系统之间复制文件/文件夹
create          创建一个新容器
diff            检查容器文件系统上文件或目录的更改
events          从服务器获取实时事件
exec            在正在运行的容器中运行命令
export          将容器的文件系统导出为tar存档
history         显示图像的历史记录
images          列出图像
import          从tarball导入内容以创建文件系统映像
info            显示系统范围的信息
inspect         返回有关Docker对象的低级信息
kill            杀死一个或多个正在运行的容器
load            从tar存档或STDIN加载图像
login           登录Docker注册表
logout          从Docker注册表注销
logs            获取容器的日志
pause           暂停一个或多个容器中的所有进程
port            列出端口映射或容器的特定映射
ps              列出容器
pull            从docker仓库中拉取镜像
push            将图像或存储库推送到注册表
rename          重命名容器
restart         重新启动一个或多个容器
rm              删除一个或多个容器
rmi             删除一个或多个图像
run             在新容器中运行命令
save            将一个或多个图像保存到tar存档(默认情况下流式传输到STDOUT)
search          在Docker Hub中搜索图像
start           启动一个或多个已停止的容器
stats           显示容器资源使用情况统计信息的实时流
stop            停止一个或多个正在运行的容器
tag             创建一个引用SOURCE_IMAGE的标记TARGET_IMAGE
top             显示容器的运行进程
unpause         取消暂停一个或多个容器中的所有进程
update          更新一个或多个容器的配置
version         显示Docker版本信息
wait            阻止,直到一个或多个容器停止,然后打印退出代码

四、Docker镜像(image)

  • docker采用分层构建机制,最底层为bootfs,次之为rootfs
    • bootfs: 用于系统引导的文件系统,包括BootLoader和kernel,容器启动完成后会被卸载以节约内存资源
    • rootfs: 位于bootfs之上,表现为docker容器的根文件系统,docker采用联合挂载,每一层都是只读的,在最上层有一个可写层
  • Aufs:高级多层统一文件系统,由Junjiro Okajima开发,早期使用
  • overlayfs & overlay2fs:至3.18版本开始被合并到Linux内核
# docker info |grep "Storage Driver"
Storage Driver: overlay2
  • Docker Registry分类
Sponsor Registry
Mirror Registry
Vendor Registry
Private Registry
  • Docker Hub
Image Repositories  镜像仓库
Automated Build  自动构建
Webhooks  可以将GitHub中的dockerfile自动构建为镜像
Organizations  组织
GitHub and Bitbucket integration
  • docker image
  build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rm          Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  • docker image的制作(commit)
  1. 手工组织文件系统,打包成docker image
  2. 基于容器制作,在运行的容器上commit将可写层制作成image
  3. 基于Dockerfile手动build或者自动构建,Dockerfile基于Base image制作
# docker pull centos:centos7.5.1804
# docker run --name centos -it centos:centos7.5.1804
[root@xxxxxxxxxxx /]# yum install vim wget lftp bash-completion net-tools bind-utils telnet screen tree psmisc bc httpd -y
# docker commit -p centos
# docker image ls
<none>                   <none>              484173886091        22 seconds ago      362MB
# docker tag 484173886091 dongfeimg/mycentos:v0.1
# docker image ls
dongfeimg/mycentos       v0.1                484173886091        5 minutes ago       362MB
# docker run --name mycentos -it dongfeimg/mycentos:v0.1
[root@3c21ac1d0496 /]# mkdir -p /data/html/
[root@3c21ac1d0496 /]# vim /var/www/html/index.html
<h1>Welcome Dongfei website.</h1>
# docker commit -a "Dongfei" -c 'CMD ["/usr/bin/systemctl","start","httpd"]' -p mycentos dongfeimg/mycentos:v0.2
# docker run --name mycentos2 --privileged=true -d dongfeimg/mycentos:v0.2 /usr/sbin/init
[root@docker ~]# docker exec -it 7cec67f74460 bash
[root@7cec67f74460 /]# systemctl start httpd
# docker inspect 7cec67f74460 |grep IPAddress
"IPAddress": "172.17.0.4",
# curl 172.17.0.4
<h1>Welcome Dongfei website.</h1>
  • docker push
# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: dongfeimg
Password: ******
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
# docker push dongfeimg/mycentos:v0.1
# docker push dongfeimg/mycentos:v0.2
  • 镜像打包和导入
# docker save -o myimages.gz centos:centos7.5.1804 dongfeimg/mycentos:v0.1
# docker load -i myimages.gz
  • 将docker images批量全部打包
# docker save $(docker images | grep -v REPOSITORY | awk 'BEGIN{OFS=":";ORS=" "}{print $1,$2}') -o images_name.gz

五、Docker网络(network)

  • 桥接
  • NET
  • Overlay Network 叠加网络,IP承载IP的隧道通信
# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
f0867978e324        bridge              bridge              local  #net桥接式网络(默认)
f2ecf4873c28        host                host                local  #容器使用宿主机的名称空间
07123e30eddb        none                null                local  #只有lo网卡
# yum install bridge-utils
# brctl show
bridge name     bridge id               STP enabled     interfaces
docker0         8000.02420a3bea55       no              vethd1d80f0
# docker network inspect bridge  #查看网络的详细信息
# docker run --name centos --network host -it dongfeimg/mycentos:v0.1  #使用host网络
  • ip命令管理网络名称空间
# rpm -q iproute
iproute-4.11.0-14.el7.x86_64
# ip netns add r1  #创建网络名称空间
# ip netns add r2
# ip netns list
# ip netns exec r1 ifconfig -a  #在网络名称空间中执行命令
# ip link add name veth1.1 type veth peer name veth1.2  #创建一对虚拟网卡
# ip link show
# ip link set dev veth1.1 netns r1  #将veth1.1网卡移动到网络名称空间r1中
# ip link set dev veth1.2 netns r2
# ip netns exec r1 ifconfig veth1.1 10.0.0.1/24 up
# ip netns exec r2 ifconfig veth1.2 10.0.0.2/24 up
# ip netns exec r1 ping 10.0.0.2

1. 封闭式容器:只有lo网卡

  • 创建封闭式容器
# docker run --name  centos7 -it --network none --rm dongfeimg/mycentos:v0.1

2. 联盟式容器:两个容器使用一个名称空间

  • 创建联盟式容器(共享网络名称空间)
# docker run --name b1 -it --rm busybox
/ # echo "hello" > /tmp/index.html
/ # httpd -h /tmp/
# docker run --name b2 -it --rm --network container:b1 busybox
/ # wget -O - -q 127.0.0.1

3. 连接docker0网桥的桥接容器

  • 创建桥接式容器并且创建时注入主机名、DNS和hosts
# docker run --name  centos7 -it --network bridge --rm --hostname mydocker.dongfei.com --dns 8.8.8.8 --add-host www.dongfei.com:192.168.0.111 dongfeimg/mycentos:v0.1
  • 开放桥接容器端口至宿主机(-p选项可使用多次)
# docker run --name web01 --rm -p 80 nginx:1.14  #将容器的80映射至宿主机上的随机端口
# docker run --name web01 --rm -p 192.168.100.9::80 nginx:1.14  #指定映射宿主机地址
# docker run --name web01 --rm -p 80:80 nginx:1.14  #将容器的80映射至宿主机的80端口
# docker run --name web01 --rm -p 192.168.100.9:80:80 nginx:1.14  #指定映射端口和地址
# docker port web01  #查看映射关系
# iptables -t nat -vnL |grep DNAT
# docker inspect bc337aa4d9fc |grep HostPort
  • 修改docker0网桥地址信息
# vim /etc/docker/daemon.json
{
  "bip": "10.0.0.254/16",
  "fixed-cidr": "10.0.0.0/16",
  "mtu": 1500,
  "default-gateway": "10.0.0.1",
  "dns": ["114.114.114.114","8.8.8.8"]
}
  • 创建自定义网桥
# docker network create --driver bridge --subnet "172.27.0.0/16" --gateway "172.27.0.1" docker1
# docker network ls
# ip link set br-0a9309aaa170 down
# ip link set br-0a9309aaa170 name docker1  #修改接口名字
# ip link set docker1 up
# docker network rm docker1  #删除网桥

4. 共享宿主机网络容器

  • 创建共享宿主机网络容器
# docker run --name b1 -it --rm --network host busybox

六、Docker 存储卷(volume)

COW:写时复制

  • Bind mount volume:手动mount绑定的卷
# docker run --name centos-3 -it -v /data centos:centos7.5.1804
# docker inspect 638374f203ab |grep -A 10 Mounts
  • Docker-managed volume:docker自动管理的卷
# docker run --name centos-4 -it --rm -v /data/volumes/centos-4:/data centos:centos7.5.1804
# docker inspect -f {{.Mounts}} centos-4   #指定js模板查看数据
[{bind  /data/volumes/centos-4 /data   true rprivate}]
# docker inspect -f {{.NetworkSettings.IPAddress}} centos-4
  • 共享volume
# docker run --name centos-5 -it --rm -v /data/volumes/centos-share:/data centos:centos7.5.1804
# docker run --name centos-6 -it --rm -v /data/volumes/centos-share:/data centos:centos7.5.1804
  • 复制其他容器的卷设置
# docker run --name infracon -it -v /data/infracon/volume/:/data/web/html centos:centos7.5.1804 基础架构支持容器
# docker run --name nginx --network container:infracon --volumes-from infracon -it nginx

七、Docker File

  • .dockeringore:打包忽略的文件列表,每行写一个文件的路径,可使用通配符
  • FROM指令:指定基础镜像
FROM <repository>[:<tag>]  or FROM <repository>@<digest>
~]# mkdir img_work  #创建工作目录
~]# cd img_work/
img_work]# vim Dockerfile  #注意D大写
# Description: my image  #描述信息
FROM centos:centos7.5.1804  #基础镜像
LABEL maintainer="Dongfei <[email protected]>"  #元数据
  • COPY指令:
COPY ["<src>",..."<dest>"]
    1.<src>必须是build上下午中的路径,不能是父目录中的文件
    2.如果<src>是目录,则其内部文件或子目录会被递归复制,但<src>目录本身不会被复制
    3.如果指定多个<src>,或在<src>中使用了通配符,则<dest>必须是一个目录,且必须以/结尾
    4.如果<dest>事先不存在,它将会被自动创建,这包括其父目录
# 复制网页文件
img_work]# vim Dockerfile
COPY ["index.html","/var/www/html/"]
img_work]# vim index.html
<h1>My Docker website.</h1>
img_work]# docker build -t tinyhttpd:v0.1 ./
img_work]# docker run --name h1 --rm tinyhttpd:v0.1 cat /var/www/html/index.html
<h1>My Docker website.</h1>
# 复制yum源
img_work]# cp -r /etc/yum.repos.d/ ./
img_work]# vim Dockerfile
COPY ["yum.repos.d/","/etc/yum.repos.d/"]
img_work]# docker build -t tinyhttpd:v0.2 ./  
img_work]# docker run --name h2 --rm tinyhttpd:v0.2 ls /etc/yum.repos.d/
  • ADD指令:将宿主机的文件打包到docker镜像,支持URL和tar文件
ADD ["<src>",..."<dest>"]
    1.<src>如果是本地的tar文件,则会自动展开至镜像中
    2.<src>如果是URL的tar文件,则不会自动展开
img_work]# wget http://nginx.org/download/nginx-1.16.0.tar.gz
img_work]# vim Dockerfile
ADD ["http://nginx.org/download/nginx-1.16.0.tar.gz","/usr/local/src/"]
ADD ["nginx-1.16.0.tar.gz","/usr/local/src/"]
img_work]# docker build -t tinyhttpd:v0.3 ./
img_work]# docker run --name h3 --rm tinyhttpd:v0.3 ls /usr/local/src/
  • WORKDIR:指定工作目录,逆序往上找到第一个就是工作路径
WORKDIR /usr/local/src/
ADD http://nginx.org/download/nginx-1.16.0.tar.gz ./
ADD ["nginx-1.16.0.tar.gz","./"]
  • VOLUME:只能挂载Docker-managed volume
VOLUME /data/mysql/
  • EXPOSE:用于为容器打开指定要监听的端口实现以外部通信,只能绑定暴露容器中的端口,动态绑定在宿主机的随机端口
EXPOSE <port>[/<protocol>][<port>[/<protocol>]...] #protocol 协议
EXPOSE 80/tcp 22/tcp
  • ENV:定义环境变量,可注入容器,可以被ADD,COPY等指令所调用
ENV <key>=<value> ...
ENV DOC_ROOT="/var/www/html/"
COPY ["index.html","$DOC_ROOT"]
# docker run --name h5 -e HTTP_PORT=8888 --rm tinyhttpd:v0.5 printenv #启动容器时注入环境变量
  • RUN:在docker build时执行命令
RUN cd /usr/local/src/ && \
    tar -xf nginx-1.16.0.tar.gz
  • CMD:在docker run时执行的默认命令,可以写多个,但只有最后一个生效
1.CMD <command>  #使用bash解析命令执行
2.CMD ["<executable>","<param1>","<param2>"]
3.CMD ["/bin/bash","-c","<executable>","<param1>"]
4.CMD ["<param1>","<param2>"]  #CMD的参数传递给ENTRYPOINT
image_work2]# vim Dockerfile
FROM busybox
LABEL Author="Dongfei"
ENV WEB_DOC_ROOT="/data/web/html"
RUN mkdir -p ${WEB_DOC_ROOT} && \
    echo '<h1>Busybox httpd server.</h1>' > ${WEB_DOC_ROOT}/index.html
CMD /bin/httpd -f -h ${WEB_DOC_ROOT}
image_work2]# docker build -t tinyhttpd:v0.7 ./
image_work2]# docker image inspect tinyhttpd:v0.7 |grep "CMD"                      "CMD [\"/bin/sh\" \"-c\" \"/bin/httpd -f -h ${WEB_DOC_ROOT}\"]"
# docker run --name tinyweb7 -it --rm -P tinyhttpd:v0.7
# docker exec -it tinyweb7 /bin/sh
CMD ["/bin/httpd","-f","-h","/data/web/html"]
image_work2]# docker image inspect tinyhttpd:v0.8 |grep "CMD"       
                "CMD [\"/bin/httpd\" \"-f\" \"-h ${WEB_DOC_ROOT}\"]"
  • ENTRYPOINT:类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序;与CMD不同的是,由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序
1.ENTRYPOINT <command>  #使用bash解析命令执行
2.ENTRYPOINT ["<executable>","<param1>","<param2>"]
3.ENTRYPOINT ["/bin/bash","-c","<executable>","<param1>"]
# vim Dockerfile
FROM busybox
LABEL Author="Dongfei"
ENV WEB_DOC_ROOT="/data/web/html"
RUN mkdir -p ${WEB_DOC_ROOT} && \
    echo '<h1>Busybox httpd server.</h1>' > ${WEB_DOC_ROOT}/index.html
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}
# docker build -t tinyhttpd:v0.10 ./
# docker run --name tinyweb2 -it --rm -P tinyhttpd:v0.10
img3]# 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
exec "$@"  #执行所有传入的参数

img3]# vim Dockerfile
FROM nginx:1.14-alpine
LABEL maintainer="Dongfei"
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"]

img3]# vim index.html
<h1>dongfei index</h1>

img3]# docker build -t myweb:v0.1 ./
# docker run --name myweb1 --rm -P myweb:v0.1

[root@docker ~]# docker exec -it b41252ebbaa8 sh
/ # wget -O - -q b41252ebbaa8
<h1>dongfei index</h1>

注意:json数组中,注意要使用双引号

  • USER:指定用户
USER <UID>|<UserName>
  • HEALTHCHECK:容器健康监测
--interval=DURATION  :每隔多次时间检测一次,默认30s
--timeout=DURATION :每次检测超时时长,默认30s
--start-period=DURATION :等待主进程启动的时间,默认0s
--retries=N :检测几次失败任务为false,默认3次
0: success  :命令返回值
1:unhealthy
2:reserved
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1
EXPOSE 80/tcp
HEALTHCHECK --start-period=3s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/
  • SHELL:设置使用的shell,默认使用/bin/sh
  • STOPSIGNAL signal :设置使用docker stop命令停止容器时向主进程发的信号
  • ARG:定义Dockerfile变量,在docker build 传值
ARG author="Dongfei"
LABEL maintainer="${author}"
  • ONBUILD:用于在Dockerfile中定义一个触发器,当其他Dockerfile将自己的镜像当做基础镜像时执行;不能自我嵌套,不能执行MAINTAINER指令
ONBUILD ADD http://xxxx.bat

八、Docker Registry

1、distribution:由docker官方提供

  • 安装registry
# yum install docker-registry
# rpm -ql docker-distribution
/etc/docker-distribution/registry/config.yml  #配置文件
/usr/lib/systemd/system/docker-distribution.service  #服务脚本
/var/lib/registry  #镜像存放目录
# vim /etc/docker-distribution/registry/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
    cache:
        layerinfo: inmemory
    filesystem:
        rootdirectory: /var/lib/registry  #目录
http:
    addr: :5000  #端口
# systemctl start docker-distribution.service
# systemctl enable docker-distribution.service
  • 修改docker daemon使用HTTP协议
# vim /etc/docker/daemon.json
{
    "insecure-registries": ["192.168.100.9:5000"]
}
# systemctl restart docker.service
  • 推送docker镜像
# docker tag quay.io/coreos/flannel:v0.11.0-amd64 192.168.100.9:5000/flannel:v0.11.0-amd64
# docker push 192.168.100.9:5000/flannel:v0.11.0-amd64
# ls /var/lib/registry/docker/registry/v2/repositories/

2、harbor:由VMware公司在distribution二次开发

  1. yum install docker-ce-18.06.0.ce-3.el7 -y #docker-ce源提供
  2. yum install docker-compose -y #epel源提供
  3. 硬件:2C4G

下载:https://github.com/goharbor/harbor/releases

~]# wget https://storage.googleapis.com/harbor-releases/release-1.4.0/harbor-offline-installer-v1.4.0.tgz
~]# tar xf harbor-offline-installer-v1.4.0.tgz -C /usr/local/
~]# cd /usr/local/harbor/
harbor]# vim harbor.cfg
hostname = harbor.com
ui_url_protocol = http
max_job_workers = 3  #cpu启动几个进程,小于等于总cpu核心数
customize_crt = on  #自定义证书,需要客户端信任
ssl_cert = /data/cert/server.crt
ssl_cert_key = /data/cert/server.key
secretkey_path = /data
admiral_url = NA  #管理URL,未定义
harbor_admin_password = Harbor12345  #admin登录密码
harbor]# ./install.sh

访问:http://192.168.100.11/harbor/sign-in,admin/Harbor12345

harbor]# docker-compose pause  #暂停服务,注意需要在/usr/local/harbor/目录下执行
harbor]# docker-compose unpause  #继续
harbor]# docker-compose stop  #停止
harbor]# docker-compose start  #启动

九、Docker资源限制

  • 内存资源
-m or --memory=  #限制内存大小 例: --memory=4m
--memory-swap *  #限制交换分区,必须先设置内存大小,可设置的值:正数,0,-1
    正数:swap为swap-memory
    0:swap为物理机mem*2
    -1:不限制
    注意:在容器内free看到的swap不具有展现出空间指示的意义
--oom-kill-disable  #禁止容器被oom
  • CPU资源
--cpu-shares  #CPU资源共享,按比例切分当前系统上的CPU资源
--cpuset-cpus=0,1  #限制在哪个CPU上
--cpus=  #分配几个CPU
  • 压测
# docker pull lorel/docker-stress-ng
# docker run --name stress -it --rm -m 256m lorel/docker-stress-ng stress --vm 2
# docker top stress
# docker state
# docker run --name stress -it --rm --cpus 2 lorel/docker-stress-ng stress  --cpu 8
# docker run --name stress -it --rm --cpuset-cpus 0,2 lorel/docker-stress-ng stress  --cpu 8
# docker run --name stress -it --rm --cpu-shares 1024 lorel/docker-stress-ng stress  --cpu 8
# docker run --name stress2 -it --rm --cpu-shares 512 lorel/docker-stress-ng stress  --cpu 8

++完结撒花++

猜你喜欢

转载自www.cnblogs.com/L-dongf/p/11027946.html