虚拟化技术与应用(KVM、Docker、DevOps)

一、VMware虚拟化技术

二、KVM虚拟化技术

1、KVM环境配置安装

使用 VMware Workstation 新建一台 CentOS7 的虚拟机(硬盘默认 20G 即可),并进行网络配置
配置虚拟化引擎(如果虚拟机处于运行状态,需要先关机):在左侧列表中,选中对应的虚拟机——右键——设置——在 “虚拟机设置” 弹窗中,选择 “硬件” 标签页——选中 “处理器”——在右侧的 “虚拟化引擎” 中勾选第一项 “虚拟化 Intel VT-x/EPT 或 AMD-V/RVI(V)”。如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第1张图片
查看 CPU 是否支持虚拟化:cat /proc/cpuinfo | egrep 'vmx|svm'。找到 flags 部分,如果其中输出有 svm 或 vmx,表明 CPU 支持虚拟化技术。如图:
​ 
查看是否加载 KVM:lsmod | grep kvm
如果已加载,则结果如图:
​ 
如果没有加载,则执行命令:modprobe kvm
关闭防火墙
暂时关闭:systemctl stop firewalld
永久关闭:systemctl disable firewalld
关闭 SELinux
暂时关闭:setenforce 0
永久关闭:vim /etc/selinux/config
将 SELINUX=enforcing 改为 SELINUX=disabled
安装 KVM 相关软件包:yum install -y qemu-kvm qemu-img virt-manager libvirt libvirt-python virt-manager libvirt-client virt-install virt-viewer
启用 IP 路由转发功能
检查是否已启用 IP 路由转发功能:sysctl -a | grep "ip_forward"。如图:
 ​虚拟化技术与应用(KVM、Docker、DevOps)_第2张图片
如果 net.ipv4.ip_forward = 1,证明已启用
如果是其他结果,证明未启用,需执行以下命令:
修改系统内核参数:echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
重新加载系统内核参数的值:sysctl -p
启动 libvirt 
启动 libvirt:systemctl start libvirtd
设置开机自启动:systemctl enable libvirtd
新建目录
新建系统镜像目录:mkdir /opt/iso
新建虚拟机存储盘目录:mkdir /opt/images
验证:在 VMware Workstation 的虚拟机界面中,在终端中输入命令,进入图形化管理界面:virt-manager。如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第3张图片
注:如果使用 Xshell 执行此命令,会要求下载 Xmanager,而 Xmanager 是无免费版的,所以不采用此种方法。如图:

虚拟化技术与应用(KVM、Docker、DevOps)_第4张图片

2、KVM可视化管理工具

3、远程连接(VNC)

4、网络虚拟化技术(KVM虚拟机网络配置)

前提:在 KVM 所属的虚拟机内操作

一、常用命令
  1. 查询当前 QEMU-KVM 工具实现了哪些网卡的模拟:/usr/libexec/qemu-kvm -net nic,model=?
    1. 参数解释:
      1. -net nic:必需的参数,表明这是一个网卡的配置
      2. model:指定虚拟网卡的模型。model=? 表示指定虚拟网卡的模型为未知,即让 qemu-kvm 自动选择合适的网络设备模型
    2. 如图:
    3. 返回信息解释:
      1. rtl8139:QEMU-KVM​ 默认的模拟网卡类型
      2. e1000:提供 Intel e1000 系列的网卡模拟
      3. virtio:QEMU-KVM 对半虚拟化 IO “virto” 驱动的支持

二、配置 NAT 模式虚拟网络
  1. 考察 NAT 模式
    1. 在 “虚拟系统管理器” 的菜单栏中,选择 “编辑”——“连接详情”。然后选择 “虚拟网络” 标签页。在默认的 “default” 网络中,可看到如下配置:
      虚拟化技术与应用(KVM、Docker、DevOps)_第5张图片
      1. 其中,virbr0 是一个虚拟网桥,IP 为 192.168.122.1
    2. 查看当前网桥的配置信息:bridge link show。如图:
    3. 查看网桥 IP 地址:ip a。如图:​
      虚拟化技术与应用(KVM、Docker、DevOps)_第6张图片
  2. 创建 NAT 模式虚拟网络
    1. 在 “连接详情”​ 的 “虚拟网络” 标签页中,点击左下角的 “+” 按钮,创建虚拟网络。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第7张图片
    2. 在弹出的 “创建新的虚拟网络” 弹框中,进行如下配置
      1. 创建虚拟网络:4 的步骤 1
        1. 网络名称:自定义
      2. 创建虚拟网络:4 的步骤 2
        1. 勾选 “启用 IPv4 网络地址空间定义”
        2. 网络:自定义网段。不能与已有虚拟网络的网络重复
        3. 勾选 “启用 DHCPv4”
        4. 开始、结束:根据 “网络” 中设定的网段,自定义 DHCP 范围
        5. 如图:
          虚拟化技术与应用(KVM、Docker、DevOps)_第8张图片
      3. 创建虚拟网络:4 的步骤 3
        1. 不勾选 “启用 IPv6 网络地址空间定义”
      4. 创建虚拟网络:4 的步骤 4
        1. 选择 “转发到物理网络”
        2. 目的:物理设备 ens33
        3. 模式:NAT
        4. DNS 域名:可自定义,也可采用默认值
        5. 其他配置:采用默认值
        6. 如图:
          虚拟化技术与应用(KVM、Docker、DevOps)_第9张图片
    3. 点击 “完成” 按钮后,创建完成。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第10张图片

三、配置隔离模式虚拟网络
  1. 前期步骤参考 “二.2”​​
  2. 在 “创建虚拟网络:4 的步骤 4” 步骤中,配置如下
    1. 选择 “隔离的虚拟网络”
    2. DNS 域名:可自定义,也可采用默认值
    3. 其他配置:采用默认值
    4. 如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第11张图片
  3. 最终结果如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第12张图片

