1、KVM环境配置安装
2、KVM可视化管理工具
3、远程连接(VNC)
4、网络虚拟化技术(KVM虚拟机网络配置)
5、虚拟机快照
6、虚拟机迁移
前提:此处的 KVM 虚拟机迁移,是指在 KVM 所属虚拟机之间迁移 KVM,而非是在 KVM 内部迁移由 KVM 所创建的虚拟机
一、准备目标虚拟机(要迁移到的虚拟机)
- 使用 VMware 创建一台虚拟机(不是在 KVM 内创建虚拟机)
- 配置 KVM 环境:参考 “《1. KVM 安装、配置及虚拟机创建》” 中的 “一.1 ~ 一.9”
- 新建虚拟机存储盘目录:mkdir /opt/images
- 保持目标虚拟机开机状态
1、部署OpenStack
2、制作镜像
3、OpenStack存储
4、OpenStack网络模式
5、虚拟机迁移
0、Docker常用命令
(1)、基础命令
- 查看版本信息:docker version
- 查看系统信息:docker info
- 查看帮助命令:docker --help
- 卸载 Docker:
- 卸载依赖:yum remove docker-ce docker-ce-cli containerd.io
- 删除资源:rm -rf /var/lib/docker
- 重启 Docker:systemctl restart docker
(2)、镜像命令
- 查询本地已有镜像:docker images [参数]
- -q:显示ID。如:docker images -q
- -a:显示所有,与 docker images 效果相同。如:docker images -a
- 查询商店中相关软件:docker search
- 如:docker search mysql
- 下载镜像:docker pull [镜像名:版本号]
- 版本号可不加,不加的情况下默认下载最新版本
- 如:
- docker pull centos
- docker pull tomcat:9.0
- 删除镜像
- 删除多个镜像:docker rmi -f [镜像 ID 1] [镜像 ID 2] ...。如:docker rmi -f 127.0.0.1:5000/registry:latest
- 删除全部镜像:docker rmi -f $(docker images -qa)
- 给 Docker 镜像打标签:docker tag [镜像的原名称][:镜像版本] [镜像的新名称][:镜像版本]。如:docker tag ubuntu:latest myubuntu:v1.0
- 注:[:镜像的版本标签] 为可选项,不写时默认为 latest
- 标记本地镜像,将其归入某一仓库:docker tag [镜像名 / 镜像 ID] [主机名 / IP 地址]:[端口]/[镜像名]。如:将 ID 为 0030ba3d620c 的镜像标记为 0030ba3d620c 127.0.0.1:5000/registry:latest:docker tag 0030ba3d620c 127.0.0.1:5000/registry:latest
- 将本地的 Docker 镜像上传到 Docker 仓库:docker push [镜像标签]。如:docker push 127.0.0.1:5000/registry:latest
- 使用 Dockerfile 创建镜像(不要漏掉最后的 “.”):docker build [参数] [镜像名称][:镜像版本] .
- -f:指定要使用的 Dockerfile 路径。如:docker build -f /opt/nginx/Dockerfile .
- -t:指定镜像的名称和标签。如:docker build -t "genshin/nginx:v1" .
(3)、容器命令
PS:有了镜像才能创建容器
- 新建容器并启动:docker run [可选参数] [镜像名]
- --name=Name:容器名字
- --privileged=true:以 root 账户方式运行容器
- --restart:当容器停止运行后的处理逻辑
- always:容器在停止后总是重启。如:--restart=always
- on-failure:容器在停止后只有在前一次运行失败时才重启
- no:容器在停止后不重启
- -d:以后台方式运行
- 使用后台启动,就必须有一个前台进程,Docker 发现没有应用,就会自动停止。解决方法:使用 docker run -d -it centos /bin/bash 命令启动
- -e:设置环境的值。如:-e MYSQL_ROOT_PASSWORD=guojinchao:设置 MySQL 的 root 用户密码
- -i:以交互模式运行容器,通常与 -t 同时使用
- -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用
- -p(小写): 指定容器的端口
- -p 主机端口:容器端口
- 主机端口:外部访问端口,会与服务器中其他程序的端口冲突。如访问 Tomcat 的默认页面的端口
- 容器端口:启动的容器在 Docker 中运行的端口号,不会与服务器中其他程序的端口冲突,仅会与 Docker 中其他容器的端口冲突
- -p 容器端口
- -p 主机端口:容器端口
- -P(大写):随机指定端口
- -v [宿主机数据卷目录]:[Docker 容器内对应目录]:挂载数据卷,方便部署,让数据持久化
- 如:
- 运行 centos 操作系统镜像:docker run -it centos /bin/bash
- docker run --name=myTomcat -d -p 8080:8080 tomcat:9.0
- docker run -di --name=myTomcat -p 8080:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:9.0
- 启动 Registry 容器: docker run -d -p 5000:5000 --restart=always --name registry -v /data/docker-registry:/var/lib/registry registry:latest
- 如果在安装时指定了版本,在此处也必须指定版本,不然会重新下载最新版本
- 列出所有正在运行的容器:docker ps -a
- 无参数:查看正在运行的容器
- -a:查看曾经运行过的容器。注:如果遇到之前启动的容器忽然消失,重新新建容器提示名称已存在,启动容器提示无此名称,则可以用此参数进行查看
- -n=?:显示最近创建的容器
- -q:只显示容器的编号
- 进入当前正在运行的容器
- 进入容器并开启一个新终端:docker exec -it [容器 ID / 容器名称] /bin/bash。如:
docker exec -it myTomcat /bin/bash - 进入容器正在执行的终端:docker attach [容器 ID / 容器名称]
- 进入容器并开启一个新终端:docker exec -it [容器 ID / 容器名称] /bin/bash。如:
- 退出容器
- exit:容器停止并退出
- Ctrl + p + q:容器不停止退出(有时需要等一会)
- 删除容器:
- 删除指定的容器,容器正在运行则不能删除:docker rm [可选参数] [容器 ID / 容器名称]
- -f:强制删除(可删除运行中的容器)。如:docker rm -f ubuntu2
- -v:删除容器中的数据卷
- 删除所有容器:docker ps -a -q|xargs docker rm
- docker ps -a -q:列出所有容器的 ID
- xargs:会将上述容器的 ID 作为参数传递给 `docker rm` 命令
- 删除指定的容器,容器正在运行则不能删除:docker rm [可选参数] [容器 ID / 容器名称]
- 启动和停止容器的操作
- 启动容器:docker start [容器 ID / 容器名称]。如:
docker start myTomcat - 重启容器:docker restart [容器 ID / 容器名称]。如:
docker restart myTomcat - 停掉容器:docker stop [容器 ID / 容器名称]。如:
docker stop myTomcat - 杀掉容器:docker kill 容器ID
- 启动容器:docker start [容器 ID / 容器名称]。如:
- 查看日志:docker logs -tf --tail 10 [容器 ID / 容器名称]
- -tf:显示全部
- --tail number:显示指定条数
- 查看容器中进程信息:docker top [容器 ID / 容器名称]。如:docker top myTomcat
- 查看容器的配置信息:docker inspect [容器 ID / 容器名称]。如:docker inspect ubuntu1
- 查看容器的网络信息:docker inspect -f {{.NetworkSettings}} [容器 ID / 容器名称]。如:docker inspect -f {{.NetworkSettings}} ubuntu1
- 容器与主机间文件的互相复制
- 从容器内复制到主机:docker cp [容器 ID / 容器名称]:[容器内路径] [主机路径]。如:docker cp mysql:/etc/mysql/my.cnf /etc/
- 从主机复制到容器内:docker cp [主机路径] [容器 ID / 容器名称]:[容器内路径]。如:docker cp /etc/my.cnf mysql:/etc/mysql/
- 将容器内容导出为一个 tar 文件至服务器当前目录:docker export [容器 ID / 容器名称] > [文件完整目录.tar]。如:docker export b786ab1aed8c > /opt/ubuntu:v1.tar
- 重命名容器:docker rename [原容器 ID / 容器名称] [新容器名称]。如:docker rename ubuntu1 ubuntu2
- 查看容器的文件变更:docker diff [容器 ID / 容器名称]。如:docker diff ubuntu2
(4) 、在容器中修改文件
1、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镜像使用
3、Docker容器使用
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服务
1、DevOps安装、部署持续集成
二、安装 MySQL,配置数据库
参考 “”
五、安装 Tomcat
参考 “《在 Docker 上安装 Tomcat 容器》” 中的 “一、二”
2、安装部署Jenkins服务
1. 单节点部署
前提:
- CentOS 镜像版本:CentOS-7-x86_64-Minimal-2009.iso
一、安装环境准备
- 虚拟机配置最低要求
- CPU:4 核
- 内存:8 GB
- 磁盘:30 GB
- 配置虚拟化引擎(如果虚拟机处于运行状态,需要先关机):在左侧列表中,选中对应的虚拟机——右键——设置——在 “虚拟机设置” 弹窗中,选择 “硬件” 标签页——选中 “处理器”——在右侧的 “虚拟化引擎” 中勾选第一项 “虚拟化 Intel VT-x/EPT 或 AMD-V/RVI(V)”
- 配置 IP 地址
- 进入图形化界面进行配置:nmtui
- 重启网络服务:systemctl restart network
- 验证:ip a
- 安装 vim:yum install -y vim
- 修改主机名:hostnamectl set-hostname train。注:此步需重启,但可与后续操作一起,进行一次重启即可
- 验证:hostname
- 关闭防火墙
- 暂时关闭:systemctl stop firewalld
- 永久关闭:systemctl disable firewalld
- 验证:systemctl status firewalld
- 关闭 NetworkManager
- 暂时关闭:systemctl stop NetworkManager
- 永久关闭:systemctl disable NetworkManager
- 验证
- 查看服务状态:systemctl status NetworkManager
- ping 外网能通:ping www.baidu.com
- 关闭 SELinux
- 暂时关闭:setenforce 0
- 永久关闭:sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
- 验证:getenforce
- 建立 IP 地址映射:vim /etc/hosts。在末尾添加如下配置:
192.168.128.150 train
-
- 验证:ping train
- 拍摄快照:完成环境准备
二、网络源配置
- 将默认 yum 源替换为阿里源:curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
- 更新 yum 源:yum -y update
- 安装 OpenStack 源:yum install -y centos-release-openstack-train
- 修改为国内的阿里源:vim /etc/yum.repos.d/CentOS-OpenStack-train.repo
- 显示行号::set nu
- 删除第 8 行,替换为如下配置:
三、一键安装 OpenStack 系统
- 安装 packstack 软件包:yum install -y openstack-packstack
- 一键部署 packstack:packstack --allinone。成功安装结果如图:
- 验证:
- 访问仪表盘页面:http://[OpenStack 服务器 IP]/dashboard。如:http://192.168.128.150/dashboard。能正常打开即为成功。如图:
- 访问仪表盘页面:http://[OpenStack 服务器 IP]/dashboard。如:http://192.168.128.150/dashboard。能正常打开即为成功。如图: