做论文常用网站wordpress配置七牛

张小明 2026/1/3 0:28:21
做论文常用网站,wordpress配置七牛,网站建设优化一体,亚洲足球最新排名1. 快速入门 1.1 卸载旧版 首先#xff0c;检查系统中是否已安装Docker及相关组件#xff1a;docker --version 如果系统已安装Docker#xff0c;您可能会看到类似 Docker version 20.10.17, build 100c701 的输出。为了确保环境的纯净#xff0c;如果系统中已经存在旧版本…1. 快速入门1.1 卸载旧版首先检查系统中是否已安装Docker及相关组件docker --version如果系统已安装Docker您可能会看到类似 Docker version20.10.17,build100c701的输出。为了确保环境的纯净如果系统中已经存在旧版本的Docker建议先卸载它yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine1.2 配置 Docker 的 yum 库首先要安装一个yum工具yum install-y yum-utils安装成功后执行命令配置Docker的yum源yum-config-manager--add-repo https://download.docker.com/linux/centos/docker-ce.repo1.3 安装Dockeryum install-y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin1.4 启动和校验# 启动Dockersystemctl start docker# 停止Dockersystemctl stop docker# 重启systemctl restart docker# 设置开机自启systemctl enable docker# 执行docker ps命令如果不报错说明安装启动成功docker ps1.5 配置镜像加速这里以阿里云镜像加速为例。注册阿里云账号首先访问阿里云网站: https://www.aliyun.com/ 注册一个账号。开通镜像服务在首页的产品中找到阿里云的容器镜像服务点击后进入控制台:首次可能需要选择立刻开通然后进入控制台。配置镜像加速找到镜像工具下的镜像加速器页面向下滚动即可找到配置的文档说明具体命令如下# 创建目录mkdir-p/etc/docker# 复制内容注意把其中的镜像加速地址改成你自己的tee/etc/docker/daemon.json-EOF{registry-mirrors:[https://xxxx.mirror.aliyuncs.com]}EOF# 重新加载配置systemctl daemon-reload# 重启Dockersystemctl restart docker配置 Docker 自启动默认情况下每次重启虚拟机我们都需要手动启动Docker和Docker中的容器。通过如下命令可以实现开机自启# Docker开机自启systemctl enable docker# Docker容器开机自启docker update--restartalways[容器名/容器id]1.6 创建容器部署MySQL首先我们利用Docker来安装一个MySQL软件大家可以对比一下之前传统的安装方式看看哪个效率更高一些。如果是利用传统方式部署MySQL大概的步骤有搜索并下载MySQL安装包上传至Linux环境编译和配置环境安装而使用Docker安装仅仅需要一步即可在命令行输入下面的命令docker run-d \--name mysql \-p3306:3306\-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123\ mysql运行效果如图MySQL安装完毕通过任意客户端工具即可连接到MySQL。命令解读docker run -d创建并运行一个容器-d则是让容器以后台进程运行--name mysql: 给容器起个名字叫mysql你可以叫别的-p 3306:3306: 设置端口映射。容器是隔离环境外界不可访问。但是可以将宿主机的端口映射到容器内的端口当访问宿主机指定端口时就是在访问容器内的端口了。容器内端口往往是由容器内的进程决定例如MySQL进程默认端口是3306因此容器内端口一定是3306而宿主机端口则可以任意指定一般与容器内保持一致。格式-p 宿主机端口:容器内端口示例中就是将宿主机的3306映射到容器内的3306端口-e TZAsia/Shanghai: 配置容器内进程运行时的一些参数格式-e KEYVALUEKEY和VALUE都由容器内进程决定案例中TZAsia/Shanghai是设置时区MYSQL_ROOT_PASSWORD123是设置MySQL默认密码mysql: 设置镜像名称Docker会根据这个名字搜索并下载镜像格式REPOSITORY:TAG例如mysql:8.0其中REPOSITORY可以理解为镜像名TAG是版本号在未指定TAG的情况下默认是最新版本也就是mysql:latest镜像的名称不是随意的而是要到 Docker镜像仓库 中寻找。镜像运行时的配置也不是随意的要参考镜像的帮助文档这些在镜像仓库或者软件的官方网站中都能找到。如果我们要安装其它软件也可以到镜像仓库中寻找对应的镜像名称和版本阅读相关配置即可。2. 镜像2.1 下载镜像# 下载最新版本docker pull mysql# 下载指定版本docker pull mysql:8.0.27如果镜像后面不加版本号则为letest表示最新版本2.2 构建镜像docker build-t 镜像名称.# 如果Dockerfile在上一级目录中docker build-t 镜像名称-f../Dockerfile.-t表示指定镜像名称-f表示指定Dockerfile路径如果在当前目录中可以省略-f2.3 删除镜像# 删除指定镜像通过镜像名docker rmi 镜像名称# 删除指定镜像通过镜像IDdocker rmi 镜像ID# 强制删除正在被容器使用的镜像慎用会先删除关联容器docker rmi-f 镜像名称/镜像ID# 删除多个镜像docker rmi 镜像1镜像2镜像3# 删除所有镜像危险操作docker rmi $(docker images-q)2.4 保存镜像将镜像保存到本地方便备份、离线使用、共享和节省下载时间# docker save -o 镜像包名 镜像名称docker save-o mysql.tar mysql# 也可以将镜像保存到指定位置docker save-o/root/images/mysql.tar mysql2.5 导入镜像# docker load --input 镜像名docker load--inputmysql.tar2.6 查看镜像查看宿主机中下载的所有镜像docker images2.7 提交镜像用于将镜像推送到Docker官方仓库中docker push2.9 清理镜像一键清理这些没有打标签的镜像docker image prune -arootiZ2ze29609wbuhm5sfl1yqZ:~# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE thrive-blog latest93db21024f2411days ago1.72GBnonenone0d4dcf860f3112days ago1.72GBnonenone99483d7c663412days ago1.72GBnonenone7dfb389e9b0f13days ago1.72GBnonenonef2cec4b759e913days ago1.72GBnonenone031ec4192cc02weeks ago1.72GBnonenonec4c06bafdf764weeks ago1.72GBnonenone74c03be684a34weeks ago1.55GBnonenoneff7c7ee472a65weeks ago1.55GBnonenoned70fd618b14d5weeks ago1.55GBnonenonefdc350f27a755weeks ago1.55GBnonenonee9e50e71370f5weeks ago1.58GBnonenone86d46b004bfa5weeks ago1.58GBnonenone5290edf031f75weeks ago1.58GBnonenonebf6da9e495a45weeks ago1.33GBnonenone0126528c7c4e5weeks ago1.58GBnonenone5c63ec3adb6d5weeks ago1.58GB nginx latest7f553e8bbc897weeks ago 192MB2.10 清理镜像缓存docker builder prune3. 容器3.1 运行并创建容器# docker run -d --name 容器名称 -p 宿主机端口:容器端口 镜像名称docker run-d--name nginx-p80:80nginxdocker run -d \ # -d: 以后台守护进程模式运行 --name stara-ai \ # 设置容器名称为 stara-ai --restart unless-stopped \ # 设置重启策略除非手动停止否则自动重启如崩溃或重启后 -p 9001:9001 \ # 端口映射将宿主机的 9001 端口映射到容器的 9001 端口 -e NEXT_PUBLIC_PROJECT_APIhttps://api.Stara-AI.net/api \ # 设置环境变量Next.js 项目 API 地址 stara-ai # 使用的镜像名称默认使用 latest 标签3.2 查看容器查看所有容器:docker ps-a 查看运行中的容器:docker ps3.3 启动容器docker start 容器名称3.4 停止容器docker stop 容器名称3.5 重启容器docker restart 容器名称3.6 删除容器# 删除停止状态的容器docker rm 容器名称或ID# 强制删除正在运行的容器docker rm-f 容器名称或ID3.7 进入容器dockerexec-it容器ID或容器名称bash3.8 查看容器日志docker logs 容器名称3.9 查看容器信息docker container inspect 容器名称不过一般使用以下命令查看容器的详细信息因为该方法不仅可以查看容器的并且还能查看镜像的详细信息docker inspect 容器名称如果容器与镜像重名那么默认优先查看的是容器详细信息3.10 执行容器内的命令在指定容器执行对应的命令docker exec 容器名 对应的命令# 查看 Stara 容器内的文件列表dockerexecStara ls3.11 拷贝容器内的文件docker cp 容器名:容器文件路径 本地文件路径示例拷贝mysql容器内的Stara_backup.sql文件到本地./Stara.sqldocker cp mysql:./Stara_backup.sql./Stara.sql4. 网络在 Docker 中使用网络是为了实现容器之间的通信和与外部网络的连接。网络在 Docker 中的应用场景非常广泛比如容器间通信、多主机通信、与外部网络的连接默认情况下每个容器都有一个虚拟的网络IP但值并不固定与某一个容器绑定如果我们在开发时写死某个IP而在部署时很可能MySQL容器的IP会发生变化从而导致连接失败。所以可以借助Docker网络来解决这个问题只要在一个网络中多个容器之间就能互相访问。下面是网络的常用命令4.1 创建网络docker network create 网络名称4.2 删除网络docker network rm 网络名称4.3 清除网络清除所有未使用的网络docker network prune4.4 连接网络docker network connect 网络名称 容器名称# 也可以通过--alias给网络取个别名docker network connect 网络名称 容器名称--alias 网络别名4.5 断开网络docker network disconnect 网络名称 容器名称4.6 查看网络信息docker network inspect 网络名称4.7 查看所有网络docker network ls4.8 多容器互相访问只要多个容器在同一个网络中就能实现互相访问比如MySQL与Stara容器的网络都为lyy那么他们都可以连接lyy这个网络# 假设我们有# - 宿主机IP192.168.92.140# - Docker网络lyy网关172.18.0.1# - MySQL容器IP172.18.0.2# - MySQL容器名mysql# 方式一通过虚拟机IP连接SQLALCHEMY_DATABASE_URImysql://root:123192.168.92.140:3306/stara# 解释直接使用宿主机的IP需要MySQL容器映射了3306端口到宿主机# 用法适用于外部应用不在Docker网络内连接数据库# 方式二通过Docker网络网关IP连接SQLALCHEMY_DATABASE_URImysql://root:123172.18.0.1:3306/stara# 解释使用Docker网络的网关IP网关会转发到对应容器# 用法不推荐因为网关可能不直接转发数据库端口# 方式三通过容器的动态IP连接SQLALCHEMY_DATABASE_URImysql://root:123172.18.0.2:3306/stara# 解释使用容器分配的具体IP地址# 问题容器重启后IP可能变化导致连接失败# 方式四通过容器名连接推荐SQLALCHEMY_DATABASE_URImysql://root:123mysql:3306/stara# 解释使用容器名称Docker内置DNS会自动解析为当前IP# 优点容器重启、IP变化都不影响连接实际测试这四种方式创建网络和容器# 创建网络docker network create lyy# 启动MySQL容器docker run-d--name mysql \--network lyy \-p3306:3306\-e MYSQL_ROOT_PASSWORD123\-e MYSQL_DATABASEstara \ mysql:8.0# 启动一个测试容器用于测试连接docker run-d--name test-app \--network lyy \ alpine sleep999999获取各种IP地址# 获取宿主机IP通常是物理机或虚拟机IPhostname-I# 输出示例192.168.92.140# 获取Docker网络信息docker network inspect lyy# 查看 Gateway: 172.18.0.1# 查看容器IPIPAddress: 172.18.0.2分别测试四种连接方式# 进入测试容器dockerexec-it test-app sh# 在容器内安装mysql客户端apk add--no-cache mysql-client# 测试方式1通过宿主机IP连接需要-p参数映射端口mysql-h192.168.92.140-P3306-u root-p123-eSHOW DATABASES;# 测试方式2通过网关IP连接通常不可行mysql-h172.18.0.1-P3306-u root-p123-eSHOW DATABASES;# 大概率失败因为网关不转发数据库端口# 测试方式3通过容器具体IP连接mysql-h172.18.0.2-P3306-u root-p123-eSHOW DATABASES;# 成功但IP可能变化# 测试方式4通过容器名连接推荐mysql-h mysql-P3306-u root-p123-eSHOW DATABASES;# 成功Docker自动将mysql解析为172.18.0.2外部世界 ↓[宿主机]IP:192.168.92.140||Docker网络:lyy(172.18.0.0/16)|网关:172.18.0.1|├──[MySQL容器]名称:mysql,IP:172.18.0.2└──[Stara容器]名称:stara,IP:172.18.0.3连接方式1.外部→数据库192.168.92.140:3306(需端口映射)2.Stara→MySQLmysql:3306(推荐自动解析)3.Stara→MySQL172.18.0.2:3306(可行但IP会变)上面四种方式我们更推荐使用容器名连接因为这样的话我们不需要知道网络的IP多少不管他怎么变都是这个容器的IP为什么推荐使用容器名# 模拟容器重启IP可能变化docker stop mysql docker start mysql# 检查新IP可能不同docker inspect mysql|grep IPAddress# 新的IP可能是172.18.0.5# 但使用容器名依然可以连接# 在Stara容器内mysql-h mysql-P3306-u root-p123# Docker自动将mysql解析为新的IP 172.18.0.5结论容器名像联系人姓名永久不变容器IP像手机号码可能换号使用容器名就像打电话给张三而不是打电话给13800138000在代码中的实际应用# 错误示例硬编码IPDATABASE_URLmysql://root:123172.18.0.2:3306/mydb# 容器重启后代码需要修改# 正确示例使用容器名DATABASE_URLmysql://root:123mysql:3306/mydb# 容器重启、重新部署都不需要改代码# Docker Compose中的典型配置version:3.8services:mysql:image:mysql:8.0container_name:mysql_db# 固定名称networks:-app-network webapp:image:myapp:latest networks:-app-network environment:# 使用容器名连接数据库DATABASE_URL:mysql://root:123mysql_db:3306/mydb5. 数据卷为什么要使用数据卷使用数据卷可以实现容器和宿主机之间的数据共享和持久化并且方便在宿主机上修改容器中的数据提高开发和部署的便利性。典型应用场景修改容器内的数据比较麻烦需要先进入到容器才能修改这时可以使用数据卷将容器中的数据映射到宿主机从而实现数据绑定这样不管修改了容器内的数据还是映射后的宿主机数据彼此都会双向修改当容器被删除后数据自然就没有了如果我们想要实现数据持久化也可以使用数据卷这样当容器删除后数据仍然保留5.1 创建数据卷创建的数据卷默认存放位置在/var/lib/docker/volumes/docker volume create 数据卷名称在创建容器时候使用这个数据卷也就是数据卷会覆盖容器内的数据# docker run -d --name 容器名称 -p 宿主机端口:容器端口 数据卷名称:容器内路径 镜像名称docker run-d--name stara-p5000:5000stara-data:/app stara其实在创建容器时候给他指定-v 数据卷名称能够自动创建数据卷推荐使用这种方式# -v 参数会自动创建数据卷如果不存在docker run-d--name stara-p5000:5000-v stara-data:/app stara5.2 删除数据卷docker volume rm 数据卷名称5.3 清除数据卷通过该命令能够删除所有未使用的数据卷# 默认情况下执行该命令会有交互需要输入y才能清除docker volume prune# 在后面加上-f可以直接清除docker volume prune-f5.4 查看数据卷信息docker volume inspect 数据卷名称5.5 查看所有数据卷docker volume ls5.6 本地数据卷本地数据卷Bind Mounts是将宿主机文件系统目录直接映射到容器中的挂载方式。与 Docker 管理的命名数据卷不同本地数据卷完全由用户控制。6. DockerfileDockerfile是用于构建Docker镜像的文本文件。它包含了一系列指令和配置通过这些指令可以自动化地构建、配置和部署Docker容器。下面是Dockerfile的一些常见指令和使用方法FROM指定基础镜像例如FROM ubuntu:latest。RUN在镜像中执行命令。例如RUN apt-get update apt-get install -y python。COPY将文件从宿主机复制到镜像中。例如COPY app.py /app/。WORKDIR设置工作目录。例如WORKDIR /app/。EXPOSE声明容器运行时的监听端口。例如EXPOSE 80。CMD指定容器启动时执行的命令。通常用于设置应用程序的启动命令。例如CMD [“python”, “app.py”]。我们可以选择指定系统镜像如何一步一步来不过比较麻烦需要配置很多东西。也可以选择直接使用别人打包好的镜像这样就可以省去很多配置6.1 Java# 设置基础镜像FROM openjdk:11.0-jre-buster# 设置工作目录WORKDIR/app# 将jar包复制到工作目录中并拷贝给app.jarCOPY student.jar/thrive/app.jar# 暴露容器端口号不写表示所有EXPOSE5555# 创建容器成功做的事情,等价于java -jar app.jarENTRYPOINT[java,-jar,app.jar]6.2 Python# 设置基础镜像FROM python:3.10# 设置工作目录WORKDIR/app# 将当前目录中所有文件复制到指定目录中COPY./app# 构建镜像时做的事情下载相关依赖RUN pip3 install-r requirements.txt-i https://mirrors.bfsu.edu.cn/pypi/web/simple/# 暴露容器端口号EXPOSE5000# 在容器创建成功后做的事情相当于执行python3 app.pyCMD[python3,app.py]6.3 前端# 使用官方的 Node.js 镜像作为基础镜像FROM node:20-alpine# 设置工作目录使用标准路径 /appWORKDIR/app# 配置 npm 镜像源RUN npm configsetregistry https://registry.npmmirror.com# 复制 package.json 和 package-lock.json使用相对路径COPY package*.json.# 安装依赖RUN npm install# 复制所有文件到工作目录使用相对路径COPY..# 构建 Next.js 应用RUN npm run build# 暴露应用运行的端口EXPOSE3000# Next.js 默认端口是 3000# 启动 Next.js 应用CMD[npm,start]7. 发布镜像一、登录Docker# 登录到 Docker HubDocker 官方镜像仓库# 执行后会提示输入用户名和密码# 登录凭证会保存在本地 ~/.docker/config.json 文件中docker login二、在本地将项目构建为Docker镜像# 在当前目录下构建 Docker 镜像# -t blog : 为镜像设置标签名称为 blog# 未指定版本时默认使用 latest 标签# . : 表示使用当前目录下的 Dockerfile 进行构建docker build-t blog.三、创建一个标记# 为镜像创建符合 Docker Hub 命名规范的标记# 格式docker tag 本地镜像名:标签 用户名/仓库名:版本# 标记为具体版本 2.0docker tag blog:latest Stara/blog:2.0# 注释# blog:latest : 源镜像上一步构建的镜像# Stara/ : Docker Hub 用户名假设用户名为 Stara# blog : 仓库名称将在 Docker Hub 上创建的仓库名# :2.0 : 版本标签# 同时标记为 latest 标签推荐docker tag blog:latest Stara/blog:latest# 注释latest 标签通常指向最新稳定版本四、推送到Docker仓库仓库名与标记须一致# 标记时Stara/blog:2.0 仓库名是 blogdocker push Stara/blog:2.0# 注释推送标记为 Stara/blog:2.0 的镜像到 Docker Hub# 输出示例如下The push refers to repository[docker.io/Stara/blog]f2d56fb9047e:Pushed fd97789b8a64:Pushed9a90196d4ed8:Pushed e40c0d799f4a:Pushed7a0987487f34:Pushed a5d66880f330:Pushed3e21282456a4:Pushed e485bcd02d87:Pushed2.0:digest:sha256:693aa6bf55ce41bfbba9ab916ce2a21f6ece021a850c9762cfb4c57bd882b0ffsize:1999# 注释# - 每一行显示一个镜像层的推送状态# - digest 是镜像的唯一 SHA256 哈希标识符# - size 表示镜像的总大小# 推送 latest 标签推荐docker push Stara/blog:latest# 可选另一个镜像的构建和推送server 项目# 使用 buildx 工具构建支持特定平台的镜像并直接推送docker buildx build--platform linux/amd64-t Stara/server:2.3.1--push.# 注释# buildx : Docker 的扩展构建工具支持多平台构建# --platform : 指定目标平台架构# linux/amd64 : 针对 x86_64 架构的 Linux 系统# -t : 设置镜像标签# Stara/server:2.3.1 : 用户名/仓库名:版本# --push : 构建完成后自动推送到仓库无需单独 push# . : 构建上下文为当前目录五、查看刚刚发布的镜像# 在浏览器中访问 Docker Hub 查看已发布的镜像# 格式https://hub.docker.com/repository/docker/用户名/仓库名https://hub.docker.com/repository/docker/Stara/blog# 查看后可进行以下操作# 1. 查看所有版本标签# 2. 查看下载统计# 3. 获取镜像拉取命令# 4. 管理镜像权限# 5. 查看安全扫描报告# 可选如果推送了 server 镜像可查看https://hub.docker.com/repository/docker/Stara/server8. PortainerPortainer 是一个开源的 Docker 可视化管理工具它为用户提供了一种简单、直观的方式来管理和监控 Docker 容器、镜像和数据卷。安装也非常简单首先下载Portainer的Docker镜像docker pull portainer/portainer接下来使用如下命令运行Portainer容器docker run-p9000:9000--name portainer \--restartalways \-v/var/run/docker.sock:/var/run/docker.sock \-v/mydata/portainer/data:/data \-d portainer/portainer假设我的虚拟机IP为192.168.92.120那么可以通过如下地址访问http://192.168.92.120:9000/第一次进入需要设置管理员的账号密码设置完毕后进入到如下页面就证明OK了9. dpanelDPanel是一款由国内开发者打造的Docker可视化管理面板支持容器管理、镜像构建、文件浏览等核心功能全中文界面操作更顺手。docker pull dpanel/dpanel:latestdocker run-it-d--name dpanel--restartalways \-p9000:8080--network dpanel-local \-v/var/run/docker.sock:/var/run/docker.sock \-e APP_NAMEdpanel dpanel/dpanel:latest10. 扩展10.1 命令别名如果一段命令过长可以给这个命令起个别名方便我们使用修改/root/.bashrc文件# User specific aliases and functionsalias rmrm -ialias cpcp -ialias mvmv -i# 核心alias dpsdocker ps --format table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}alias disdocker images# Source global definitionsif[-f/etc/bashrc];then./etc/bashrc fi最后一定要注意 执行这个命令使别名生效source/root/.bashrc11. Docker ComposeDocker Compose是一个用于定义和运行多容器Docker应用程序的工具。通过使用YAML文件来配置应用程序的服务它还可以轻松地启动、停止和管理这些服务官网文档https://docs.docker.com/compose/安装docker composesudo apt-get update sudo apt-get install docker-compose-plugin验证是否成功docker compose version详细安装教程https://docs.docker.com/compose/install/linux/#install-the-plugin-manually脚本文件compose.yamlservices:# 数据库mysql:container_name:mysql image:mysql:8.0ports:-3307:3306networks:# 加入网络-Stara_network environment:# 数据库密码MYSQL_ROOT_PASSWORD:Stara-AI# 创建数据库MYSQL_DATABASE:Stara volumes:# 默认数据卷位置# - mysql_data:/var/lib/mysql# 将 mysql_data 映射到宿主机的当前目录-./mysql_data:/var/lib/mysql# 执行当前目录data中的sql脚本只在初始化时执行-./data:/docker-entrypoint-initdb.d command:--character-set-serverutf8mb4--collation-serverutf8mb4_unicode_ci# 后端项目server:container_name:server build:./server ports:-9003:9003networks:-Stara_network depends_on:-mysql# 备份服务backup:image:mysql:8.0container_name:mysql_backup# 每3小时自动备份数据command:/bin/sh-cwhile true; do mysqldump -h mysql -u root -pliuStara-AI ThriveX /backup/ThriveX_$(date %F_%T).sql; sleep 10800; done# 将容器中的目录映射到当前目录volumes:-./backup:/backup networks:-Stara_network depends_on:-mysql# 网络配置networks:# 创建网络Stara_network:# 数据卷配置如果映射到宿主机则需要删除此配置否则会导致冲突# volumes:# mysql_data:运行脚本docker compose-p 自定义项目名 up-d--builddocker compose-p自定义项目名-fdocker-compose.ymlup-d--builddocker compose-p Stara-f compose_after.yaml up-d--build单独构建单独构建当前项目中的server服务。重启、停止、启动等命令同理docker-compose build server如果名称不是默认的compose.yaml那么可以这样做docker-compose-f data_compose.yaml build server常用命令docker compose up -d启动所有的服务。docker compose -p down停止并删除所有容器、网络如果加上-v则删除所有卷。docker compose -p 项目名 ps列出所有运行中的服务。docker compose -p 项目名 logs查看服务的日志。docker compose exec service_name command在运行中的服务容器中执行命令。查看当前运行的项目docker compose-p Stara ps12. Nginx安装 Nginx# 拉取镜像docker pull nginx# 创建容器docker run--name nginx-p80:80-p443:443-v/etc/nginx:/etc/nginx:ro-d nginx如果修改了配置文件执行以下命令重载配置nginx-sreloaddocker 相关配置# 服务配置services:# 前端项目blog:# 容器名称container_name:blog# dockerfile的目录位置build:./blog# 端口映射ports:-9001:9001volumes:-blog_data:/Stara# 数据卷配置volumes:blog_data:# 使用官方的Node.js镜像作为基础镜像FROM node:20-alpine# 设置工作目录使用标准路径 /appWORKDIR/app# 配置 npm 镜像源RUN npm configsetregistry https://registry.npmmirror.com# 复制依赖文件利用Docker缓存层COPY package*.json.# 安装依赖RUN npm install# 复制源代码依赖安装完成后COPY..# 构建Next.js应用RUN npm run build# 暴露端口建议使用Next.js默认端口3000除非有特殊配置EXPOSE3000# 健康检查可选HEALTHCHECK--interval30s--timeout3s--start-period5s--retries3\ CMD curl-f http://localhost:3000/||exit1# 启动Next.js应用CMD[npm,start]配置 nginx.conf 反向代理实现绑定域名events{}http{server{listen80;server_name xxxxxx;# 绑定域名location/{proxy_pass http://blog:9001;# 反向代理proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}}注意使用blog容器名需要nginx和blog处于同一个网络配置 ssl证书如果使用docker那么证书的ssl_certificate路径需要在容器内在宿主机无法访问events{}http{server{listen443ssl;server_name xxxx;# 证书路径ssl_certificate/etc/nginx/ssl/xxx.net.pem;ssl_certificate_key/etc/nginx/ssl/xxx.net.key;# 证书相关配置ssl_protocols TLSv1.2TLSv1.3;ssl_ciphers HIGH:!aNULL:!MD5;location/{proxy_pass http://blog:9001;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}# 配置 http 重定向到 httpsserver{listen80;server_name xxx;return301https://$server_name$request_uri;}}部署静态网站events{}http{server{listen80;server_name admin.xxxx;location/{root/etc/nginx/html/thrive;# 项目路径index index.html index.htm;# 项目入口}}}/etc/nginx/html/Stara/index.html!DOCTYPEhtmlhtmllangenheadmetacharsetUTF-8metanameviewportcontentwidthdevice-width, initial-scale1.0title一个网页/title/headbodyh1Hello World!/h1/body/html部署多个网站每个网站对应每个server块不用担心80和443端口冲突nginx是根据server_name来区分网站的events {} http { # 前端项目 server { listen 443 ssl; server_name xxxx; ssl_certificate /etc/nginx/ssl/xxx.net.pem; ssl_certificate_key /etc/nginx/ssl/xxx.net.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; location / { proxy_pass http://blog:9001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } server { listen 80; server_name xxx; return 301 https://$server_name$request_uri; } # 控制端项目 server { listen 80; server_name admin.xxx; location / { root /etc/nginx/html/Stara; index index.html index.htm; try_files $uri $uri/ /index.html; } } }解决单页面刷新404问题location / { try_files $uri $uri/ /index.html; }12.1 Nginx 数据卷映射将宿主机的数据映射到容器内docker run -d \ -p 80:80 \ -p 18080:18080 \ -p 18081:18081 \ -p 18082:18082 \ -v /Users/yang/Desktop/临时/nginx/nginx.conf:/etc/nginx/nginx.conf \ -v /Users/yang/Desktop/临时/nginx/html:/etc/nginx/html \ --name nginx \ nginx:latest/Users/DELL/Desktop/临时/nginx/nginx.confworker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/json; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; # 指定前端项目所在的位置 location / { root html; } error_page 500 502 503 504 /50x.html; location /50x.html { root html; } } server { listen 18080; server_name localhost; # 指定前端项目所在的位置 location / { # 这里写容器内的位置不是宿主机的位置 root /etc/nginx/html/hmall-portal; } error_page 500 502 503 504 /50x.html; location /50x.html { root html; } location /api { rewrite /api/(.*) /$1 break; proxy_pass http://localhost:8080; } } server { listen 18081; server_name localhost; # 指定前端项目所在的位置 location / { root /etc/nginx/html/hmall-admin; } error_page 500 502 503 504 /50x.html; location /50x.html { root html; } location /api { rewrite /api/(.*) /$1 break; proxy_pass http://localhost:8080; } } server { listen 18082; server_name localhost; # 指定前端项目所在的位置 location / { root /etc/nginx/html/hm-refresh-admin; } error_page 500 502 503 504 /50x.html; location /50x.html { root html; } location /api { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-PORT $remote_port; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; rewrite /api/(.*) /$1 break; proxy_pass http://localhost:8080; } } # upstream backend { # server 127.0.0.1:8081 max_fails5 fail_timeout10s weight1; # server 127.0.0.1:8082 max_fails5 fail_timeout10s weight1; # } }Docker容器化技术提供了一套完整的应用封装、部署和运行解决方案涵盖从基础环境搭建、镜像构建、容器管理到网络配置、数据持久化和生产部署的全流程。核心包括通过Dockerfile实现应用环境的标准化封装利用镜像分层机制提升构建效率通过容器网络实现服务间安全通信借助数据卷确保状态持久化使用Docker Compose编排多服务应用配合Nginx实现生产环境反向代理最终通过标准流程将镜像发布到仓库完成持续交付。这一体系实现了开发与生产环境的一致性显著提升了应用部署效率和运维可靠性。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站链接推广怎么做wordpress 幻灯片自定义