四、配置桥接模式虚拟网络
  1. 在 KVM 所属虚拟机上新增一个网络适配器(参考 “《VMware Workstation 使用》” 中的 “一.3”),模式选择 “仅主机模式”
  2. 查看 IP 信息:ip a。会发现多出一个 ens36 的网卡。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第13张图片
    1. 如果新网卡没有 IP 地址,则使用 nmtui 进入设置,勾选 “自动连接” 选项,然后重启网络
  3. 创建类型为 bridge 的连接:nmcli con add type bridge con-name br-test ifname br-test
    1. con-name:设置连接名称。此处为 br-test
    2. ifname:设置关联设备(网卡)。此处为 br-test,因 br-test 设备不存在,所以将同时创建一个名为 br-test 的虚拟设备
    3. 默认会设置该连接开机自动启动
  4. 为 br-test 连接添加一个类型为 bridge-slave 的从连接 br-test-slave1,并使其关联 ens36 网卡(此处网卡的名称,需根据上方 “三.2” 查询的结果而定):nmcli con add type bridge-slave con-name br-test-slave1 ifname ens36 master br-test
  5. 激活从连接:nmcli con up br-test-slave1
  6. 激活主连接:nmcli con up br-test
  7. 查看当前连接:nmcli con。如图:虚拟化技术与应用(KVM、Docker、DevOps)_第14张图片
  8. 再次查看 IP 信息:ip a。会发现 br-test 取代了 ens36 的 IP 地址配置

五、配置 KVM 所创建虚拟机网络(NAT 模式)
  1. 打开 “虚拟系统管理器”,双击对应的虚拟机。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第15张图片
  2. 配置网络源:进入对应虚拟机的详情窗口后,在上方的工具栏中,点击 “显示虚拟硬件详情” 按钮——在左侧菜单栏选择 “NIC:xxx”——在右侧的 “网络源” 中选择与 KVM 所属虚拟机一致的虚拟网络。如:KVM 所属虚拟机的网络为 NAT 模式,则此处也需选择 KVM 模式。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第16张图片
  3. 启动 KVM 所创建虚拟机:在虚拟机的详情窗口,点击工具栏上的 ”打开虚拟机“ 按钮(三角按钮),启动虚拟机
  4. 查看 IP 信息:ip a。如果 eth0 没有 IP 信息,则使用 nmtui 进入设置,勾选 “自动连接” 选项,然后重启网络
  5. 验证:“KVM 所属虚拟机” 与 “KVM 所创建虚拟机” 互 ping,都能 ping 通则证明网络配置成功

5、虚拟机快照

前提:在 KVM 所属的虚拟机内操作

一、虚拟机快照相关操作
  1. 查看虚拟机的磁盘文件:virsh domblklist [虚拟机名称]。如:virsh domblklist centos7.0。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第17张图片
    虚拟化技术与应用(KVM、Docker、DevOps)_第18张图片
    1. 可从 “源” 列中文件的后缀名看出磁盘格式
  2. 创建虚拟机快照:virsh snapshot-create-as [虚拟机名称] [快照名称]。如:virsh snapshot-create-as centos7.0 centos7.0_snapshot。如图:
    1. 注:[快照名称] 可以不写,如果不写,则快照名称随机生成。如:virsh snapshot-create-as centos7.0
  3. 查看虚拟机快照列表:virsh snapshot-list [虚拟机名称]。如:virsh snapshot-list centos7.0。如图:
  4. 查看当前虚拟机所用快照:virsh snapshot-current [虚拟机名称]。看 “.” 的值即可。如:virsh snapshot-current centos7.0。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第19张图片
  5. 恢复虚拟机快照
    1. 关闭虚拟机:virsh shutdown [虚拟机名称]。如:virsh shutdown centos7.0。如图:
    2. 确认虚拟机状态:virsh domstate [虚拟机名称]。确认已经处于 “关闭” 状态。如:virsh domstate centos7.0。如图:
    3. 执行恢复操作: virsh snapshot-revert [虚拟机名称] [快照名称]。如:virsh snapshot-revert centos7.0 centos7.0_snapshot
    4. 显示 KVM 所创建的所有虚拟机的信息:virsh list --all。如图:
    5. 验证:查看当前虚拟机所用快照:参考 “一.4”
  6. 删除虚拟机快照:virsh snapshot-delete [虚拟机名称] [快照名称]。如:virsh snapshot-delete centos7.0 centos7.0_snapshot。如图:

6、虚拟机迁移

前提:此处的 KVM 虚拟机迁移,是指在 KVM 所属虚拟机之间迁移 KVM,而非是在 KVM 内部迁移由 KVM 所创建的虚拟机

一、准备目标虚拟机(要迁移到的虚拟机)
  1. 使用 VMware 创建一台虚拟机(不是在 KVM 内创建虚拟机)
  2. 配置 KVM 环境:参考 “《1. KVM 安装、配置及虚拟机创建》” 中的 “一.1 ~ 一.9”
  3. 新建虚拟机存储盘目录:mkdir /opt/images
  4. 保持目标虚拟机开机状态

二、静态迁移
  1. 关闭源虚拟机:virsh shutdown centos7.0
  2. 确认源虚拟机状态:virsh domstate centos7.0。确认已经处于 “关闭” 状态
  3. 查看虚拟机的磁盘文件:virsh domblklist centos7.0
  4. 导出虚拟机配置文件:virsh dumpxml [虚拟机名称] > [完整的配置文件路径]。如:virsh dumpxml centos7.0 > /opt/test.xml
      1. 配置文件格式为 XML
      2. 配置文件无需提前创建
  5. 验证:cat /opt/test.xm
  6. 复制配置文件到目标虚拟机:scp /opt/test.xml 192.168.128.23:/opt
  7. 查看虚拟磁盘文件所在目录:virsh domblklist centos7.0。如图:
  8. 复制虚拟磁盘文件到目标虚拟机:scp /opt/images/centos7.0.qcow2 192.168.128.23:/opt/images

三、目标虚拟机配置
  1. 查看目标虚拟机环境:virsh list --all。如图:
  2. 确认虚拟机配置文件:ll /opt。可看到虚拟机配置文件。如图:
  3. 确认虚拟磁盘文件:ll /opt/images。可看到虚拟磁盘文件。如图:
  4. 定义并注册虚拟机:virsh define /opt/test.xml。如图:
  5. 启动 KVM 所创建的虚拟机:virsh start centos7.0。如图:
  6. 验证:再次查看目标虚拟机环境:virsh list --all。如图:

