CentOS 8 安装docker

打印 上一主题 下一主题

主题 824|帖子 824|积分 2472

安装docker

环境要求:
centos 8
linux内核3.1以上
  1. // 查看linux内核版本
  2. uname -r
  3. // 低于3.1,升级(注:生产环境谨慎操作,该更新会同时升级内核)
  4. yum update
复制代码

摆设docker容器虚拟化平台并设置docker镜像加速地址

安装docker环境依赖


  1. yum install -y yum-utils device-mapper-persistent-data lvm2
复制代码
设置国内docker-ce的yum源(阿里云)


  1. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
复制代码
安装docker-ce


  1. // 查看仓库中的所有docker版本,可以自定义选择版本安装。
  2. yum list docker-ce --showduplicates | sort -r
  3. // 开始,以下两个方式,幸福二选一
  4. 方式1.默认稳定版
  5. // 2021.07.13 更新,直接使用以下命令安装,该操作会默认安装最新稳定版docker,由于repo中默认只开启stable仓库
  6. yum install docker-ce
  7. 方式2.选择版本安装
  8. // 选择版本安装
  9. yum install -y docker-ce-19.03.13
  10. // 结束
  11. // 旧版(请勿执行,未确认是否可继续使用)
  12. yum install docker-ce docker-ce-cli containerd.io -y
复制代码
  注:docker-ce-cli 作用是docker命令行工具包
    containerd.io 作用是容器接口相关包
    yum info 软件包名字,可以查察一个包的具体作用
  docker启动并设置开机启动


  1. systemctl start docker && systemctl enable docker
复制代码
查察proc下网络参数,路由转发功能是否有用


  1. cat /proc/sys/net/ipv4/ip_forward
复制代码
  启动docker后会自动修改,返回值为1
  设置阿里云docker镜像加速器,提升pull的速率


   登录容器hub服务,https://cr.console.aliyun.com控制台,使用支付宝账号,第一次登录时,需要设置一个独立暗码,左侧的加速器帮助页会显示为你独立分配的加速地址
    修改方法1:
    修改文件设置,添加镜像地址
  1. vim /etc/docker/daemon.json
复制代码
  {
   
  1.    "registry-mirrors":["https://e9yjns4.mirror.aliyuncs.com","https://第二个镜像地址(未验证是否可用)"]
复制代码
   }
    查察当前docker有多少服务启动
  1. docker info | more
复制代码
  查察镜像包
  1. docker images
复制代码
修改方法2:
   修改docker服务启动脚本
  1. vim /usr/lib/systemd/system/docker.service
复制代码
  修改:ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    添加镜像地址:ExecStart=/usr/bin/dockerd -H fd:// --registry-mirror=https://阿里云ID.mirror.aliyuncs.com --containerd=/run/containerd/containerd.sock
     国内镜像地址设置及阿里云官网申请:
    修改systemd服务脚本后实行daemon-reload重新加载,修改服务设置文件不需要实行
  1. systemctl daemon-reload
复制代码
  重启docker
  1. systemctl restart docker
复制代码
tips:shell终端操纵


   cd 到目次下,输入rz命令回车,上传文件
  关闭防火墙


  1. // 关闭防火墙
  2. systemctl stop firewalld && systemctl disable firewalld
  3. // 重启docker
  4. systemctl restart docker
复制代码
  关闭防火墙,需要把docker服务重启一下,否则docker的ip包转发功能无法使用,即使防火墙关闭,docker会调用内核模块netfilter增长规则
    iptables只是操纵netfilter工具
  docker平台基本使用方法

运行docker容器实例


例1:
   运行一个container并加载镜像centos,运行起来这个实例后,在实例中实行/bin/bash命令
    docker常用参数
    run 运行
    -i 以交互模式运行容器,通常与-t同时使用
    -t 为容器重新分配一个伪输入终端,通常与-i同时使用
  1. docker run -it centos:latest /bin/bash
复制代码
  centos:latest:镜像名及镜像tag
    /bin/bash:运行镜像里的bash,可直接写bash
  例2:
   在container中运行一个长久运行的进程,不断向stdin输出hello world,模仿一个背景运行的服务
    docker常用参数
    -d 背景运行容器,并返回容器ID
    -c 后面跟待完成的命令
  1. docker run -d centos:latest /bin/sh -c 'while true;do echo hello world;sleep 1;done'
复制代码
  /bin/sh -c :实行命令
    从一个容器中取日志,查察输出的内容,可用于后期查抄docker实例在尺度输出中弹出的错误信息或正常信息
    docker logs 容器实例的name/ID
    命令:
    查察运行中的容器
  1. docker ps
复制代码
  查察所有容器(运行中及沉睡/退出的)
  1. docker ps
  2. -a
复制代码
  查察日志输出
  1. docker logs 实例ID
复制代码
  杀死docker实例
  1. docker kill 实例ID
复制代码
启动、制止、重启container容器实例


启动:run 创建并运行docker实例

   关闭防火墙
  1. iptables -F
复制代码
  重启docker
  1. systemctl restart docker
复制代码
  载入镜像
  1. docker load -i
复制代码
  查察镜像
  1. docker images
复制代码
  运行实例,物理机的80端口:映射容器实例的80端口,容器端口映射到物理机的端口
  1. docker run -d -p 80:80 centos:httpd-v2
复制代码
  查察物理机上开启的80代理端口
  1. netstat -antup | grep 80
复制代码
docker容器命名和资源配额控制


   docker容器命名和重命名
    容器命名语法:
    docker run -itd --name 容器实例名 容器镜像名 要实行的命令
    容器重命名语法:
    docker rename 旧容器名 新容器名
    例1:运行一个名字为docker1的容器
  1. docker run -itd --name docker1 centos:latest /bin/bash
复制代码
  查察命名
  1. docker ps
复制代码
  例2:将docker1容器重命名
  1. docker rename docker1 docker2
  2. docker ps
复制代码
创建docker容器实例时指定容器的主机名


   docker run -it --name 容器名 -h 指定主机名 镜像 /bin/bash
    例1:
  1. docker run -it --name docker3 -h onebig.cn centos bash
复制代码
  注:centos镜像代表centos:latest,没有指定tag标签,默认为latest,且没有加-d,不是背景运行
    查察主机名
  1. hostname
复制代码
  退出
  1. exit
复制代码
  让docker容器开机自动启动
    docker run --restart=always -itd --name 容器名 镜像 /bin/bash
    参数:–restart=always 在容器退出时总是重启容器
    测试:
    运行容器
  1. docker run --restart=always -itd --name test1 centos bash
复制代码
  重启docker:
  1. systemctl restart docker
复制代码
  查察运行中的容器
  1. docker ps
复制代码
docker容器的重启计谋


   参数:–restart=
    no:默认计谋,在容器退出时不重启容器
    on-failure:在容器非正常退出时重启容器,最多重启3次
    always:在容器退出时不停重启容器
    unless-stopped:在容器退出时总是重启容器,但是不思量在docker保卫进程启动时就已经制止了容器
    修改容器重启计谋
  1. docker update --restart=always 容器ID或名字
复制代码
docker容器资源配额控制之cpu


   docker通过cgroup来控制容器使用的资源配额,包罗cpu、内存、硬盘,基本覆盖了常见的资源配额和使用量控制
    cgroup概述:
    cgroup是control groups的缩写,是linux内核提供的一种可以限定、记录、隔离进程组所使用的物理资源(如 cpu、memory、磁盘io等)的机制,被LXC、docker等很多项目用于实现进程资源控制,cgroup将恣意进程举行分组化管理的linux内核功能,cgroup本身是提供将进程举行分组化管理的功能和接口的底子结构,io或内存的分配控制等具体的资源管理功能是通过这个功能来实现的
     为什么要举行硬件配额
    当多个容器运行时,防止某个容器把所有的硬件都占用了(比如一台被黑的容器,有可能把所有的资源都占用)
  指定docker容器可以使用的cpu份额


   例1:给容器实例分配512权重的cpu使用份额
    查察cpu参数帮助
  1. docker run --help | grep cpu-shares
复制代码
  cpu配额参数:-c,–cpu-shares init
    cpu shares(relative weight) 在创建容器时指定容器所使用的cpu份额值,cpu-shares的值不能保证可以得到1个vcpu大概多少GHz的cpu资源,仅仅只是一个弹性的加权值
    默认每个docker容器的cpu份额值都是1024,在同一个cpu焦点上,同时运行多个容器时,容器的cpu加权的效果才气表现出来
  两个容器A/B的cpu份额分别为1000和500,效果会怎样?

   情况1:A和B正常运行,在cpu举行时间片分配的时间,容器A比容器B多一倍的机会得到cpu的时间片
    情况2:分配的效果取决于其时其他容器的运行状态,比如容A的进程不停是空闲的,那么容器B是可以获取比容器A更多的cpu时间片的,比如主机上只运行了一个容器,即使它的cpu份额只有50,它也可以独占整个主机的cpu资源
    cgroups只在多个容器同时争抢同一个cpu资源时,cpu配额才会收效,因此无法单纯根据某个容器的cpu份额来确定有多少个cpu资源分配给它,资源分配效果取决于同时运行的其他容器的cpu分配和容器中进程运行情况
     例1:给容器分配512权重的cpu使用份额
    参数:–cpu-shares 512
  1. docker run -it -c 512 centos /bin/bash