想要在Windows系统上实现完美的游戏手柄兼容性?ViGEmBus虚拟手柄驱动为您提供革命性的解决方案。这款强大的内核级驱动程序能够精准模拟主流游戏手柄,让任何输入设备都能被系统识别为官方认证的Xbox 360或DualShock 4手柄。 【免费下载链接】ViGEmBus …

张小明 2025/12/25 10:29:10 网站建设

商城网站设计配色思想初学网站开发书籍

PyRobot终极指南:快速掌握开源机器人研究平台 【免费下载链接】pyrobot PyRobot: An Open Source Robotics Research Platform 项目地址: https://gitcode.com/gh_mirrors/pyr/pyrobot 想要快速上手机器人研究却苦于复杂的配置?🤔 PyR…

张小明 2025/12/28 3:36:57 网站建设

苏州企业网站设计企业广州个性化网站建设

Open WebUI终极指南:构建高性能自托管AI交互平台 【免费下载链接】open-webui Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 WebUI,设计用于完全离线操作,支持各种大型语言模型(LLM)运行器,包括Ol…

张小明 2025/12/28 13:42:06 网站建设

与电子商务网站建设有关实训报告云南网络公司排名

欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。 📌 模块概述 推荐分享模块是MovieTracker应用中用于分享和推荐影片的功能。用户可以将喜欢的影片分享给朋友,或者推荐给其他用户。推荐分享功能支持多种分享方式&#x…

张小明 2025/12/27 22:49:58 网站建设

wordpress小说站模板四川建设厅下载专区网站

从Hadoop到数据湖:大数据架构演进全解析 关键词:Hadoop、数据湖、大数据架构、演进、数据存储、数据分析 摘要:本文将带大家一步一步了解大数据架构从Hadoop到数据湖的演进过程。我们会先介绍Hadoop的基本概念和特点,接着探讨它在大数据处理中遇到的问题,从而引出数据湖的…

张小明 2025/12/25 10:19:04 网站建设

同信.长春网站建设做网站凡科如何

深入理解内存管理:交换、映射与泄漏检测 1. 内存交换(Swapping) 内存交换的核心思想是预留一些存储空间,让内核可以将未映射到文件的内存页面放置其中,从而释放内存以供其他用途。通过交换文件的大小,有效增加了物理内存的大小。不过,这并非万能之策,将页面复制到交换…

张小明 2025/12/31 5:03:24 网站建设