三、OpenStack中的KVM

1、部署OpenStack

2、制作镜像

3、OpenStack存储

4、OpenStack网络模式

5、虚拟机迁移

四、Docker虚拟化技术

0、Docker常用命令

(1)、基础命令
  1. 查看版本信息:docker version
  2. 查看系统信息:docker info
  3. 查看帮助命令:docker --help
  4. 卸载 Docker:
    1. 卸载依赖:yum remove docker-ce docker-ce-cli containerd.io
    2. 删除资源:rm -rf /var/lib/docker
  5. 重启 Docker:systemctl restart docker

(2)、镜像命令
  1. 查询本地已有镜像:docker images [参数]
    1. -q:显示ID。如:docker images -q
    2. -a:显示所有,与 docker images 效果相同。如:docker images -a
  2. 查询商店中相关软件:docker search
    1. 如:docker search mysql
  3. 下载镜像:docker pull [镜像名:版本号]
    1. 版本号可不加,不加的情况下默认下载最新版本
    2. 如:
      1. docker pull centos
      2. docker pull tomcat:9.0
  4. 删除镜像
    1. 删除多个镜像:docker rmi -f [镜像 ID 1] [镜像 ID 2] ...。如:docker rmi -f 127.0.0.1:5000/registry:latest
    2. 删除全部镜像:docker rmi -f $(docker images -qa)
  5. 给 Docker 镜像打标签:docker tag [镜像的原名称][:镜像版本] [镜像的新名称][:镜像版本]。如:docker tag ubuntu:latest myubuntu:v1.0
    1. 注:[:镜像的版本标签] 为可选项,不写时默认为 latest
    2. 标记本地镜像,将其归入某一仓库:docker tag [镜像名 / 镜像 ID] [主机名 / IP 地址]:[端口]/[镜像名]。如:将 ID 为 0030ba3d620c 的镜像标记为 0030ba3d620c 127.0.0.1:5000/registry:latest:docker tag 0030ba3d620c 127.0.0.1:5000/registry:latest
  6. 将本地的 Docker 镜像上传到 Docker 仓库:docker push [镜像标签]。如:docker push 127.0.0.1:5000/registry:latest
  7. 使用 Dockerfile 创建镜像(不要漏掉最后的 “.”):docker build [参数] [镜像名称][:镜像版本] .
    1. -f:指定要使用的 Dockerfile 路径。如:docker build -f /opt/nginx/Dockerfile .
    2. -t:指定镜像的名称和标签。如:docker build -t "genshin/nginx:v1" .

(3)、容器命令

PS:有了镜像才能创建容器

  1. 新建容器并启动:docker run [可选参数] [镜像名]
    1. --name=Name:容器名字
    2. --privileged=true:以 root 账户方式运行容器
    3. --restart:当容器停止运行后的处理逻辑
      1. always:容器在停止后总是重启。如:--restart=always
      2. on-failure:容器在停止后只有在前一次运行失败时才重启
      3. no:容器在停止后不重启
    4. -d:以后台方式运行
      1. 使用后台启动,就必须有一个前台进程,Docker 发现没有应用,就会自动停止。解决方法:使用 docker run -d -it centos /bin/bash 命令启动
    5. -e:设置环境的值。如:-e MYSQL_ROOT_PASSWORD=guojinchao:设置 MySQL 的 root 用户密码
    6. -i:以交互模式运行容器,通常与 -t 同时使用
    7. -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用
    8. -p(小写): 指定容器的端口
      1. -p 主机端口:容器端口
        1. 主机端口:外部访问端口,会与服务器中其他程序的端口冲突。如访问 Tomcat 的默认页面的端口
        2. 容器端口:启动的容器在 Docker 中运行的端口号,不会与服务器中其他程序的端口冲突,仅会与 Docker 中其他容器的端口冲突
      2. -p 容器端口
    9. -P(大写):随机指定端口
    10. -v [宿主机数据卷目录]:[Docker 容器内对应目录]:挂载数据卷,方便部署,让数据持久化
    11. 如:
      1. 运行 centos 操作系统镜像:docker run -it centos /bin/bash
      2. docker run --name=myTomcat -d -p 8080:8080 tomcat:9.0
      3. docker run -di --name=myTomcat -p 8080:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:9.0
      4. 启动 Registry 容器: docker run -d -p 5000:5000 --restart=always --name registry -v /data/docker-registry:/var/lib/registry registry:latest
    12. 如果在安装时指定了版本,在此处也必须指定版本,不然会重新下载最新版本
  2. 列出所有正在运行的容器:docker ps -a
    1. 无参数:查看正在运行的容器
    2. -a:查看曾经运行过的容器。注:如果遇到之前启动的容器忽然消失,重新新建容器提示名称已存在,启动容器提示无此名称,则可以用此参数进行查看
    3. -n=?:显示最近创建的容器
    4. -q:只显示容器的编号
  3. 进入当前正在运行的容器
    1. 进入容器并开启一个新终端:docker exec -it [容器 ID / 容器名称] /bin/bash。如:
      docker exec -it myTomcat /bin/bash​
    2. 进入容器正在执行的终端:docker attach [容器 ID / 容器名称]
  4. 退出容器
    1. exit:容器停止并退出
    2. Ctrl + p + q:容器不停止退出(有时需要等一会)
  5. 删除容器:
    1. 删除指定的容器,容器正在运行则不能删除:docker rm [可选参数] [容器 ID / 容器名称]
      1. -f:强制删除(可删除运行中的容器)。如:docker rm -f  ubuntu2
      2. -v:删除容器中的数据卷
    2. 删除所有容器:docker ps -a -q|xargs docker rm
      1. docker ps -a -q:列出所有容器的 ID
      2. xargs:会将上述容器的 ID 作为参数传递给 `docker rm` 命令
  6. 启动和停止容器的操作
    1. 启动容器:docker start [容器 ID / 容器名称]。如:
      ​docker start myTomcat
    2. 重启容器:docker restart [容器 ID / 容器名称]。如:
      ​docker restart myTomcat
    3. 停掉容器:docker stop [容器 ID / 容器名称]。如:
      docker stop myTomcat​
    4. 杀掉容器:docker kill 容器ID
  7. 查看日志:docker logs -tf --tail 10 [容器 ID / 容器名称]
    1. -tf:显示全部
    2. --tail number:显示指定条数
  8. 查看容器中进程信息:docker top [容器 ID / 容器名称]。如:docker top myTomcat
  9. 查看容器的配置信息:docker inspect [容器 ID / 容器名称]。如:docker inspect ubuntu1
    1. 查看容器的网络信息:docker inspect -f {{.NetworkSettings}} [容器 ID / 容器名称]。如:docker inspect -f {{.NetworkSettings}} ubuntu1
  10. 容器与主机间文件的互相复制
    1. 从容器内复制到主机:docker cp [容器 ID / 容器名称]:[容器内路径] [主机路径]。如:​docker cp mysql:/etc/mysql/my.cnf /etc/
    2. 从主机复制到容器内:docker cp [主机路径] [容器 ID / 容器名称]:[容器内路径]。如:​docker cp /etc/my.cnf mysql:/etc/mysql/
  11. 将容器内容导出为一个 tar 文件至服务器当前目录:docker export [容器 ID / 容器名称] > [文件完整目录.tar]。如:docker export b786ab1aed8c > /opt/ubuntu:v1.tar
  12. 重命名容器:docker rename [原容器 ID / 容器名称] [新容器名称]。如:docker rename ubuntu1 ubuntu2
  13. 查看容器的文件变更:docker diff [容器 ID / 容器名称]。如:docker diff ubuntu2
