当前位置: 首页 > news >正文

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

银河麒麟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.jsqmd.com/news/268441/

相关文章:

  • GESP认证C++编程真题解析 | 202403 二级
  • 2026年郑州回收废旧空调公司推荐榜:郑州恒森二手空调回收,中央空调回收/二手空调收购/空调回收/空调收购/回收空调/二手空调回收/收购中央空调/收购空调/废旧空调回收公司精选
  • GESP认证C++编程真题解析 | 202403 一级
  • 2025年目前排行前列的智能门窗品牌有哪些,全屋门窗/意式门窗/家居设计/欧式门窗/电动门窗供应商怎么选择 - 品牌推荐师
  • 腾讯会议搭配提词器推荐——芦笋提词器
  • 2026年电子级硫化氢定做厂家权威推荐榜单:高纯硫化氢/硫化氢减压阀/工业级硫化氢/硫化氢配件/液化硫化氢源头厂家精选
  • 【高精度气象】销量忽高忽低真不是运营锅:气象变量是隐藏杠杆
  • 2025年市场上服务好的扩口法兰批发推荐排行榜单,SAE法兰/方法兰/内螺纹法兰/分体法兰/法兰夹,扩口法兰品牌哪家好 - 品牌推荐师
  • 2026年支付宝消费红包高效变现指引 - 淘淘收小程序
  • 秦皇岛海港山海关北戴河抚宁昌黎英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025
  • 专业企业网站建设指南:价格、流程、注意事项一次说清
  • 9DVR帽椅|VR科普蛋椅|VR解锁动感科普新姿势!
  • 【风电功率预测】一次把风电预测做稳:时间对齐、分箱口径、极端样本三件套
  • 新型运载技术:广义管网运送机械系统
  • 2026年好评如潮,工业展展会口碑大揭秘!液压气动/压力机/减速机/装备/机床/工业/机械/传感器,工业展展览哪个好 - 品牌推荐师
  • 我至今用到最好的Claude Code Skills,让Agent把重复动作都做成工作流
  • 小程序计算机毕设之基于nodejs+微信小程序的垃圾分类助手系统垃圾分类和回收系统(完整前后端代码+说明文档+LW,调试定制等)
  • 漏洞挖掘核心知识点与实战技巧(新手零门槛指南)
  • 2026年行业内可靠的低压电力电缆供应厂家哪家好,高压电力电缆/ZC-YJV高压电力电缆,低压电力电缆企业推荐榜 - 品牌推荐师
  • 古筝选购不迷茫!2026年这家厂家的产品有何独到之处?瑶鸾古筝Y103系列(星辰)古筝生产厂家排行 - 品牌推荐师
  • 护网行动入门指南:普通人如何参与并积累实战经验
  • 国内有什么建站系统推荐
  • 新型运载技术:新概念航空动力技术
  • 亲测好用10个AI论文软件,助本科生轻松搞定毕业论文!
  • 视频汇聚平台EasyCVR破解偏远地区监控难题的技术实践
  • 2025年插补Y品牌口碑排行榜揭晓,三轴机/双主轴双刀塔/双主轴双排刀/四轴机/刀塔车床/数控4+4/尾顶机插补Y定制哪家好 - 品牌推荐师
  • 微信小程序毕设项目:基于nodejs+微信小程序的垃圾分类和回收系统(源码+文档,讲解、调试运行,定制等)
  • 计算机毕设Java基于Java的小区物业管理系统 基于Java的住宅物业管理智能系统 Java实现的社区物业综合服务平台
  • Oracle 19c入门学习教程,从入门到精通,Oracle 过程、函数、触发器和包详解(7)
  • 2026年安徽知名的家教机构怎么选择,封闭式全托集训营/全托补习班/一对一/一对一家教/初中家教,家教机构电话 - 品牌推荐师