银河麒麟v10服务器版Docker部署教程-.NET 6 WebAPI-nginx-redis-python3.8 - 指南

news/2026/1/19 16:54:58/文章来源:https://www.cnblogs.com/yangykaifa/p/19502722

银河麒麟v10服务器版Docker部署教程

1. 前言

本教程旨在指导用户在银河麒麟v10服务器版上部署Docker,并使用Docker容器化技术部署以下服务:

所有服务均配置为开机自启动。

2. 系统环境准备

2.1 系统要求

2.2 系统更新

# 更新系统软件包
sudo yum update -y

3. Docker安装与配置

3.1 安装Docker

# 安装必要的依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加Docker软件源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动Docker服务
sudo systemctl start docker
# 验证Docker安装
sudo docker --version

3.2 配置防火墙

# 启动并启用firewalld服务
sudo systemctl start firewalld
sudo systemctl enable firewalld
# 允许Docker服务通过防火墙
sudo firewall-cmd --permanent --zone=public --add-service=docker
# 允许相关端口通过防火墙
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp
sudo firewall-cmd --permanent --zone=public --add-port=6379/tcp
sudo firewall-cmd --permanent --zone=public --add-port=5000/tcp
sudo firewall-cmd --permanent --zone=public --add-port=5001/tcp
# 重新加载防火墙规则
sudo firewall-cmd --reload

3.3 配置Docker开机自启动

# 启用Docker服务开机自启
sudo systemctl enable docker
# 启动Docker服务(如果尚未启动)
sudo systemctl start docker

3.4 安装Docker Compose

# 下载Docker Compose二进制文件
curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 创建软链接
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 验证安装
docker-compose --version

4. 目录结构规划

# 创建项目目录结构
sudo mkdir -p /opt/docker/{mysql,redis,nginx,aspnetcore,python}
sudo chmod -R 777 /opt/docker

5. MySQL 8部署

5.1 创建MySQL配置文件

cat > /opt/docker/mysql/my.cnf << EOF
[mysqld]
user=mysql
character-set-server=utf8mb4
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
EOF

5.2 创建MySQL Docker Compose配置

cat > /opt/docker/mysql/docker-compose.yml << EOF
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql8
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_root_password  # 请修改为强密码
MYSQL_USER: your_user                    # 请修改为自定义用户名
MYSQL_PASSWORD: your_password            # 请修改为自定义密码
ports:
- "3306:3306"
volumes:
- /opt/docker/mysql/data:/var/lib/mysql
- /opt/docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
- /opt/docker/mysql/logs:/var/log/mysql
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
EOF

5.3 启动MySQL服务

cd /opt/docker/mysql
docker-compose up -d

6. Redis部署

6.1 创建Redis配置文件

cat > /opt/docker/redis/redis.conf << EOF
bind 0.0.0.0
port 6379
databases 16
dbfilename dump.rdb
dir /data
requirepass your_redis_password  # 请修改为强密码
maxmemory 256mb
maxmemory-policy allkeys-lru
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
EOF

6.2 创建Redis Docker Compose配置

cat > /opt/docker/redis/docker-compose.yml << EOF
version: '3.8'
services:
redis:
image: redis:6.2
container_name: redis
restart: always
ports:
- "6379:6379"
volumes:
- /opt/docker/redis/data:/data
- /opt/docker/redis/redis.conf:/etc/redis/redis.conf
command: redis-server /etc/redis/redis.conf
EOF

6.3 启动Redis服务

cd /opt/docker/redis
docker-compose up -d

7. Nginx部署

7.1 创建Nginx配置文件