(4) 、在容器中修改文件

前提:使用 “三.3.1” 的命令进入容器后,因为默认没有安装 vi 和 vim 命令,所以无法修改文件

  1. 进入容器,更新软件包:apt-get update。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第20张图片

安装 vim 命令:apt-get install -y vim。如图:

虚拟化技术与应用(KVM、Docker、DevOps)_第21张图片

1、Docker的安装

一、安装 Docker
查看当前的内核版本(需要 3.10 版本及以上):uname -r
【非必须】更新 yum 包(如后续出现不兼容的情况再更新也可以):yum -y update
如果执行了此步,执行完成后,需重启服务器:reboot
【非必须】卸载旧版 Docker(如果之前没装过,就不需要执行此步):yum remove docker  docker-common docker-selinux docker-engine
安装需要的软件包:yum install -y yum-utils device-mapper-persistent-data lvm2
yum-util:提供 yum-config-manager 功能
device-mapper-persistent-data、lvm2:devicemapper 驱动依赖
设置阿里 yum 源:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看 Docker 可用版本:yum list docker-ce --showduplicates | sort -r
如图:
 ​虚拟化技术与应用(KVM、Docker、DevOps)_第22张图片
选择一个版本进行安装:yum install -y docker-ce-版本号
版本号为 “:“ 与 ”-“ 中间的部分,如第一个 3:23.0.1-1.el7,版本号为 23.0.1
如:yum -y install docker-ce-23.0.1
启动 Docker:systemctl start docker
设置开机自启动:systemctl enable docker
验证:
查看 Docker 状态:systemctl status docker。如图:

二、常见错误
问题:执行 Docker 命令时,报错 “docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql (3f2bbdbc27f3535c35b1f74b12b7e026dd3eb19d25aab213295b455bdc4fc37c):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.
​ (exit status 1)).”
问题原因:可能是在 Docker 运行期间修改了 IP 配置导致的
解决方法:重启 Docker:systemctl restart docker

2、Docker镜像使用

前提:以 ubuntu 镜像为例
一、相关操作
镜像下载、命名并上传到私有仓库
将镜像拉取到本地:docker pull ubuntu。如图:
​ 
查看本地已有镜像:docker images。如图:
​ 
给镜像打标签:docker tag c6b84b685f35 127.0.0.1:5000/ubuntu:latest
将镜像上传至私有仓库:docker push 127.0.0.1:5000/ubuntu:latest。如图:
​ 
注意仓库地址
在线查询镜像
查看 DNS 配置:cat /etc/resolv.conf。确认已配置正确的 DNS
在线查询 ubuntu 镜像:docker search ubuntu。如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第23张图片
修改镜像内容
新建容器并启动:docker run -itd 127.0.0.1:5000/ubuntu:latest
查看正在运行的容器:docker ps -a。如图:
​ 
进入容器并开启一个新终端:docker exec -it b786ab1aed8c /bin/bash。如图:
​ 
查看当前目录内容:ll。如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第24张图片
在 /opt 目录下创建 hello 文件:touch /opt/hello
查看 /opt 目录下的内容:ll /opt。如图:
​ 
退出并停止容器:exit。如图:
​ 

导出镜像
查看正在运行的容器:docker ps -a。如图:
​ 
导出镜像:docker export b786ab1aed8c > /opt/ubuntu:v1.tar
确认:ll /opt/。如图:
 

删除镜像
查看正在运行的容器:docker ps -a。如图:
​ 
停止要删除的镜像所启动的容器:docker stop b786ab1aed8c。如图:
 
查看本地已有镜像:docker images。如图:​
​ 
删除镜像:docker rmi -f c6b84b685f35。如图:
​ 
再次查看本地已有镜像:docker images。发现已没有上述两个镜像clear

3、Docker容器使用

前提:以 ubuntu 镜像为例
一、相关操作
运行容器
将镜像拉取到本地:docker pull ubuntu。如图:
​ 
查看本地已有镜像:docker images。如图:
​ 
给镜像打标签:docker tag c6b84b685f35 127.0.0.1:5000/ubuntu:latest
新建容器,命名为 ubuntu1 并启动:docker run -itd --name ubuntu1 127.0.0.1:5000/ubuntu:latest
查看正在运行的容器:docker ps -a。如图:
​ 
启动、停止、重启容器
停止容器:docker stop ubuntu1。如图:
 
查看正在运行的容器:docker ps -a。发现已没有名为 ubuntu1 的容器
启动容器:docker start ubuntu1。如图:
​ 
查看正在运行的容器:docker ps -a。如图:
​ 
重启容器: docker restart ubuntu1。如图:
​ 

