Boot2Docker(五)| 搭建ubuntu或centos环境


Docker(五)| 搭建ubuntu或centos环境


相关文章

其实每个镜像运行后都是一个liunx系统,将文件拷贝进容器的操作,在redis、mysql等镜像运行后的容器中都可以,希望大家不要搞混


一、查看docker官方仓库版本

ubuntu docker官方仓库:https://hub.docker.com/_/ubuntu?tab=tags 查看版本,再指定版本拉取
centos docker官方仓库:https://hub.docker.com/_/centos?tab=tags 查看版本,再指定版本拉取

以下以ubuntu为例,centos可以自己试一下

在这里插入图片描述


二、下载并创建容器

可以先docker pull ubuntu下载,再运行下面的命令,或者直接运行也可以,下面的命令会自动去寻找对应的版本并下载

命令:docker run -d -it --name vmtest ubuntu:19.10

  • -d:守护进程
  • -it:可以单独写,也可以合起来写。-t:在新容器内指定一个伪终端或终端。-i:允许你对容器内的标准输入 (STDIN) 进行交互。
  • vmtest:自己指定的容器名称

在这里插入图片描述


ubuntu上创建data文件夹,拿来放自己的东西,后面的文章会用到
在这里插入图片描述


退出ubuntu容器,使用exit命令退出后会自动停止这个容器
在这里插入图片描述

如果要退出容器并且不停止容器运行,使用Ctrl+P+Q即可

可以看到已经没有运行的容器了
在这里插入图片描述


重新进入名称为vmtestubuntu容器

  • 使用命令:docker start vmtest启动名称为vmtestubuntu容器
  • 使用命令:docker attach vmtest进入ubuntu容器

在这里插入图片描述


三、注意事项

1. 如果要退出容器并且不停止容器运行,使用Ctrl+P+Q即可。使用exit会退出容器并停止容器运行
2. 但是使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的 时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作 了。下面推荐nsenter 命令,参考博客:https://blog.youkuaiyun.com/qq_39629343/article/details/80170164


nsenter 使用注意:

在这里插入图片描述


下一篇:Docker(六)上传本地文件到容器.

欢迎关注公众号:慌途L
后面会慢慢将文章迁移至公众号,也是方便在没有电脑的情况下可以进行翻阅,更新的话会两边同时更新,大家不用担心!
在这里插入图片描述


