Docker(②创造nginx容器)
出现 sudo: docker: command not found 说明 WSL2 的 Ubuntu 子系统中没有正确安装或配置 Docker 命令。这通常是因为 Docker 客户端未在 Ubuntu 中安装,或者 Docker Desktop 与 WSL2 的集成未启用。按以下步骤解决:
步骤 :确认 Docker Desktop 已启用 WSL2 集成
打开 Docker Desktop,点击顶部菜单栏的 Settings(齿轮图标)。
左侧导航栏选择 Resources → WSL Integration。
确保 “Enable integration with my default WSL distro” 已勾选,且你的 Ubuntu 子系统(通常显示为 Ubuntu)右侧的开关已打开(蓝色为启用)。
点击 Apply & Restart 重启 Docker Desktop,使配置生效。
常用 Docker 命令
# 查看运行中的容器
sudo docker ps# 查看所有容器(包括停止的)
sudo docker ps -a# 停止容器(mynginx 是容器名)
sudo docker stop mynginx# 启动已停止的容器
sudo docker start mynginx# 删除容器(需先停止)
sudo docker rm mynginx# 查看本地镜像
sudo docker images# 删除镜像(需先删除依赖该镜像的容器)
sudo docker rmi nginx
镜像(Image) 类似 “父类”:它是一个只读的模板,包含了运行应用所需的所有代码、依赖、配置等(相当于类的定义)。
容器(Container) 类似 “实例”:是镜像运行起来的动态实例(相当于类创建的对象)。多个容器可以从同一个镜像创建,就像一个类可以实例化多个对象。
在 Docker 中,“实例化创建容器” 的核心命令是 docker run
,它通过指定一个镜像(相当于 “模板”)来创建并启动一个容器实例。
用官方镜像快速创建容器
以创建一个 Nginx 容器为例(Nginx 是一个网页服务器,官方镜像已做好,直接可用):
# 格式:docker run [选项] 镜像名称 [容器内执行的命令]
sudo docker run --name mynginx -p 8080:80 -d nginx
命令拆解:
--name mynginx:给容器起个名字(mynginx),方便后续管理(不指定则 Docker 会自动生成一个随机名)。
-p 8080:80:端口映射(关键):
把宿主机(你的 Ubuntu 或 Windows)的 8080 端口,和容器内的 80 端口(Nginx 默认端口)关联起来。这样访问 http://localhost:8080 就能打开容器里的 Nginx 页面。
-d:让容器在后台运行(“守护进程” 模式),不会占用当前终端。
nginx:指定要用的镜像名称(Docker 会先检查本地是否有这个镜像,没有则自动从网上拉取)。
创建后进入容器内部操作
进入正在运行的容器
用 docker exec 命令进入 mynginx 容器的终端:
sudo docker exec -it mynginx /bin/bash
执行后会进入容器内部的命令行(提示符会变成类似 root@3b77da21e3d8:/#)。
修改默认网页
Nginx 的默认页面文件在 /usr/share/nginx/html/index.html
,用 nano
编辑器修改(如果容器内没有 nano
,先安装):
# 安装 nano 编辑器(容器内操作)
apt update && apt install -y nano# 编辑默认页面
nano /usr/share/nginx/html/index.html
随便改点内容(比如把 “Welcome to nginx!” 改成 “Hello Docker!”),保存退出(Ctrl+O
保存,Ctrl+X
退出)。
对比维度 | Flask | Nginx |
---|---|---|
本质 | Python Web 开发框架 | 高性能 HTTP 服务器 / 反向代理 |
作用 | 开发动态内容(处理业务逻辑) | 转发请求、处理静态资源、抗并发 |
典型场景 | 写用户登录接口、动态网页 | 部署应用、做负载均衡、托管图片 |
性能特点 | 处理逻辑强,但抗并发能力较弱 | 抗并发极强,适合处理静态内容 |
Flask 是 “做内容的”:它是 Python 的一个轻量级 Web 框架,用来开发动态网页或 API 接口。比如你写一个用户注册页面、查询数据的接口,需要用 Flask 这类框架来处理逻辑(接收用户输入、操作数据库、生成动态内容)。
Nginx 是 “传内容的”:它是一个高性能的服务器,主要负责接收用户的请求、传递内容、处理并发。比如 Flask 生成了一个动态页面,Nginx 会把这个页面高效地 “转发” 给用户;或者当有 1 万个用户同时访问你的 Flask 应用时,Nginx 可以合理分配请求,避免 Flask 被压垮。
用户请求先到 Nginx(相当于 “大门”);
如果是静态资源(如图片、CSS),Nginx 直接返回,速度快;
如果是动态请求(如用户登录、数据查询),Nginx 转发给 Gunicorn;
Gunicorn 把请求交给 Flask 处理,Flask 生成结果后通过 Gunicorn、Nginx 返回给用户。
简单说:Gunicorn 是 Flask 的 “生产级保镖”,负责高效稳定地运行 Flask;Nginx 是 “门卫 + 快递员”,负责接待用户、分发静态资源、转发动态请求。