连接容器
docker exec 方法进入
进入容器并开启一个新终端:docker exec -it ubuntu1 /bin/bash。如图:
​ ​
可在此终端进行常规操作
退出并停止容器:exit
docker attach 方法进入
进入容器:docker attach ubuntu1。如图:
​ 
可在此终端进行常规操作
退出并停止容器:exit
查看容器的配置信息:docker inspect ubuntu1。如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第25张图片
查看容器的网络信息:docker inspect -f {{.NetworkSettings}} ubuntu1。如图:
​ 
容器的打包:docker export ubuntu1 > ubuntu:v2.tar
重命名容器:docker rename ubuntu1 ubuntu2
查看容器的文件变更:docker diff ubuntu2。如图:
 
删除容器(可删除运行中的容器):docker rm -f  ubuntu2。如图:
​ ​

4、Docker管理平台

5、Docker上安装Tomcat容器

PS:以安装 Tomcat 9.0 为例
一、安装
拉取 Tomcat 镜像:docker pull tomcat:9.0
查看安装的 Tomcat 镜像:docker images
创建 Tomcat 挂载目录:mkdir -p /usr/local/webapps
授权挂载目录:chmod -R 777 /usr/local/webapps
启动 Tomcat 容器,并挂在数据卷:docker run -di --name=myTomcat -p 8080:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:9.0

二、配置以便访问首页
进入 Tomcat 容器:docker exec -it myTomcat /bin/bash
将 webapps.dist 目录中的内容复制到 webapps 目录中:cp -r webapps.dist/* webapps/
验证:在本地访问 Tomcat 首页:http://[IP]:[端口号]。如:http://192.168.128.10:8080

三、部署 War 包
将打包好的 War 包,上传到服务器的 /usr/local/webapps 目录下
验证:在本地访问项目首页:http://[IP]:[端口号]/[War 包名]。如:
​上传的 War 包为 car.war,则应访问的地址是 http://192.168.128.10:8080/car

6、Dockerfile服务

五、Docker DevOps

1、DevOps安装、部署持续集成

需已安装Docker
CentOS 版本:CentOS-7-x86_64-Minimal-2009.iso
一、安装 Gogs(自助 Git 服务),实现版本控制
安装 Docker:参考 “《Docker 安装》”
拉取 Gogs 镜像:docker pull gogs/gogs
查看本地镜像:docker images。如图:
​ 
创建挂载目录
创建 git 挂载目录:mkdir -p /opt/docker/gogs/git
创建 gogs 挂载目录:mkdir -p /opt/docker/gogs/gogs
创建 ssh 挂载目录:mkdir -p /opt/docker/gogs/ssh
授权挂载目录:chmod -R 777 /opt/docker/gogs
启动 Gogs 容器:docker run -d --name=gogs --privileged=true -p 10022:22 -p 3000:3000 -v /opt/docker/gogs:/data gogs/gogs
注:3000 接口的对外接口不能改为其他接口,否则重启虚拟机后启动 gogs 会出现 unhealthy 的问题
查看容器:docker ps -a
注:要等到 “STATUS” 列出现 “(healthy)” 标识时,才是启动完成
如图:
​​ ​​

二、安装 MySQL,配置数据库
参考 “《在 Docker 上安装 MySQL 容器》”

三、创建 Gogs 数据库
进入 MySQL 容器:docker exec -it mysql mysql -uroot -p。然后输入密码
创建 gogs 数据库:create database gogs character set utf8 collate utf8_general_ci;
查看数据库列表:show databases;。如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第26张图片
退出数据库:exit

四、配置 Gogs 服务
登录网页版 Gogs 服务:http://[Gogs 服务器 IP]:[Gogs 对外端口]/。如:http://192.168.128.90:3000/
安装 Gogs 服务:配置如下
数据库设置模块
数据库类型:MySQL
数据库主机:[MySQL 服务器 IP]:[MySQL 对外端口]。如:192.168.128.90:3316
数据库用户:root
数据库用户密码:root 密码 (可能出错)
数据库名称:gogs

应用基本设置
域名:[Gogs 服务器 IP]:[Gogs 对外端口]。如:192.168.128.90:3000
SSH 端口号:10022

应用 URL:http://[Gogs 服务器 IP]:[Gogs 对外端口]/。如:http://192.168.128.90:3000/
日志路径:/data/log

其他配置:采用默认配置
如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第27张图片
注册 Gogs 用户
点击 “立即安装” 按钮,会跳转到 Gogs 登录页,点击下方的 “还没账户?马上注册。” 选项。如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第28张图片
在注册页面中,填入相应信息,点击 “创建账户” 按钮。如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第29张图片
登录 Gogs:点击 “创建账户” 按钮后,会跳转到登录页面。输入刚注册的用户信息,勾选 “记住登录” 选项,点击 “登录” 按钮。如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第30张图片
创建仓库
登录到首页后,点击右侧 “我的仓库” 选项右侧的 “+” 按钮。如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第31张图片
创建新的仓库页:进行如下配置
仓库名称:自定义。如:testGit
其他配置:采用默认配置
如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第32张图片
查看仓库详情:点击 “创建仓库” 按钮,会跳转到仓库详情页。如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第33张图片
安装 git:yum install -y git
克隆刚创建的 Git 仓库到本地,构建私有仓库:
在网页端的仓库详情页中,复制仓库地址:在 “克隆当前仓库” 模块中,选择 “HTTP” 格式,点击右侧的 “复制链接” 按钮。如图:
​ 虚拟化技术与应用(KVM、Docker、DevOps)_第34张图片
执行克隆操作:git clone [HTTP 格式仓库地址]。如:http://192.168.128.90:3000/guojinchao/testGit.git。如图:
​ 
查看本地情况:ll。如图:

五、安装 Tomcat
参考 “《在 Docker 上安装 Tomcat 容器》” 中的 “一、二”

六、常见问题
问题:无法访问网页版 Gogs 服务
问题原因:查看 Docker 容器运行情况(docker ps -a),发现 Gogs 容器处于不健康状态(unhealthy)。如图:
​ 
问题排查:查看容器的配置信息(docker inspect gogs),查看其中的 “State” 中 ”Healthy“ 里的信息,发现是 curl 不通 3000 端口
解决方法:
停止并删除 Gogs 容器,重新启动,且 3000 端口的对外端口仍然使用 3000,不能使用其他端口
配置 Gogs 服务
参考 “四.1、四.2”
用之前注册的 Gogs 用户进行登录,无需重新注册
点击首页右上角的头像,在下拉列表中选择 “管理面板”。如图:
​ 
管理面板页:在左侧菜单中选择 “仓库管理”,在右侧的仓库列表中删除之前创建的仓库(已经都无法使用)。如图:
​ 
在弹出的提示框中,点击 “确认操作”。如图:
​ 

2、安装部署Jenkins服务

一、安装 Jenkins
  1. 拉取中文版的 Jenkins 镜像:docker pull jenkins/jenkins
    1. 注:如果下载卡住,则中止命令重新拉取镜像
  2. 创建 Jenkins 工作目录:mkdir -p /usr/local/jenkins
  3. 授权 Jenkins 工作目录:chmod 777 /usr/local/jenkins
  4. 启动容器:docker run -d -p 8099:8080 -p 50099:50000 -v /usr/local/jenkins:/var/jenkins_home --name myjenkins jenkins/jenkins
  5. 查看容器是否启动成功:docker ps -a。如图:
  6. 查看 Jenkins 容器日志:docker logs myjenkins。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第35张图片
  7. 关闭防火墙
    1. 暂时关闭:systemctl stop firewalld
    2. 永久关闭:systemctl disable firewalld
  8. 配置镜像加速
    1. 打开配置文件:vim /usr/local/jenkins/hudson.model.UpdateCenter.xml
    2. 将 url 替换为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    3. 如图:
  9. 重启 Jenkins 服务:docker restart myjenkins

二、启动 Jenkins 服务
  1. 查看 Jenkins 运行状态:打开浏览器,输入地址 “http://[Jenkins 所在服务器 IP]:[Jenkins 对外端口]”。如:http://192.168.128.90:8099。如图:
  2. 获取管理员密码:从  Jenkins 工作目录,根据 “二.1” 中页面中提示的地址,找到密码,输入到页面中
    1. 查看密码:cat /usr/local/jenkins/secrets/initialAdminPassword。如图:
    2. 将密码输入到 “解锁 Jenkins” 的页面中,点击 “继续” 按钮。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第36张图片
  3. 自定义 Jenkins 页
    1. 选择 “安装推荐的插件”。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第37张图片
    2. 等待插件安装:如果部分插件安装失败,可以点击 “重试” 按钮针对此部分插件进行重新安装。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第38张图片
  4. 创建第一个管理员用户页:进行如下配置
    1. Username:自定义。如:root
    2. Password、Confirm password:自定义
    3. Full name:自定义
    4. E-mail address:自定义
    5. 点击 “保存并完成” 按钮。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第39张图片
  5. 实例配置页:采用默认配置,直接点击 “保存并完成” 按钮。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第40张图片
  6. Jenkins 已就绪页:直接点击 “开始使用 Jenkins” 按钮。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第41张图片

三、配置 Jenkins 服务
  1. 进入 Jenkins 首页,点击左侧菜单中的 “Manage Jenkins”(系统管理)选项,在右侧页面的 “System Configuration”(系统配置)模块中,点击 “Tools”(全局工具配置)选项。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第42张图片
  2. 新增 JDK
    1. 查看 JDK 信息
      1. 进入 Jenkins 容器:docker exec -it myjenkins /bin/bash
      2. 查看 JDK 版本:java  -version。如图:
      3. 查看 JDK 安装位置: echo $JAVA_HOME。如图:
    2. 回到 Jenkins 的 Tools 页,点击 JDK 模块下的 “Add JDK” 按钮。在新出现的模块中,进行如下配置
      1. 别名:jdk17.0.8.1
      2. JAVA_HOME:/opt/java/openjdk
      3. 不勾选 “自动安装”
      4. 如图:
        虚拟化技术与应用(KVM、Docker、DevOps)_第43张图片
  3. 新增 Maven:需要等到创建 Maven 项目且进行构建才会真正下载安装
    1. 点击 “Maven” 模块(非 “Maven 配置” 模块)下的 “新增 Maven” 按钮。在新出现的模块中,进行如下配置
      1. Name:apache-maven-3.9.5
      2. 勾选 “自动安装”
      3. Version:3.9.5
      4. 点击下方的 “保存” 按钮。如图:
        虚拟化技术与应用(KVM、Docker、DevOps)_第44张图片
  4. 安装 Maven 插件
    1. 点击首页左侧菜单中的 “Manage Jenkins”(系统管理)选项,在右侧页面的 “System Configuration”(系统配置)模块中,点击 “Plugins”(插件管理)选项。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第45张图片
    2. 在 Plugin 页面中,在左侧菜单中选择 “Available plugins” 选项,在右侧页面的搜索框中输入 “maven”,在搜索结果中找到 “Maven Integration” 插件,勾选其复选框,点击右上方的 “安装” 按钮。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第46张图片
    3. 等待插件安装完成。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第47张图片
  5. 安装容器插件
    1. Maven 插件安装完成后,在 Plugin 页面中,在左侧菜单中选择 “Available plugins” 选项,在右侧页面的搜索框中输入 “deploy”,在搜索结果中找到 “Deploy to container” 插件,勾选其复选框,点击右上方的 “安装” 按钮。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第48张图片
    2. 等待插件安装完成
  6. 插件安装完成后,点击下方的 “安装完成后重启 Jenkins” 复选框,进行重启。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第49张图片
  7. 等待 Jenkins 重启完成(等待 1 分钟左右)。因 Docker 中的 Jenkins 容器无法实现自动重启,所以需要手动重启:docker restart myjenkins。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第50张图片
  8. 重启完成后,刷新页面,重新登录。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第51张图片
  9. 在 Plugin 页面中,点击右侧页面的 “返回首页” 选项。如图:

虚拟化技术与应用(KVM、Docker、DevOps)_第52张图片

3、创建Maven项目

一、创建新 Maven 项目
  1. 新建项目
    1. 进入 Jenkins 首页,在左侧菜单中点击  “新建任务” 选项。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第53张图片
    2. 在新建页面中,进行如下配置
      1. 输入一个任务名称:qcloud
      2. 选择下方列表中的 “构建一个 maven 项目” 选项
      3. 点击 “确定” 按钮
      4. 如图:
        虚拟化技术与应用(KVM、Docker、DevOps)_第54张图片
  2. 源码管理:在 Configure 页中,点击左侧菜单中的 “源码管理” 选项,在右侧页面中,选择 “Git” 选项,在新出现的模块中,进行如下配置
    1. Repositories 模块
      1. Repository URL:“《1. DevOps 安装、部署持续集成》” 中 “四.8.1” 的 Git 地址。如:http://192.168.128.90:3000/guojinchao/testGit.git
      2. Credentials:点击下方的 “添加” 按钮,在下拉列表中选择 “Jenkins” 选项。如图:
        虚拟化技术与应用(KVM、Docker、DevOps)_第55张图片
      3. 在弹出的 “Jenkins 凭据提供者:Jenkins” 弹框中,进行如下配置
        1. 用户名:“《1. DevOps 安装、部署持续集成》” 中 “四.3” 注册的用户名
        2. 密码:“《1. DevOps 安装、部署持续集成》” 中 “四.3” 注册的密码
        3. 描述:Gogs
        4. 其余选项:采用默认配置
        5. 点击左下方的 “添加” 按钮。如图:
          虚拟化技术与应用(KVM、Docker、DevOps)_第56张图片
      4. 返回源码管理页后,在 “Credentials” 下方的下拉列表中,选择刚添加的账号
    2. 其余选项:采用默认配置
    3. 如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第57张图片
  3. Build:点击左侧菜单中的 “Build” 选项,进行如下配置
    1. Root POM:course-maven/pom.xml
    2. Goals and options:clean install
    3. 点击下方的 “保存” 按钮。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第58张图片
  4. 安装 Maven
    1. 进入 Maven project qcloud 页后,点击左侧菜单的 “立即构建” 选项,可在左下方看到一个构建记录,鼠标指向构建记录的日期,会在其右侧出现一个箭头图标,点击箭头图标,在下拉列表中选择 “控制台输入”。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第59张图片
    2. 在控制台输出页,可看到安装进度。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第60张图片
    3. 等待 Maven 安装完成。如图:
  5. 配置 Maven 本地仓库
    1. 将教材提供的压缩包 course-maven.tar.gz、maven-repository.zip 上传至 Docker Devops 虚拟机的 /opt 目录下
    2. 将 course-maven.tar.gz 解压到 “《1. DevOps 安装、部署持续集成》” 中 “四.8” 的本地 Git 仓库中:tar -zvxf /opt/course-maven.tar.gz -C /root/testGit/
    3. 将 maven-repository.zip 解压到当前目录(/opt 目录):
      1. 安装 unzip 工具:yum install -y unzip
      2. 解压缩:unzip /opt/maven-repository.zip -d /usr/local/jenkins/
      3. 授权目录:chmod -R 777 /usr/local/jenkins/maven-repository
    4. 修改 Maven 配置文件(需安装完 Maven):vim /usr/local/jenkins/tools/hudson.tasks.Maven_MavenInstallation/apache-maven-3.9.5/conf/settings.xml。进行如下改动
      1. 显示行号::set nu
      2. 跳转到第 55 行::55
        1. 加入配置:/var/jenkins_home/maven-repository
        2. 如图:
          虚拟化技术与应用(KVM、Docker、DevOps)_第61张图片
      3. 跳转到第 160 行::160
        1. 将第 160 ~ 166 行替换为如下配置:


    alimaven
    aliyun maven
    http://maven.aliyun.com/nexus/content/groups/public/
    central        

        1. 替换前如图:
          虚拟化技术与应用(KVM、Docker、DevOps)_第62张图片
        2. 替换后如图:
          虚拟化技术与应用(KVM、Docker、DevOps)_第63张图片
  1. 将 Maven 项目代码推送到私有仓库
    1. 进入本地 Git 仓库:cd /root/testGit/
    2. 将当前目录初始化为本地 Git 仓库:git init
    3. 将 Maven 项目添加到暂存区:git add course-maven/
    4. 全局设置电子邮件地址(电子邮件地址可自定义):git config --global user.email "[email protected]"
    5. 全局设置用户名(用户名可自定义,无需跟之前注册的 Gogs 用户一致):git config --global user.name "guojinchao"
    6. 提交暂存区中添加的更改到本地 Git 仓库:git commit -am "新增 course-maven 项目"
      1. -am:正在使用交互式模式提交更改。在这种模式下,Git 将提示输入提交信息,并将其设置为提供的字符串
      2. "新增 course-maven 项目":本次提交的内容描述
    7. 添加一个新的远程仓库 origin 到本地仓库中:git remote add origin http://192.168.128.90:3000/guojinchao/testGit.git。如图:
    8. 将本地仓库中的更改推送到远程仓库 origin 的 master 分支:git push -u origin master
      1. 执行命令后,会要求输入 Username(用户名)和 Password(密码),输入 Username 时会有一个显示错位的问题,不用管,继续输入即可,输入完成后回车,完成推送
      2. 如图:
        虚拟化技术与应用(KVM、Docker、DevOps)_第64张图片
  2. 验证:登录网页版 Gogs 服务,进入 testGit 仓库,可在 master 分支中看到刚才上传的内容。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第65张图片

二、部署应用程序
  1. 创建数据库
    1. 在 Docker 的 MySQL 容器中执行建表语句:docker exec -i mysql mysql -uroot -pguojinchao -e "create database course;"。如图:
    2. 将将教材提供的 SQL 文件 course.sql 上传至 Docker Devops 虚拟机的 /opt 目录下
    3. 在 Docker 的 MySQL 容器中导入 SQL 文件:docker exec -i mysql mysql -uroot -pguojinchao course < /opt/course.sql。如图:
  2. 验证
    1. 进入 MySQL 容器:docker exec -it mysql /usr/bin/mysql -uroot -p。然后输入密码
    2. 查看数据库列表:show databases;。可看到刚创建的数据库。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第66张图片
    3. 切换数据库:use course;
    4. 查看数据库表:show tables;。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第67张图片
  3. 修改项目的数据库连接并提交代码至远程 Git 仓库
    1. 打开项目数据库配置文件
      1. 进入配置文件目录:cd /root/testGit/course-maven/src/main/resources/
      2. 打开配置文件:vim jdbc.properties
    2. 进行如下修改
      1. database.url:将值中的 IP 和端口改为 “《1. DevOps 安装、部署持续集成》” 中 “二.3” 里的配置。如:192.168.128.90:3316
      2. database.password:改为自己 MySQL 的 root 密码
      3. 其余内容不变
      4. 如图:
        虚拟化技术与应用(KVM、Docker、DevOps)_第68张图片
    3. 将配置文件添加到暂存区:git add jdbc.properties
    4. 提交暂存区中添加的更改到本地仓库:git commit -m "修改数据库连接"
    5. 将本地仓库中的更改推送到远程仓库 origin 的 master 分支:git push -u origin master
      1. 执行命令后,会要求输入 Username(用户名)和 Password(密码),,输入完成后回车,完成推送
      2. 如图:
        虚拟化技术与应用(KVM、Docker、DevOps)_第69张图片
  4. 构建系统
    1. 在 Jenkins 首页,点击右侧页面列表中的 “qcloud”。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第70张图片
    2. ​进入 Maven project qcloud 页后,点击左侧菜单的 “立即构建” 选项,可在左下方看到一个构建记录,鼠标指向构建记录的日期,会在其右侧出现一个箭头图标,点击箭头图标,在下拉列表中选择 “控制台输出”。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第71张图片
    3. 进入 “控制台输出” 页后,可看到项目详细的构建过程。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第72张图片
    4. 将页面拉到最底下,一直等待出现 “Finished: SUCCESS” 结果后,才算是构建成功。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第73张图片
    5. 构建成功后,会将项目打包成 War 包,所在位置为:/usr/local/jenkins/workspace/qcloud/course-maven/target/ROOT.war
  5. 将项目的 War 包复制到 Tomcat 的挂载目录中:cp /usr/local/jenkins/workspace/qcloud/course-maven/target/ROOT.war /usr/local/webapps
  6. 访问系统地址:http://192.168.128.90:8080/。如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第74张图片

六、OpenStack单机版

1. 单节点部署

前提:

  1. CentOS 镜像版本:CentOS-7-x86_64-Minimal-2009.iso

一、安装环境准备

  1. 虚拟机配置最低要求
    1. CPU:4 核
    2. 内存:8 GB
    3. 磁盘:30 GB
  2. 配置虚拟化引擎(如果虚拟机处于运行状态,需要先关机):在左侧列表中,选中对应的虚拟机——右键——设置——在 “虚拟机设置” 弹窗中,选择 “硬件” 标签页——选中 “处理器”——在右侧的 “虚拟化引擎” 中勾选第一项 “虚拟化 Intel VT-x/EPT 或 AMD-V/RVI(V)”
  3. 配置 IP 地址
    1. 进入图形化界面进行配置:nmtui
    2. 重启网络服务:systemctl restart network
    3. 验证:ip a
  4. 安装 vim:yum install -y vim
  5. 修改主机名:hostnamectl set-hostname train。注:此步需重启,但可与后续操作一起,进行一次重启即可
    1. 验证:hostname
  6. 关闭防火墙
    1. 暂时关闭:systemctl stop firewalld
    2. 永久关闭:systemctl disable firewalld
    3. 验证:systemctl status firewalld
  7. 关闭 NetworkManager
    1. 暂时关闭:systemctl stop NetworkManager
    2. 永久关闭:systemctl disable NetworkManager
    3. 验证
      1. 查看服务状态:systemctl status NetworkManager
      2. ping 外网能通:ping www.baidu.com
  8. 关闭 SELinux
    1. 暂时关闭:setenforce 0
    2. 永久关闭:sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    3. 验证:getenforce
  9. 建立 IP 地址映射:vim /etc/hosts。在末尾添加如下配置:

192.168.128.150 train

    1. 验证:ping train
  1. 拍摄快照:完成环境准备

二、网络源配置

  1. 将默认 yum 源替换为阿里源:curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  2. 更新 yum 源:yum -y update
  3. 安装 OpenStack 源:yum install -y centos-release-openstack-train
  4. 修改为国内的阿里源:vim /etc/yum.repos.d/CentOS-OpenStack-train.repo
    1. 显示行号::set nu
    2. 删除第 8 行,替换为如下配置:

baseurl=http://mirrors.aliyun.com/$contentdir/$releasever/cloud/$basearch/openstack-train/

    1. 注释第 9 行
    2. 如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第75张图片
  1. 更新 yum 缓存
    1. 删除所有已下载的软件包和元数据缓存:yum clean all
    2. 生成缓存:yum makecache
    3. 列出所有可用的 yum 软件源:yum repolist。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第76张图片
  2. 重启系统:reboot
  3. 拍摄快照:完成 OpenStack 环境搭建

三、一键安装 OpenStack 系统

  1. 安装 packstack 软件包:yum install -y openstack-packstack
  2. 一键部署 packstack:packstack --allinone。成功安装结果如图:
    虚拟化技术与应用(KVM、Docker、DevOps)_第77张图片
  3. 验证:
    1. 访问仪表盘页面:http://[OpenStack 服务器 IP]/dashboard。如:http://192.168.128.150/dashboard。能正常打开即为成功。如图:
      虚拟化技术与应用(KVM、Docker、DevOps)_第78张图片

四、常见问题

  1. 问题:一键部署 packstack 时,报错 “ERROR : Error appeared during Puppet run: 192.168.128.150_controller.pp。Error: ...”。如图(其他类似报错也同样有效):虚拟化技术与应用(KVM、Docker、DevOps)_第79张图片
    1. 问题原因:可能是因为没有更新 yum 源导致的(未验证)
    2. 解决方法:yum -y update

你可能感兴趣的:(centos,运维)