<think>我们正在为一个高并发的电商网站搭建运行环境,目标日访问量1000万,QPS2000。技术栈包括Docker、MySQL、Redis和Ruoyi-Vue(一个基于SpringBoot+Vue的前后端分离框架)。我们将从以下几个方面展开:1.操作系统版本选择2.高并发环境配置(包括网络、内核参数等)3.Docker环境搭建4.编程语言运行环境搭建(Java/SpringBoot)5.数据库(MySQL)和缓存(Redis)环境搭建由于是高并发场景,我们需要考虑集群部署、负载均衡、数据库主从复制、缓存集群等。###1.操作系统版本选择选择稳定且性能良好的Linux发行版,例如:-**Ubuntu20.04LTS****CentOS7/8**(CentOS8已停止维护,可考虑迁移到RockyLinuxAlmaLinux)理由:长期支持版本,社区支持好,对Docker和现代硬件支持良好。###2.高并发环境配置针对高并发,需要对操作系统和网络进行优化:-**文件描述符限制**:增加系统级和用户级的文件描述符数量限制。```bash#修改/etc/security/limits.conf*softnofile65535*hardnofile65535```-**网络优化**:调整内核参数,修改`/etc/sysctl.conf`:```bashnet.core.somaxconn=65535net.ipv4.tcp_max_syn_backlog=65535net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=0#在NAT环境下建议关闭net.ipv4.ip_local_port_range=102465535net.ipv4.tcp_fin_timeout=30net.ipv4.tcp_max_tw_buckets=2000000```执行`sysctl-p`生效。-**关闭swap**:避免内存交换影响性能(根据实际情况,如果内存足够大,可以关闭):```bashswapoff-a#并修改/etc/fstab,注释掉swap行```###3.Docker环境搭建使用Docker可以方便部署和扩展。安装最新稳定版Docker:```bash#Ubuntusudoaptupdatesudoaptinstalldocker.iosudosystemctlenable--nowdocker#CentOS/RockyLinuxsudoyuminstall-yyum-utilssudoyum-config-manager--add-repohttps://download.docker.com/linux/centos/docker-ce.reposudoyuminstalldocker-cedocker-ce-clicontainerd.iosudosystemctlenable--nowdocker```配置Docker:-修改存储驱动为`overlay2`(默认通常是)。-调整Docker守护进程的并发连接数:在`/etc/docker/daemon.json`中添加:```json{"default-ulimits":{"nofile":{"Name":"nofile","Hard":65535,"Soft":65535}}}```重启Docker:`sudosystemctlrestartdocker`###4.编程语言运行环境搭建Ruoyi-Vue后端基于SpringBoot(Java),因此需要安装Java环境。推荐使用OpenJDK1117(LTS版本):```bash#Ubuntusudoaptinstallopenjdk-11-jdk#CentOS/RockyLinuxsudoyuminstalljava-11-openjdk-devel```配置环境变量(如果未自动配置):```bashexportJAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64#路径可能不同,请用`update-alternatives--configjava`查看exportPATH=$JAVA_HOME/bin:$PATH```###5.数据库及缓存环境搭建####MySQL高并发下,MySQL需要主从复制甚至分库分表。这里先搭建主从复制集群(至少一主一从)。-**使用Docker部署MySQL**(以MySQL8.0为例):主库:```bashdockerrun-d--namemysql-master\-eMYSQL_ROOT_PASSWORD=your_strong_password\-eMYSQL_DATABASE=your_db\-eMYSQL_USER=user\-eMYSQL_PASSWORD=password\-p3306:3306\--networkmy-network\--restartalways\mysql:8.0\--server-id=1\--log-bin=mysql-bin\--binlog-format=ROW\--innodb_buffer_pool_size=4G#根据内存调整,建议分配机器内存的50%-70%```从库:```bashdockerrun-d--namemysql-slave\-eMYSQL_ROOT_PASSWORD=your_strong_password\-eMYSQL_DATABASE=your_db\-eMYSQL_USER=user\-eMYSQL_PASSWORD=password\-p3307:3306\--networkmy-network\--restartalways\mysql:8.0\--server-id=2\--innodb_buffer_pool_size=4G```然后配置主从复制[^1]。-**优化MySQL配置**:调整`my.cnf`(通过Docker卷挂载配置文件):```ini[mysqld]innodb_buffer_pool_size=4G#关键:缓存池大小innodb_log_file_size=1Gmax_connections=2000#根据实际情况调整```####Redis使用Redis集群(至少3主3从)应对高并发和容灾。-**使用Docker部署Redis集群**:参考官方文档:https://redis.io/topics/cluster-tutorial使用DockerCompose部署Redis集群[^2]。单个Redis实例(测试小规模可用,高并发建议集群):```bashdockerrun-d--nameredis\-p6379:6379\--networkmy-network\redis:6.2\redis-server--requirepassyour_strong_password--maxmemory2g--maxmemory-policyallkeys-lru```生产环境建议使用RedisClusterSentinel模式。###Ruoyi-Vue部署Ruoyi-Vue分为前端(Vue)和后端(SpringBoot)。部署步骤:1.**后端**:使用Dockerfile构建SpringBoot应用的镜像,运行在Docker中。注意连接数据库和Redis的配置(使用Docker网络内部DNS,如`mysql-master`、`redis`)。-示例Dockerfile:```dockerfileFROMopenjdk:11-jre-slimVOLUME/tmpCOPYtarget/ruoyi-admin.jarapp.jarENTRYPOINT["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]```-运行:```bashdockerbuild-truoyi-backend:1.0.dockerrun-d--nameruoyi-app--networkmy-network-p8080:8080ruoyi-backend:1.0```2.**前端**:使用Nginx部署Vue项目。-构建静态文件:`npmrunbuild`-使用NginxDocker镜像:```bashdockerrun-d--namenginx\-p80:80\-v/path/to/dist:/usr/share/nginx/html\-v/path/to/nginx.conf:/etc/nginx/nginx.conf\nginx:1.21```-Nginx配置高并发:调整worker进程和连接数。```nginxworker_processesauto;events{worker_connections4096;useepoll;multi_accepton;}```###负载均衡与集群-**后端集群**:运行多个Ruoyi后端实例,使用NginxHAProxy进行负载均衡。-**数据库读写分离**:在Ruoyi配置中设置主库(写)和从库(读)。-**Redis集群**:使用RedisCluster,并在Ruoyi中配置集群节点。###监控与日志-使用Prometheus+Grafana监控系统、应用和数据库。-使用ELK(Elasticsearch,Logstash,Kibana)Fluentd收集日志。###安全-防火墙配置(仅开放必要端口)。-使用HTTPS(Nginx配置SSL证书)。###总结以上配置可以支撑日访问量1000万、QPS2000。但实际还需要根据业务特点进行压力测试和调优。注意:1.所有服务都应部署在多个节点上,避免单点故障。2.数据库和缓存层需要根据业务增长进行扩展(如分库分表、Redis分片)。3.自动化部署和监控是运维关键。§§相关问题§§1.如何对MySQL主从复制进行配置和监控?2.Redis集群的部署步骤和常见问题有哪些?3.如何进行SpringBoot应用的高并发调优?4.如何配置Nginx以实现高并发和负载均衡?5.如何设计高并发电商系统的数据库分库分表策略?[^1]:引用[1]中提到了停止和删除容器、镜像以及重新构建运行的过程,但这里我们关注的是在Docker网络中运行应用并连接其他容器服务。[^2]:引用[2]提到了使用不同的namespace隔离环境,但本文未直接采用,而是通过Docker网络进行服务发现。[^3]:引用[3]提到微服务架构和分布式组件,但本方案暂未涉及更复杂的微服务拆分,Ruoyi-Vue是一个单体应用(可拆分为微服务,但本方案按单体部署)。[^4]:引用[4]提到了Ruoyi-Vue的功能,我们直接使用其技术栈。[^5]:引用[5]中提到了使用Redis、RabbitMQ、MyBatis-Plus等技术,本方案中我们使用Redis作为缓存,MySQL作为数据库,但未涉及消息队列(可根据需要加入)。</think>### 为高并发电商网站配置运行环境方案(日访问量1000万,QPS 2000) #### 一、操作系统选择 **推荐方案**: - **Alibaba Cloud Linux 3**(专为云优化) **Ubuntu 22.04 LTS** - **内核优化**: ```bash # 调整网络参数(/etc/sysctl.conf) net.core.somaxconn = 65535 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_max_syn_backlog = 65536 net.ipv4.ip_local_port_range = 1024 65000 # 执行生效 sysctl -p ``` **理由**:专为云环境优化,支持高并发网络连接和容器化部署[^1]。 --- #### 二、高并发环境配置 **核心优化**: 1. **资源隔离**: - 使用 Linux Cgroups 限制容器资源 - 通过 Namespace 隔离网络/进程(参考Docker实现)[^2] 2. **连接优化**: ```bash # 修改文件句柄限制(/etc/security/limits.conf) * soft nofile 100000 * hard nofile 200000 ``` --- #### 三、Docker环境搭建 **部署步骤**: 1. 安装最新版Docker: ```bash # Ubuntu示例 apt install docker.io systemctl enable --now docker ``` 2. **关键配置**: ```bash # 创建专用网络 docker network create --driver bridge ecom-net # 容器部署示例(Ruoyi后端) docker run -d --name ruoyi-app \ --network ecom-net \ -p 8080:8080 \ -e JAVA_OPTS="-Xmx4g -Xms4g -XX:+UseG1GC" \ ruoyi-image:latest ``` 3. **集群管理**: - 使用 Docker Swarm/Kubernetes 实现水平扩展 --- #### 四、编程语言环境(Java/Spring Boot) **环境配置**: 1. **JDK选择**: - OpenJDK 17(LTS版本,G1垃圾回收器) 2. **JVM优化**: ```bash # 启动参数(ruoyi-vue) -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -Xmx8g -Xms8g # 根据机器内存调整 ``` 3. **Spring Boot配置**: ```yaml # application-prod.yml server: tomcat: max-threads: 1000 # 线程池大小 accept-count: 1000 # 等待队列 ``` --- #### 、数据库环境(MySQL) **架构设计**: ```mermaid graph LR A[应用] --> B[MySQL主库] B --> C[MySQL从库1] B --> D[MySQL从库2] E[Redis集群] --> A ``` **部署要点**: 1. **MySQL集群**: ```bash # 主库配置(my.cnf) innodb_buffer_pool_size = 64G # 内存的70% innodb_log_file_size = 4G max_connections=3000 # 从库配置 read_only=ON ``` 2. **Docker部署**: ```bash docker run -d --name mysql-master \ -v /data/mysql:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=xxxx \ --network ecom-net \ mysql:8.0 \ --server-id=1 \ --log-bin=master-bin ``` --- #### 六、Redis缓存环境 **集群方案**: 1. **Redis Cluster**(6节点:3主3从) ```bash # 节点配置 port 6379 cluster-enabled yes maxmemory 16gb # 根据内存调整 maxmemory-policy allkeys-lru ``` 2. **连接配置**(Ruoyi中): ```yaml spring: redis: cluster: nodes: - redis-node1:6379 - redis-node2:6379 max-redirects: 3 timeout: 5000 ``` --- #### 七、整体架构优化 1. **负载均衡**: - Nginx前置(配置最少连接算法) ```nginx upstream ruoyi { least_conn; server app1:8080; server app2:8080; } ``` 2. **压测验证**: - 使用 JMeter 模拟2000 QPS流量 - 监控指标:CPU利用率 <70%,GC暂停 <200ms > **关键提醒**: > - 所有服务需部署在专用内网(Docker Network) > - 数据库/Redis使用容器内部DNS名称访问(如 `mysql-master.ecom-net`) > - 日访问量1000万需至少3台应用服务器(8核16G)+ 数据库主从分离[^3]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值