cat > /opt/docker/nginx/nginx.conf << EOF
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log  /var/log/nginx/access.log  main;
sendfile            on;
tcp_nopush          on;
tcp_nodelay         on;
keepalive_timeout   65;
types_hash_max_size 2048;
include             /etc/nginx/mime.types;
default_type        application/octet-stream;
# 配置WebAPI反向代理
server {
listen       80;
server_name  your_domain.com;  # 请修改为你的域名或IP
location / {
proxy_pass http://aspnetcore:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
include /etc/nginx/conf.d/*.conf;
}
EOF

7.2 创建Nginx Docker Compose配置

cat > /opt/docker/nginx/docker-compose.yml << EOF
version: '3.8'
services:
nginx:
image: nginx:latest
container_name: nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /opt/docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- /opt/docker/nginx/html:/usr/share/nginx/html
- /opt/docker/nginx/logs:/var/log/nginx
depends_on:
- aspnetcore
EOF

7.3 启动Nginx服务

cd /opt/docker/nginx
docker-compose up -d

8. .NET 6 WebAPI部署

8.1 准备.NET 6 WebAPI项目

将你的.NET 6 WebAPI项目发布到/opt/docker/aspnetcore目录:

# 示例:从Windows发布到Linux服务器
# 在Windows上执行:
dotnet publish -c Release -o ./publish
# 将publish目录下的所有文件复制到服务器的/opt/docker/aspnetcore目录

8.2 创建Dockerfile

cat > /opt/docker/aspnetcore/Dockerfile << EOF
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 5000
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["YourWebApiProject.csproj", "."]
RUN dotnet restore "./YourWebApiProject.csproj"
COPY . .
WORKDIR "/src/"
RUN dotnet build "YourWebApiProject.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "YourWebApiProject.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "YourWebApiProject.dll"]
EOF

8.3 创建Docker Compose配置

cat > /opt/docker/aspnetcore/docker-compose.yml << EOF
version: '3.8'
services:
aspnetcore:
build: .
container_name: aspnetcore-webapi
restart: always
ports:
- "5000:5000"
environment:
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_URLS=http://+:5000
- ConnectionStrings__DefaultConnection=Server=mysql8;Database=YourDatabase;User=your_user;Password=your_password;  # 请修改数据库连接信息
depends_on:
- mysql8
- redis
EOF

8.4 启动.NET 6 WebAPI服务

cd /opt/docker/aspnetcore
docker-compose up -d

9. Python 3.8虚拟环境部署

9.1 创建Python项目目录

mkdir -p /opt/docker/python/app

9.2 创建requirements.txt

cat > /opt/docker/python/app/requirements.txt << EOF
# 在此添加你的Python依赖
Flask==2.0.1
requests==2.26.0
EOF

9.3 创建Python应用示例

cat > /opt/docker/python/app/app.py << EOF
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello from Python 3.8!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5001)
EOF

9.4 创建Dockerfile

cat > /opt/docker/python/Dockerfile << EOF
FROM python:3.8-slim
WORKDIR /app
# 创建虚拟环境
RUN python -m venv /venv
ENV PATH="/venv/bin:$PATH"
# 安装依赖
COPY app/requirements.txt .
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
# 复制应用代码
COPY app/ .
# 启动应用
CMD ["python", "app.py"]
EOF

9.5 创建Docker Compose配置

cat > /opt/docker/python/docker-compose.yml << EOF
version: '3.8'
services:
python:
build: .
container_name: python38
restart: always
ports:
- "5001:5001"
volumes:
- /opt/docker/python/app:/app
EOF

9.6 启动Python服务

cd /opt/docker/python
docker-compose up -d

10. 整体Docker Compose配置(可选)

如果你希望使用一个统一的Docker Compose文件管理所有服务,可以创建以下配置:

cat > /opt/docker/docker-compose.yml << EOF
version: '3.8'
services:
# MySQL服务
mysql8:
image: mysql:8.0
container_name: mysql8
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_USER: your_user
MYSQL_PASSWORD: your_password
ports:
- "3306:3306"
volumes:
- /opt/docker/mysql/data:/var/lib/mysql
- /opt/docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
- /opt/docker/mysql/logs:/var/log/mysql
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
# Redis服务
redis:
image: redis:6.2
container_name: redis
restart: always
ports:
- "6379:6379"
volumes:
- /opt/docker/redis/data:/data
- /opt/docker/redis/redis.conf:/etc/redis/redis.conf
command: redis-server /etc/redis/redis.conf
# .NET 6 WebAPI服务
aspnetcore:
build: ./aspnetcore
container_name: aspnetcore-webapi
restart: always
ports:
- "5000:5000"
environment:
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_URLS=http://+:5000
- ConnectionStrings__DefaultConnection=Server=mysql8;Database=YourDatabase;User=your_user;Password=your_password;
depends_on:
- mysql8
- redis
# Nginx服务
nginx:
image: nginx:latest
container_name: nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /opt/docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- /opt/docker/nginx/html:/usr/share/nginx/html
- /opt/docker/nginx/logs:/var/log/nginx
depends_on:
- aspnetcore
# Python服务
python38:
build: ./python
container_name: python38
restart: always
ports:
- "5001:5001"
volumes:
- /opt/docker/python/app:/app
EOF

10.1 使用整体配置启动所有服务

cd /opt/docker
docker-compose up -d

11. 开机自启动配置

所有服务已通过Docker Compose的restart: always参数配置为容器级别的开机自启。为了确保Docker服务本身在系统启动时自动运行:

# 启用Docker服务开机自启
sudo systemctl enable docker
# 验证开机自启设置
sudo systemctl is-enabled docker

11.1 配置Docker Compose服务开机自启(可选)

如果使用整体Docker Compose配置,可以创建一个systemd服务单元:

cat > /etc/systemd/system/docker-compose.service << EOF
[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/docker
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
EOF

启用并启动该服务:

sudo systemctl enable docker-compose
sudo systemctl start docker-compose

12. 服务验证

12.1 检查Docker容器状态

docker ps

12.2 访问各服务

  • Nginx: http://服务器IP
  • .NET 6 WebAPI: http://服务器IP:5000 或通过Nginx反向代理访问
  • Python应用: http://服务器IP:5001
  • MySQL: 使用MySQL客户端连接服务器IP:3306
  • Redis: 使用Redis客户端连接服务器IP:6379

13. 常见问题与故障排除

13.1 Docker容器无法启动

# 查看容器日志
docker logs [容器名称]
# 例如查看MySQL容器日志
docker logs mysql8

13.2 端口被占用

# 检查端口占用情况
sudo netstat -tuln | grep [端口号]
# 例如检查80端口
sudo netstat -tuln | grep 80

13.3 权限问题

# 检查目录权限
sudo ls -la /opt/docker/[服务目录]
# 修复权限
sudo chmod -R 777 /opt/docker/[服务目录]

13.4 Docker服务无法启动

# 检查Docker服务状态
sudo systemctl status docker
# 重启Docker服务
sudo systemctl restart docker

14. 总结

本教程详细介绍了在银河麒麟v10服务器版上使用Docker部署.NET 6 WebAPI、Nginx、Redis、MySQL 8和Python 3.8虚拟环境的步骤。所有服务均已配置为开机自启动,确保系统重启后服务能够自动恢复运行。

通过Docker容器化技术,各服务之间相互隔离,便于管理和维护。同时,使用Docker Compose可以简化多容器应用的部署和管理流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1184031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年郑州回收废旧空调公司推荐榜:郑州恒森二手空调回收,中央空调回收/二手空调收购/空调回收/空调收购/回收空调/二手空调回收/收购中央空调/收购空调/废旧空调回收公司精选

在郑州高新区一处商业综合体改造现场,一支回收团队正忙碌作业,他们用不到三天时间完成了现场近三百台大型空调设备的评估、拆卸与转运。空调回收早已超越了传统“收废品”的概念。废旧家电回收行业目前在中国再生资源…

2025年目前排行前列的智能门窗品牌有哪些,全屋门窗/意式门窗/家居设计/欧式门窗/电动门窗供应商怎么选择 - 品牌推荐师

随着智能家居市场的爆发式增长,智能门窗作为家庭场景中高频使用的刚需品类,正从单一功能向系统化、场景化方向迭代。据第三方机构统计,2024年国内智能门窗市场规模突破280亿元,年复合增长率达31%,其中电动门窗占比…

腾讯会议搭配提词器推荐——芦笋提词器

在使用腾讯会议进行远程教学、企业汇报或线上直播时&#xff0c;配合一款高效的提词器&#xff0c;可以让发言更流畅自然&#xff0c;避免忘词和卡顿&#xff0c;提升整体表达效果。 这里我只推荐一款功能强大且完全适配腾讯会议场景的提词器——芦笋提词器。 芦笋提词器为何…

GESP认证C++编程真题解析 | 202403 一级

​欢迎大家订阅我的专栏:算法题解:C++与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的…

2025年市场上服务好的扩口法兰批发推荐排行榜单,SAE法兰/方法兰/内螺纹法兰/分体法兰/法兰夹,扩口法兰品牌哪家好 - 品牌推荐师

在工业管道连接领域,扩口法兰作为核心部件,其质量与服务直接影响液压系统的稳定性与效率。随着船舶、工程机械、煤矿机械等行业对高压、高精度管件需求的增长,市场对扩口法兰的技术标准与定制化能力提出更高要求。然…

2026年电子级硫化氢定做厂家权威推荐榜单:高纯硫化氢/硫化氢减压阀/工业级硫化氢/硫化氢配件/液化硫化氢源头厂家精选

在特种气体领域,硫化氢及其配件的供应对化工、电子、医药等行业至关重要。据行业统计,2025年国内硫化氢市场规模已突破12亿元,其中工业级硫化氢占比超65%,电子级硫化氢需求年增速达18%。温州迎跃新材料有限公司凭借…

【高精度气象】销量忽高忽低真不是运营锅:气象变量是隐藏杠杆

你一定经历过这种“离谱波动”—— 同样的门店、同样的货、同样的活动力度&#xff1a;周一卖爆、周二断崖上午冷清、下午突然爆单这家店缺货&#xff0c;那家店积压运营复盘到凌晨&#xff0c;结论只有一句&#xff1a;“不确定因素太多”但你真要把锅全甩给运营吗&#xff1f…

2026年支付宝消费红包高效变现指引 - 淘淘收小程序

打开支付宝卡包,不少人都会发现几张沉睡的支付宝红包——可能是参与活动获得,也可能是推送的福利,它们静静躺在列表里,既用不上,又舍不得让其过期失效。在2026年数字化福利普及的当下,这样的闲置支付宝红包并非毫…

秦皇岛海港山海关北戴河抚宁昌黎英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025

在雅思备考赛道中,秦皇岛海港、山海关、北戴河、抚宁、昌黎等区县考生普遍面临诸多难题:如何在繁杂的培训市场中精准选课,规避低效机构;如何掌握科学提分技巧,实现高分突破;如何平衡性价比与优质服务,找到靠谱的…

专业企业网站建设指南:价格、流程、注意事项一次说清

在数字化浪潮席卷各行各业的今天&#xff0c;企业网站已不再是互联网世界的"可选装饰"&#xff0c;而是企业生存发展的战略必需品。它不仅是24小时在线的品牌展厅、业务窗口&#xff0c;更是连接客户、传递价值、驱动增长的核心数字枢纽。一个专业、高效、体验出色的…

9DVR帽椅|VR科普蛋椅|VR解锁动感科普新姿势!

9DVR帽椅是一款主打“全新动感科普交互体验”的VR沉浸式体验设备&#xff0c;核心依托萌酷科技外观设计与高配置硬件联动&#xff0c;以“海量科普内容多自由度动感模拟高清全景沉浸”为核心优势&#xff0c;提供单人、双人两种体验型号。设备集成智能头显、无延迟操作手柄与多…

【风电功率预测】一次把风电预测做稳:时间对齐、分箱口径、极端样本三件套

风电预测这几年“看起来越来越卷”&#xff1a;模型更大、数据更多、算力更强、气象源更丰富——但真正落地到风场侧&#xff0c;你会发现一个现实&#xff1a;误差并没有按预期下降&#xff0c;甚至还会“越修越偏”。为什么&#xff1f;因为风电功率预测的难点&#xff0c;从…

新型运载技术:广义管网运送机械系统

管链式输送机一、系统基本原理1. 基本概念广义管网运送机械系统主要基于密闭管道内物料的有序移动。系统通过在管道内部构建一个可控的环境&#xff0c;利用各种动力方式&#xff08;如机械推动、气动力、液压力等&#xff09;使运输载体&#xff08;运输车、链盘、物料本身&am…

2026年好评如潮,工业展展会口碑大揭秘!液压气动/压力机/减速机/装备/机床/工业/机械/传感器,工业展展览哪个好 - 品牌推荐师

随着全球工业4.0浪潮的推进,中国制造业正加速向智能化、数字化、绿色化转型。作为产业链上下游对接的核心场景,工业展会成为企业展示技术、拓展市场、促成合作的关键平台。然而,展会质量参差不齐、同质化严重等问题…

小程序计算机毕设之基于nodejs+微信小程序的垃圾分类助手系统垃圾分类和回收系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

我至今用到最好的Claude Code Skills,让Agent把重复动作都做成工作流

我至今用到最好的Claude Code Skills,让Agent把重复动作都做成工作流我至今用到最好的Claude Code Skills,让Agent把重复动作都做成工作流 skillsmp都有6万个Claude Skills了,今天来推荐一些我使用频率超高的Skills…

漏洞挖掘核心知识点与实战技巧(新手零门槛指南)

漏洞挖掘核心知识点与实战技巧&#xff08;新手零门槛指南&#xff09; 在渗透测试全流程中&#xff0c;漏洞挖掘是衔接“漏洞扫描”与“漏洞利用”的核心环节&#xff0c;也是最考验实战思维的一步。对新手而言&#xff0c;漏洞挖掘并非“盲目试错”&#xff0c;而是基于知识…

2026年行业内可靠的低压电力电缆供应厂家哪家好,高压电力电缆/ZC-YJV高压电力电缆,低压电力电缆企业推荐榜 - 品牌推荐师

随着我国新型电力系统建设的加速与“双碳”目标的持续推进,低压电力电缆作为电能传输的“毛细血管”,其市场需求持续增长,应用场景也从传统的建筑、工业领域,快速扩展到数据中心、新能源充电桩、智能电网等新兴领域…

护网行动入门指南:普通人如何参与并积累实战经验

护网行动入门指南&#xff1a;如何参与并积累实战经验 护网行动是国内最高规格的网络安全实战演练&#xff0c;旨在检验企业、单位的网络安全防御能力&#xff0c;现已成为网络安全领域的“实战练兵场”。对计算机专业学生而言&#xff0c;参与护网行动不仅能积累宝贵的实战经…

新型运载技术:新概念航空动力技术

引言 新概念航空动力技术正推动航空工业迈向更高效、环保和多元化的未来。其中&#xff0c;脉冲爆震发动机通过爆震波产生推力&#xff0c;理论上具有高热循环效率和结构简单等优点&#xff1b;微型涡轮发动机则凭借其高能量密度&#xff0c;有望显著提升无人机等飞行器的续航…