Linux之Docker虚拟化技术(一)

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
相关推荐
qq_297075672 分钟前
网络安全测试(一)Kali Linux
linux·运维·服务器
仰望星空@脚踏实地1 小时前
maven scope 详解
java·maven·scope
M_Reus_111 小时前
Groovy集合常用简洁语法
java·开发语言·windows
带刺的坐椅1 小时前
10分钟带你体验 Solon 的状态机
java·solon·状态机·statemachine
小鹅叻1 小时前
MyBatis题
java·tomcat·mybatis
RainbowSea1 小时前
4. LangChain4j 模型参数配置超详细说明
java·langchain·ai编程
RainbowSea1 小时前
3. LangChain4j + 低阶 和 高阶 API的详细说明
java·llm·ai编程
叫我阿柒啊1 小时前
Java全栈开发面试实战:从基础到微服务的深度探索
java·spring boot·redis·微服务·vue3·全栈开发·面试技巧
ashane13141 小时前
Springboot 集成 TraceID
java·spring boot·spring
SunnyDays10111 小时前
Java PPT转多种图片格式:打造高质量的文档转换服务
java·ppt转图片·ppt转png·ppt转jpg·ppt转svg·ppt转tiff