1.Docker虚拟化概念
- 虚拟化技术主要是将物理资源转变为逻辑上可以管理资源,让计算机原件运行中虚拟资源上
- 通过虚拟化技术可以将物理生成的虚拟机、应用程序、软件服务(Nginx、Mysql、Redis、Tomcat、keepalived、zabbix)运行在虚拟机上
2.虚拟化技术意义
虚拟化技术主要是为了最大程度利用高配物理资源、提高资源利用率,还可以对软件服务、进程资源进行隔离、限制,虚拟机和虚拟机之间是相互独立的。同时还可以动态分配资源、实现扩缩容,可以整合资源,提高运维效率
3.虚拟化技术种类
vmwarEesxi、xen、kvm、hyper-v、docker
Docker虚拟化技术是众多企业使用的虚拟化技术,其特点:轻量级、高性能、安全、稳定,主要是解决轻量级应用和应用容器而诞生的
4.传统虚拟化vsDocker虚拟化
- 传统虚拟化结构
Server硬件设备资源->Host OS宿主机系统->虚拟化软件(vmware)部署->Guest OS虚拟机-->Libs/APP应用

- Docker虚拟化结构
Server硬件设备资源->Host OS宿主机系统->虚拟化软件Docker->部署Libs/APP应用

基于openeuler 22.x系统二进制tar包安装docker软件
# 上传docker二进制包
[root@localhost ~]# rz -y
# 查看是否安装成功
[root@localhost ~]# ls -l docker-24.0.6.tgz
-rw-r--r-- 1 root root 69797795 Aug 18 2025 docker-24.0.6.tgz
# 解压缩docker软件包
[root@localhost ~]# tar -zxf docker-24.0.6.tgz
# 进入docker目录
cd docker/
# 创建目标目录
[root@localhost docker]# mkdir /usr/local/docker
# 拷贝至docker目录到当前目录
[root@localhost docker]# cp * /usr/local/docker/
# 将docker目录加入docker组
groupadd docker
chgrp docker /usr/local/docker/*
# 将docker目录加入环境变量
echo "PATH=\$PATH:/usr/local/docker">> /etc/pro# 生效环境变量
source /etc/pro# 启动docker程序
nohup /usr/local/docker/dockerd -H 0.0.0.0:2375 -H unix:///var/run/docker.sock &
# 检查docker是否已经启动
ps -ef | grep docker
root 2459 2018 0 23:57 pts/1 00:00:00 /usr/local/docker/dockerd -H 0.0.0.0:2375 -H
unix:///var/run/docker.sock
root 2469 2018 0 23:58 pts/1 00:00:00 grep --color=auto docker
# 创建docker配置文件目录安装成功效果如下
安装docker服务
# mkdir /etc/docker
# 创建docker镜像源配置(重启镜像)
sudo sh -c 'cat >/etc/docker/daemon.json<<EOF
{
"registry-mirrors": ["https://docker.m.daocloud.io"]
}
EOF'
至此完成安装

5.Docker构架NginxWeb容器
通过Docker虚拟化平台创建一套Nginx容器(服务,轻量级容器),对外监听80端口
## 拉取镜像
docker pull nginx:latest
# 导入镜像(二选一进行导入)
docker load -i docker-nginx.tar
# 基于nginx镜像创建nginx容器,要求启动容器开放80端口
docker run -itd --name=jfedu-web01 -p 80:80 --privileged nginx:latest
创建容器操作命令解释
run 全新创建容器 & 运行容器
-i intractive打开交互模式
-t tty 打开登录终端
-d detach 后台启动
--name 指定容器
-p publish 发布端口 将宿主机端口映射到容器端口(DNAT)
-- privliged 超级特权访问
-v volume目录映射
-e,env设置环境变量
获取容器的IP地址
for i in $( docker ps | grep -aiE nginx | awk '{print $1}');do docker inspect $i | grep -aiE ipaddr | tail -1| grep -aiowE "([0-9]{1,3}\.){3}[0-9]{1,3}";done

用户通过浏览器访问Docker宿主机的IP: 192.168.101.5+80端口访问的是容器的IP 172.17.0.2+80(DNAT映射)
如果想要创建100台nginx容器,将100台机器IP地址写到excel文件
## 删除所有容器
docker ps -aq| xargs docker rm -f
## 创建100台容器
for i in $(seq 0 99);do docker run -itd --name=vm$i -p 80$i:80 --privileged nginx:latest;done
## 写入到excel格式
[root@localhost ~]# for i in $( docker ps | grep -aiE nginx | awk '{print $1}');do echo $i;docker inspect $i | grep -aiE ipaddr | tail -1| grep -aiowE "([0-9]{1,3}\.){3}[0-9]{1,3}";done|sed 'N;s/\n/ /g' | awk '{print NR,$0 "2C 4G 40GB"}'| sed 's/ /,/g' > a.csv

6.docker Nginx程序发布网站
基于docker cp完成网站上传和部署
# 查看容器ID或名称
docker ps| grep -aiE nginx| awk '{print $1}'
# 进入容器
docker exec -it $(docker ps| grep -aiE nginx| awk '{print $1}') /bin/bash
## 查找nginx主配置文件
find / -name nginx.conf
## 匹配nginx配制文件root
grep -aiE "root" /etc/nginx/nginx.conf
## 获取到容器发布目录
grep -aiE "root" /etc/nginx/conf.d/default.conf | grep -aivE "#"| awk 'NR==1 {print $2}'| sed 's/;//g'
## 退出容器内部,进入docker宿主机
exit
## 上传网站代码
ls -l a.tar
## 将网站拷贝到nginx容器内部
docker cp a.tar $(docker ps| grep -aiE nginx| awk '{print $1}' ):/usr/share/nginx/html/
## 将网站程序解压到容器发布目录
docker exec $(docker ps| grep -aiE nginx| awk '{print $1}' ) tar -xzf /usr/share/nginx/html/a.tar -C /usr/share/nginx/html/
## 修改nginx容器虚拟主机配置文件,加入rewrite规则(需进入容器修改)
rewrite ^/$ /a/ last;
sed -i '/server_name/arewrite ^/$ /taobao_web/ last' default.conf
## 重启nginx服务
nginx -s reload
用户通过访问Docker宿主机的IP和80端口即可访问容器所在的80端口
由于如上步骤过于繁琐,因此基于-v映射完成挂载
[root@localhost ~]# docker run -itd -v /data/webapp/www:/usr/share/nginx/html --name=vm01 -p 80:80 --privileged nginx:latest