复制代码
  查察效果
  1. cat /sys/fs/cgroup/cpu/cpu.shares
复制代码
  注:启动多个容器,测试是否只能使用512份额的cpu资源,单独一个容器,看不出来使用的cpu的比例,因没有docker实例同此docker实例竞争
  cpu core焦点控制


   参数:–cpuset 可以绑定cpu
    对多核cpu的服务器,docker还可以控制容器运行限定使用哪些cpu内核和内存节点,即使用–cpuset-cpus和–cpuset-mems参数,对具有NUMA拓扑(具有多cpu、多内存节点)的服务器尤其有用,可以对需要高性能计算的容器举行性能最优的设置,假如服务器只有一个内存节点,则–cpuset-mems的设置基本上不会有明显效果
    扩展:
    服务器架构一样寻常分为SMP、NUMA、MPP体系架构
    从体系架构来看,目前的商用服务器大体可以分为三类:
    1、即对称多处置惩罚器结构(SMP:Symmetric Multi-Processor)例:x86服务器,双路服务器,主板上有两个物理cpu
    2、非一致存储访问结构(MUMA:Non-Uniform Memory Access)例:IBM 小型机 pSeries690
    3、海量并行处置惩罚结构(MPP:Massive ParallelProcessing)例:大型机
  扩展技术taskset命令


   taskset设定cpu亲和力,taskset能将一个或多个进程绑定到一个或多个处置惩罚器上运行
    参数:
    -c,–cpu-list 以列表格式显示和指定cpu
    -p,–pid 在已经存在的pid上操纵
    例1:设置只在cpuID是1和2的cpu上运行sshd进程程序,第一个cpu的ID是0
    查察sshd进程id
  1. // 查看sshd进程号
  2. ps -axu | grep sshd
  3. // 设置sshdcpu亲和力,只在1和2cpu上运行
  4. taskset -cp 1
  5. ,2 1089
复制代码
  查察pid为1的cpu亲和力
  1. taskset -cp 1
复制代码
  查察ID为1的进程在哪个cpu上运行,查察进程树
  1. pstree -p | more
复制代码
  当cpu数量很多时,确实需要绑定进程到cpu上,可以淘汰cpu上下文切换的开销,节省时间
    例:物理机一共有16个焦点,创建的容器只能用0、1、2三个焦点
  1. docker run -it --name cpu1 --cpuset-cpus 0-2 centos bash
复制代码
  1. cat /sys/fs/cgroup/cpuset/cpuset.cpus #查看当前docker配置cpu可用核心
复制代码
cpu配额控制参数的混合使用


   当上面这些参数中时,cpu-shares控制只发生在容器竞争同一个cpu的时间片时有用
    假如通过cpuset-cpus指定容器A使用cpu 0,容器B只使用cpu 1,在主机上只有这两个容器使用对应内核的情况,它们各自占用全部的内核资源,cpu-shares没有明显效果
    效果展示
    容器A和容器B设置上cpuset-cpus值并都绑定到同一个cpu上,然后同时抢占cpu资源,就可以看出效果了
    例1:测试cpu-shares和cpuset-cpus混合使用运行效果,就需要一个压力测试工具stress来让容器实例把cpu跑满
    如何把cpu跑满?如何把4焦点的cpu中第一和第三个焦点跑满?可以运行stress,然后使用taskset绑定一个cpu
  扩展:stress命令

   概述:linux体系压力测试软件stress,stress可以测试linux体系cpu、menory、io、disk的负载
    下载页
    http://people.seas.harvard.edu/~apw/stress/ --404
    https://fossies.org/linux/privat/stress-1.0.4.tar.gz
    注:也可以使用epel源中的stress-xxx.rpm
    yum install epel-release
    yum install stress -y
     stress参数解释
    -? 显示帮助信息
    -v 显示版本号
    -q 不显示运行信息
    -n 显示已完成的指令情况
    -t --timeout N 指定运行N妙后制止
   
  1.     --backoff        N        等待N秒后开始运行
