学神文档

容器缺点:
1.docker部署应用的时候,并不包含数据。日志,数据库等通常应放在Docker容器外。一个容器的镜像通常很小,不适合存大量数据,存储可以通过外部挂载的方式使用。比如:NFS,ceph、glusterfs、ipsan、MFS等
一句话:docker只用于计算,存储交给别人

2.所有容器共用linux kernel资源,资源能否实现最大限度利用,所以在安全上也会存在漏洞。(全有容器底层还是同一个)

Dockerhub官网:https://registry.hub.docker.com/

hostnamectl set-hostname xxx
bash

时间同步:ntpdate cn.pool.ntp.org
/1 * /usr/sbin/ntpdate cn.pool.ntp.org

ntp服务器信息:https://www.66office.com/article.php?id=317

yum -y install docker-ce docker-ce-cli containerd.io
docker-ce-cli 作用是docker命令行工具包
containerd.io 作用是容器接口相关包

内核参数修改:br_netfilter模块用于将桥接流量转发至iptables链,br_netfilter内核参数需要开启转发
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1 # 多网卡通信

报错解决:modprobe br_netfilter

docker save -o
docker load -i

镜像相当于对操作系统+程序+程序依赖的库打一个包
软件是依赖操作系统中的库或二进制文件,如果把软件所依赖的库和二进制文件打包在一起发布,不用物理机系统上的文件,也就不依赖操作系统了。

https://www.bilibili.com/video/BV1jU4y177kh?p=5&spm_id_from=pageDriver 8分钟
FROM
MAINTAINER
RUN
COPY
EXPOSE
ENTRYPOINT entrypoint 启动命令 [“/usr/sbin/nginx”,”-g”,”daemon off;”]

Docker通过cgroup来控制容器使用的资源配额,资源配额包括CPU、磁盘、内存IO。
cgroup是Control Groups的缩写,是linux内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如:cpu、memory、磁盘IO等),被LXC、docker等很多项目用于实现进程资源控制。

LXC是Linux Container缩写,可以提供轻量级的虚拟化,以便隔离进程和资源
chattr 相当于是最早的隔离技术

为什么要进行硬件资源限制?
当多个容器运行时,防止某容器把所有的硬件都占用(比如服务器被黑、java程序bug资源跑高)

指定资源分配—-cpu
docker run —help | grep cpu-shares
cpu配额参数:-c —cpu-shares int
CPU shares(relative weight)在创建容器时指定容器所使用的CPU份额值。
cpu shares的值不能保证可以获得1个vcpu或者多个GHz的CPU资源,仅仅只是一个弹性的加权值。

默认每个docker容器的cpu份额值都是1024。在同一个cpu核心上,同时运行多个容器时,容器的cpu加权的效果才能体现出来

cgroups在多个容器时候才生效

docker run -it —cpu-shares 512 xxx /bin/bash
容器内查看:cat /sys/fs/cgroup/cpu/cpu.shares

通过-c设置的cpu —share并不是cpu资源的绝对数量,而是相对权重值(比例)
比如在host中启动了两个容器:
docker run —name “container-A” -c 1024 centos
docker run —name “container-B” -c 512 centos
container-A的cpu share 是container-B的两倍,这样当AB两个容器都需要cpu资源的时候,container-A可以得到的CPU是container-B的两倍

需要注意的是,这种按权重分配cpu只会发生在cpu资源紧张的情况下,如果container-A处理空闲状态,为了充分利用CPU资源,container-B也可以分配到全部可用cpu

目前大部分公司都上云了,cpu不够就加,基本不会这样麻烦的设置cpu-shares。

指定资源分配—-memory
docker run -it -m 128m centos
容器内:cat /sys/fs/cgroup/memory/memory.limit_in_bytes