docker服务

一、部署方法:

  1. 安装环境依赖: yum install -y yum-utils device-mapper-persistent-data lvm2
  2. 配置国内docker的yum源: yum-config-manager —add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

或者: wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  1. 安装docker: yum install docker-ce docker-ce-cli containerd.io -y
  2. 启动docker: systemctl enable —now docker
  3. 验证查看docker版本: docker version
  4. 查看docker具体信息: docker info
  5. 查询镜像: docker search 关键词
  6. 下载镜像: docker pull 镜像名字
  7. 验证是否成功: docker images
  8. 加载本地镜像源: docker load -i 文件路径
  9. 开启转发: echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
  10. 生效配置: sysctl -p
  11. 关闭防火墙: systemctl disable firewalld && systemctl stop firewalld
  12. 清空规则: iptables -F
  13. 重启docker生成转发规则: systemctl restart docker

二、镜像加速的方法
首先到网易云或者到阿里申请镜像加速地址
方法一: 写入配置文件

  1. 编辑配置文件: vim /etc/docker/daemon.json (如果有多个地址可以在用逗号隔开)

{
“registry-mirrors”: [“https://e9yneuy4.mirror.aliyuncs.com“]
}
注: 微软docker镜像国内地址: https://dockerhub.azk8s.cn

  1. 重启: systemctl restart docker
  2. 下载: docker pull 镜像名

方法二: 写入到docker启动脚本 (不推荐)

  1. 编辑配置文件: vim /usr/lib/systemd/system/docker.service

找到 ExecStart=/usr/bin/dockerd -H fd:// 在后面添加

  1. 重启: systemctl restart docker

三、基础常用命令
1. run运行
语法: docker run -it 镜像名:TAR标签 bash
退出容器: exit

  1. 后台长久执行命令

语法: docker run -d 镜像名 bash -c “执行命令”

  1. 读取日志,查看容器输出内容

语法: docker logs 容器name/ID

  1. 列出所有镜像进程:

docker ps -a (列出所有进程) docker ps (列出只在执行中的过程)

  1. 杀死一个进程:

docker kill 容器ID

  1. 启动,停止,重启

docker start 容器名 (运行实例) docker stop 容器名 (停止运行实例) docker restart 容器名 (重启容器名)

  1. 删除容器

docker rm 容器名 (如果有容器在运行,需要先停止容器)
docker rm -f 容器名 (强制删除容器,不管有没有容器在运行)

四、docker制作镜像的方法
方法一: docker commit(根据容器当前的状态,生成实例包)

  1. 运行一个实例: docker run -it 镜像名 bash
  2. 执行命令: yum -y install httpd 执行完后退出
  3. 查看当前镜像: docker images
  4. 查看容器进程: docker ps -a
  5. 生成镜像: docker commit 容器ID 新的镜像名字
  6. 验证: docker images
  7. 创建一个新的容器: docker run -it 新的镜像名 bash
  8. 进入到容器查询验证: rpm -qa | grep httpd

方法二: docker build (根据原来的镜像,使用dockerfile文件自动化制作image)

  1. 创建储存目录: mkdir /docker-bulid
  2. 编辑dockerfile文件: vim /docker-bulid/Dockerfile

FROM centos:latest # 以哪个镜像为基础
MAINTAINER yinzijian # 作者名字
RUN yum -y install httpd # 需要运行的命令
ADD start.sh /opt/start.sh # 添加的文件,前面是本地,后面是容器内路径,文件和目录拷贝到镜像中权限为0755
ADD template /var/www/html/index.html
CMD /opt/start.sh # 容器运行执行的命令,只能有一条,多条只会执行最后一条

  1. 编写httpd启动脚本: echo “/usr/sbin/httpd -DFOREGROUND” > start.sh
  2. 修改权限: chmod a+x start.sh
  3. 写入测试页面: echo “dockerfile test httpd” > template
  4. 制作镜像: docker build -t 新镜像名 dockerfile路径
  5. 查看是否成功: docker images

五、docker镜像发布
方法一: 保存在本地

  1. 保存镜像到本地: docker save -o 文件名.tar 实例名
  2. 保存并压缩的方法: docker save -o 文件名.tar 实例名 | gzip > 镜像名.tar.gz
  3. 导入本地镜像: docker load -i 镜像路径

方法二:
1、https://hub.docker.com/ 注册一个帐号
2、登录到dockerhup: docker login -u 用户名 -p 密码 -e 作者
3、上传镜像: docker push 镜像名
4、下载镜像: docker pull 用户名/镜像

六、映射容器端口
1. 清空规则: iptables -F
2. 重启docker: systemct restart docker
3. 启动容器: docker run -d -p 物理端口:容器端口 镜像名
4. 查看容器状态: docker ps
5. 验证端口: netstat -anutp | grep 端口
6. 访问正在运行的容器实例: docker exec -it 容器ID /bin/bash

七、docker容器命名和重命名
1. 创建时命名: docker -itd –-name 容器名 镜像名 执行命令
修改容器名: docker rename 旧名 新名
2. 创建容器时指定容器主机名: docker run -itd -h 主机名 镜像名 执行命令
3. docker开机自启: —restart=always
语法: docker run -itd —restart=always 镜像名 执行命令
docker容器的重启策略如下:
no,默认策略,在容器退出时丌重启容器
on-failure,在容器非正常退出时(退出状态非 0),才会重启容器
on-failure:3,在容器非正常退出时重启容器,最多重启 3 次 failure [ˈ ˈfeɪ ɪljə ə(r)] 失败
always,在容器退出时总是重启容器
unless-stopped,在容器退出时总是重启容器,但是丌考虑在 Docker 守护迚程启动时就已经停止了的容器
修改启动项: docker update –-restart=选项 容器名

八、容器配额之cpu
1. 给指定cpu分配权重: docker run -itd -c 权重 镜像名 命令
分配权重: -c / —cpu-shares
验证,在容器内: cat /sys/fs/cgroup/cpu/cpu.shares
2. 给容器分配指定cpu核数: docker run -itd —cpuset-cpus 核数 镜像名 命令
修改cpu亲和力: tastset -c 指定cpu -p 指定pid
taskset -cp 核数 进程pid
验证: cat /sys/fs/cgroup/cpuset/cpuset.cpus
3. 混合使用: docker run -itd -c 权重 —cpuset-cpus 核数 镜像 命令
4、 压力测试stress工具:
安装: yum -y install stress 需要epel源
-c 产生进程测试cpu -i 产生进程测试io读写 -m 产生进程测试内存 —timeout 指定时间
stress -c 2 -i 2 -m 2 -v —timeout 20s
5、指定cpu周期控制
—cpu-period 用来指容器对cpu使用,多长时间做一次重新分配 单位: 微秒
—cpu-quota 用来指定这个周期内,最多有多少时间片段来跑这个容器 单位:微秒
docker run -itd —cpu-period 1000000 —cpu-quota 200000 镜像名 命令
一秒钟只能使用cpu的0.2秒时间
6、 容器运行结束后自动释放资源:
docker run -itd -rm 镜像名 命令

九、容器配额之内存
1. 指定使用多少内存 -m
docker run -itd -m 内存大小 镜像名 命令

十、docker数据映射
1. 数据映射: -v
docker run -itd -v 本地路径: 容器路径 镜像名 命令

十一、容器配额之IO

  1. 读写速度

—device-write-bps 限制写速度 —device-read-bps 限制读速度
—device 设备映射
docker run -itd -device 本地设备:容器路径 —device-write-bps 容器设备:速度 —device-read-bps 容器设备:速度 镜像名 命令
容器内测试: time dd if=容器设备 of=指定文件 bs=块大小 count=次数 oflag=direct,nonblock
direct:读写数据采用直接 IO 方式,丌走缓存。直接从内存写硬盘上。
onblock:读写数据采用非阻塞 IO 方式,优先写 dd 命令的数据

十二、docker容器配置固定ip
docker的4种网络模式
host(沿用主机的ip和端口) container(指定和其他容器共用一个ip) none(不配置网络) bridge(连接docker0网卡自动分配ip)
1. 安装桥设备包: yum -y install bridge-utils
2. 切换到网卡目录: cd /etc/sysconfig/network-scripts/
3. 配置原有网卡: vim ifcfg-ens33
将原有配置网卡的ip,网关,子网掩码和dns删除,在最后一行写入BRIDGE=”br0”
4. 生产桥接设备br0的配置文件: vim ifcfg-br0
DEVICE=”br0”
NM_CONTROLLED=”yes”
ONBOOT=”yes”
TYPE=”Bridge”
BOOTPROTO=none
IPADDR=ip
NETMASK=子网掩码
GATEWAY=网关
DNS1=114.114.114.114
5. 重启网卡验证: systemctl restart network && ip addr
6. 将pipework包上传并解压: unzip pipework-master.zip -d 指定目录
7. 将解压后的脚本文件复制: cp pipework-master/pipework /usr/local/bin/
8. 使用静态ip启动一个镜像: docker run -itd —net=none —privileged=true centos bash —privileged=true 开启特权模式
9. 执行pip脚本: pipework 桥接网卡 容器id ip/子网掩码@网关
10. 到容器中验证: docker exec -it 容器id bash
11. 容器中安装验证: yum -y install net-tools && ifconfig
注意: 如果重启docker需要重启脚本

十三、创建docker私有化仓库
1. 下载镜像或上传: docker pull registry
docker load -I registry
2. 验证: docker images
3. 启用docker仓库镜像: docker run -itd -p 5000:5000 -v /docker-registry:/var/lib/registry registry
5000端口映射 镜像内存储文件:/var/lib/registry
4. 验证: docker ps
5. 私有仓库访问: http://ip:5000/v2/_catalog
6. 其他主机使用仓库: vim /etc/docker/daemon.json 写入: { “insecure-registries”: [ “192.168.1.63:5000” ] }
7. 重启: systemctl daemon-reload && systemctl restart docker
8. 下载一个镜像测试用: docker load -i busyboox 或者 docker pull busybox
9. 创建镜像连接: docker tag 镜像名:标签 私有仓库地址/新镜像名:标签
10. 验证: docker images
11. 传到私有仓库: docker push 新镜像名
12. 下载docker镜像: docker pull ip:5000/镜像名

十四、使用harbor创建docker私有仓库
1. 安装 docker-compose: curl -L https://github.com/docker/compose/releases/download/1.26.2/docker-compose-`uname -s-uname -m` > /usr/local/bin/docker-compose
2. 添加执行权限: chmod +x /usr/local/bin/docker-compose
3. 解压harbor: tar xf harbor-offline-installer-v1.5.0.tgz -C /opt/
4. 修改配置文件: vim /opt/harbor/harbor.cfg 改hostname为自己的地址,
5. 创建存储路径: mkdir /data
6. 执行脚本: /opt/harpor/prepare
7. 安装: /opt/harpor/prepare/install.sh
8. 安装后访问: http://ip/harbor/sign-in
9. 其他主机配置指向私有仓库: vim /etc/docker/daemon.json
{“insecure-registries”: [ “192.168.1.63” ]}
10.重启: systemctl daemon-reload && systemctl restart docker
11.登录: docker login ip
12.打包: docker tag 镜像名 ip/yinzijian/镜像名 # 在网页中可以复制
13.推送: docker push 镜像名
14.下载: docker pull 镜像名

kvm虚拟机

一、安装kvm虚拟机:
1. 查看自己机器是否支持虚拟化:
Intel:cat /proc/cpuinfo | grep —color vmx
AMD :cat /proc/cpuinfo | grep —color svm
2. 安装kvm模块、管理工具和libvirt: yum install qemu-kvm libvirt libguestfs-tools virt-install virt-manager libvirt-python -y
3. 开启虚拟化服务并开机启动: systemctl enable —now libvirtd
4. 验证是否成功: systemctl is-enabled libvirtd
5. 查看vm模块是否加载: lsmod | grep kvm
6. 查看语言环境: echo $LANG
7. 将语言设置成中文: LANG=’zh_CN.UTF-8’
8. 启动客户端: virt-manager
注意: 如果有xmanager可以在不装图形化的方法启动

二、配置KVM网络桥接功能
1. 安装桥设备工具: yum -y install bridge-utils
2. 备份网卡文件: cp /etc/sysconfig/network-scripts/ifcfg-ens33 /tmp/
3. 编辑网卡配置文件: vim /etc/sysconfig/network-scripts/ifcfg-ens33
删除ip,网关,子网掩码,DNS信息。在最后一行添加: BRIDGE=”br0”
4. 生成桥设备的配置文件:vim ifcfg-br0
DEVICE=”br0”
NM_CONTROLLED=”yes”
ONBOOT=”yes”
TYPE=”Bridge”
BOOTPROTO=none
IPADDR=192.168.1.63
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
5. 重启网卡: 来了
6. 查看桥接信息: brctl show

三、创建一台KVM虚拟机
1. 增加一块硬盘,直接格式化: mkfs.xfs /dev/sdb
2. 挂载虚拟机默认存放目录: mount /dev/sdb /var/lib/libvirt/images/
3. 把 centos7.4 镜像上传到/var/lib/libvirt/images/目录下
4.
云计算相关 - 图1
5.
云计算相关 - 图2
6.
云计算相关 - 图3
7.
云计算相关 - 图4
8.
云计算相关 - 图5
9.
云计算相关 - 图6
云计算相关 - 图7
10.
云计算相关 - 图8
11.
云计算相关 - 图9
12.
云计算相关 - 图10
13.常用命令:
virsh list # 列出正在运行的虚拟机
virsh start centos7.0 # 启动centos7.0虚拟机
virsh shutdown centos7.0 # 关闭虚拟机
virsh autostart centos7.0 # 设置为物理开机后自动启动

四、克隆KVM虚拟机
注: 克隆前需要提前关机
语法: virt-clone -o 原虚拟机 -n 虚拟机 -f 新虚拟机镜像存放地址
1. 克隆一个虚拟机: virt-clone -o centos7.0 -n yinzijian-kvm2 -f /var/lib/libvirt/images/yinzijian-kvm2.img
2. 查看虚拟机硬件配置: ll /etc/libvirt/qemu/

五、创建快照,管理快照
语法: virsh snapshot-create 虚拟机名字
1. 首先确认虚拟机磁盘格式,必须为qcow2: qemu-img info centos7.0.qcow2
2. 生成快照: virsh snapshot-create centos7.0.qcow2
3. 生成快照并取名: virsh snapshot-create-as centos7.0 httpd
4. 查看虚拟机快照列表: virsh snapshot-list centos7.0
5. 查看快照配置文件路径: ll /var/lib/libvirt/qemu/snapshot/centos7.0
6. 恢复快照(恢复虚拟机快照必须关闭虚拟机): virsh snapshot-current centos7.0 httpd
7. 删除快照: virsh snapshot-delete centos7.0 1619762866

六、虚拟机常用镜像格式对比
目前主流虚拟机的镜像格式: raw,cow,qcow,qcow2,vmdk
1. raw
raw镜像格式,用一个字来说就是裸,也就是赤裸裸,你随便 dd 一个 file 就模拟了一个 raw格式的镜像。由于裸的彻底,性能上来说的话还是丌错的。还有一个好处就转为其他格式的虚拟机镜像很简单,空间使用来看,这个很像磁盘,使用多少就是多少
2. cow、qcow、qcow2
cow格式: 还未成熟就被抛弃
qcow格式: 刚刚出现的时候有比较好的特性,但是性能和raw格式对比有很大差距
cqow2 格式: 主流虚拟化镜像格式,经过优化,目前qcow2的性能接近raw裸格式,qcow2 格式支持 snapshot,可以在镜像上做N多个快照
同时拥有以下优点: 更小的存储空间, 支持创建 image 镜像, 支持多个 snapshot,支持 zlib 的磁盘压缩, 支持 AES 的加密
3. vmdk
VMware 的格式,整体性能最好, 从性能和功能上来说,vmdk00应该算最出色的,

七、转换格式
语法: qemu -img convert -f 源镜像格式 -O 目标镜像格式 源镜像路径 新镜像路径
1. 转换:qemu-img convert -f qcow2 -O raw centos7.0.qcow2 centos7.0.raw
2. vmdlk转换为qcow2: qemu-img convert -f vmdk -O qcow2 source-name.vmdk target-name.qcow2
3. qcow2 转换为 vmdk: qemu-img convert -f qcow2 -O vmdk source-name.qcow2 target-name.vmdk

八、在命令行安装kvm虚拟机
1. 安装vnc远程客户端: yum install tigervnc
2. 安装远程客户端: yum install tigervnc virt-viewer -y
3. 命令行安装虚拟机命令:
virt-install 选项: virt-install —help
例子: virt-install —name centos-72 —ram 1024 —vcpus=1 —disk path=/var/lib/libvirt/images/centos-72.img,size=5 —accelerate —cdrom /var/lib/libvirt/images/CentOS-7.4-x86_64-DVD.iso —network bridge=br0 —graphics vnc
—name 指定名字 —ram 指定内存大小 —vcpus 指定cpu数量 —disk 指定磁盘存储文件路径 size 指定磁盘大小,单位是G — accelerate KVM或KQEMU内核加速器 —cdroom 指定镜像
—network 指定虚拟机的网卡模式

九、使用ks文件,自动安装
1. 安装http文件: yum install httpd -y
2. 启动httpd: systemctl start httpd
3. 导入ks文件
4. 根据ks文件导入路径: mount /dev/cdrom /var/www/html/centos7/
5. 将ks文件也导入到http网页目录中,并访问网页测试,是否能看到文件
6. virt-install —name centos7-74 —ram 1024 —vcpus=1 —disk path=/var/lib/libvirt/images/centos7-74.qcow2,size=13 —accelerate—location=http://192.168.1.63/centos/ —network bridge=br0 -x “ks=http://192.168.2.63/ks.cfg