复制代码
   -c 产生n个进程,每个进程都反复不绝的计算随机数的平方根,测试cpu
    -i 产生n个进程,每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上,测试硬盘
    -m --vm n 产生n个进程,每个进程不断调用内存分配malloc()和内存开释free()函数,测试内存
   
  1.     --vm-bytes        B        指定malloc时内存的字节数(默认256MB)
复制代码
  
  1.     --vm-hang        N        指定在free栈的秒数
复制代码
   -d --hadd n 产生n个实行write和unlink函数的进程
   
  1.     --hadd-bytes        B        指定写的字节数
复制代码
  
  1.     --hadd-noclean        不unlink
复制代码
   注:时间单位可以为秒s,分m,时h,天d,年y,文件巨细单位可以为K,M,G
     例:产生2个cpu进程,2个io进程,20秒后制止运行
  1. stress -c 2 -i 2 --verbose --timeout 20s
复制代码
  #假如实行时间为分钟,修改20s为1m
    查察当前cpu运行状态
  1. top      回车后按1
复制代码
  例:测试cpuset-cpus和cpu-shares混合使用运行效果,就需要一个压力测试工具stress来让容器实例把cpu跑满,当跑满后,会不会去其他cpu上运行,假如没有在其他cpu上运行,说明cgroup资源限定成功
  例:创建2个容器实例,docker10和docker20,让docker10和docker20只运行在cpu0和cpu1上,最终测试一下docker10和docker20使用cpu的百分比,实验拓扑图如下:


  1. docker run -itd --name docker10 --cpuset-cpus 0,1 --cpu-shares 512 centos /bin/bash
  2. docker run -itd --name docker20 --spuset-cpus 0,1 --cpus-shares 1024 centos /bin/bash
复制代码
  测试1:进入docker10,使用stress测试进程是不是只在cpu0,1上运行?
    docker10安装stress
  1. docker exec -it docker10 bash
  2. yum install -y epel-release
  3. yum install stress -y
复制代码
  docker20安装stress,新开终端页面
  1. docker exec -it docker20 bash
  2. yum install -y epel-release
  3. yum install stress -y
复制代码
  在docker10终端里运行
  1. stress -c 2 -v -t 10m
  2.         #运行2个进程,把2个cpu占满
复制代码
  在物理机另外一个终端上运行top命令,按1快捷键,查察每个cpu使用情况,0,1cpu跑满100%为正常
     测试2:进入docker20,使用stress测试进程是不是只在cpu0,1上运行,且docker20上运行的stress使用cpu百分比是docker10的2倍?
  1. stress -c 2 -v -t 10m
复制代码
  注:两个容器只在cpu0,1上运行,说明cpu绑定限定成功,而docker20是docker10使用cpu的2倍,说明–cpu-shares限定资源成功
  docker容器实例运行结束后自动开释资源

   docker run --help | grep rm
    – rm 参数:当容器命令运行结束后,自动删除容器,自动开释资源
    应用场景:在某些环境下,可能需要大量的新建docker实例,然后仅仅运行几秒钟或几分钟,然后就彻底删除,如运行单元测试或测试弹性云计算
    例:阿里云要模仿双11的压力,需要快速创建1万docker实例,每个docker容器实例中都运行ab命令,冒死访问tmall.com首页,运行1个小时后自动删除
  1. docker run -it -rm --name mk centos sleep 5
复制代码
  物理机上查察
  1. docker ps
  2. -a | grep mk
复制代码
  等5s后再查察
  1. docker ps
  2. -a | grep mk        #自动删除了
复制代码
docker容器资源配额控制之内存

   docker提供参数-m,–memory=‘’,限定容器的内存使用量
    例:允许容器使用的内存上限为128M
    docker run -it -m 128m centos
    cat /sys/fs/cgroup/memory.limit_in_bytes
    注:也可以使用stress举行测试
     例:创建一个docker,只使用2个cpu焦点,只能使用128M内存
  1. docker run -it --cpuset-cpus 0,1 -m 128m centos
复制代码
docker数据映射

   docker run -itd -v /src:/dst centos bash
    -v 用来指定挂载目次,冒号:前面的/src为物理机当地目次,:后面的/dst为容器的目次
    例:把物理机上的/var/www/html映射到docker实例的/var/www/html
    优势:这样当docker坏了,数据还在物理机上,再使用apache镜像启动一个docker实例就可以了,数据不丢失
     物理机目次:/var/www/html
  1. mkdir /var/www/html
  2. docker run -it --name web1 -v /var/www/html/:/var/www/html centos bash
  3. echo aaa > /var/www/html/index.html
复制代码
  物理机查察:
  1. ls /var/www/html        #index.html
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

民工心事

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表