WSL2子系统 Ubuntu Docker安装并安装运行nginx

首先下载Linux内核更新包,防止出现各种莫名其妙问题(如版本不兼容):下载链接

打开控制面板->启用或关闭windows功能,勾选一下“适用Linux的Windows子系统”选项
在这里插入图片描述

WSL安装

进入Microsoft Store 搜索WSL
在这里插入图片描述
在这里插入图片描述
安装完成后打开,会等待几分钟,然后创建账号密码

docker安装

方法一:使用官方安装脚本自动安装

安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

方法二:手动安装

1.更换镜像源

备份默认源:

cp /etc/apt/sources.list /etc/apt/sourses.list.bak

编辑文件:

vim /etc/apt/sources.list

删除原有内容并替换为:

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

更新源:

apt-get update
apt-get upgrade
2.Docker安装

卸载旧版本(如果有):

apt-get remove docker docker-engine docker.io containerd runc

设置存储库:
安装软件包以允许 apt 通过 HTTPS 使用存储库

apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

添加 Docker 的官方 GPG 密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

设置稳定的存储库

add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

更新 apt 包索引

apt-get update

安装docker和脚手架

apt-get install docker-ce docker-ce-cli containerd.io

查看是否安装成功:

docker --version
# 启动docker
service docker start

使用docker命令不加sudo操作,执行如下命令:

sudo gpasswd -a 你的用户名 docker

安装并运行nginx

创建目录(目的是和nginx的目录映射)

mkdir -p /data/docker/nginx
cd /data/docker/nginx/
mkdir conf
mkdir logs
mkdir www

docker 运行nginx

docker run -d -p 8081:80 --name nginx --net bridge -v /data/docker/nginx/www:/usr/share/nginx/html -v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/docker/nginx/logs:/var/log/nginx nginx

命令解释:

-d 设置容器在后台一直运行
-p 8081:80 端口进行映射 将本地8081端口映射到容器内部的80端口
--name nginx 设置容器名称
--net bridge  指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
-v 绑定一个卷,映射容器内部目录到本地

此时会报出错误

docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused “process_linux.go:424: container init caused “rootfs_linux.go:58: mounting “/data/docker/nginx/conf/nginx.conf” to rootfs “/var/lib/docker/overlay2/73ad6cfead8c2d9c1d25469cccff7d86029ce6308a83416b2ef08464c8c5f76f/merged” at “/var/lib/docker/overlay2/73ad6cfead8c2d9c1d25469cccff7d86029ce6308a83416b2ef08464c8c5f76f/merged/etc/nginx/nginx.conf” caused “not a directory”””: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

原因是我们的conf中没有配置文件
可以按照如下步骤操作:

第一步:docker run -d -p 8081:80 --name nginx --net bridge -v /data/docker/nginx/www:/usr/share/nginx/html -v /data/docker/nginx/logs:/var/log/nginx nginx
第二步:docker exec -it nginx /bin/bash (进入容器 获取文件)
第三步:cd /etc/nginx/ (这里主要获取配置文件路径的)
第四步:exit
第五步:cd /data/docker/nginx/conf/
第六步:docker cp cad344a2a306:/etc/nginx/nginx.conf .
ps:文件copy成功后 把nginx容器先删除掉
第七步:docker rm -f nginx
第八步:docker run -d -p 8081:80 --name nginx --net bridge -v /data/docker/nginx/www:/usr/share/nginx/html -v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/docker/nginx/logs:/var/log/nginx nginx

启动正常
PS:访问可能会403 因为/docker/nginx/www/ 里面没有index.html放进去就好了

<think>好的,用户让我介绍一下DockerWSL。首先,我需要回想一下用户之前的提问历史,他之前问过APT,现在转向容器化和虚拟化工具,可能是想了解开发环境或者系统管理相关的知识。用户可能是在学习Linux工具,或者需要搭建开发环境,所以需要比较DockerWSL的区别与联系。 首先,我得确认自己对DockerWSL的理解是否正确。Docker是一个容器化平台,用于打包和运行应用及其依赖,而WSL是Windows的子系统,允许在Windows上运行Linux环境。接下来要分析它们的核心功能、使用场景、技术差异,以及优缺点。 用户可能想知道这两者各自适合什么情况,或者如何结合使用。比如,开发者可能在Windows上使用WSL来获得Linux体验,然后在其中运行Docker容器进行应用部署。需要举例子来说明两者的协作,比如在WSL2安装Docker Desktop的情况。 要注意用户的技术背景,可能不是特别深入,所以解释时要避免过于专业的术语,但之前的对话中用户对APT有了解,可能有一定的Linux基础。需要结构清晰,分点对比,帮助用户逐步理解。 可能需要提到WSL1和WSL2的区别,特别是WSL2使用虚拟化技术,性能更好,更适合与Docker集成。同时,Docker在Windows上的传统方式是通过Docker Toolbox或Hyper-V,但现在更推荐WSL2后端,这样更高效。 还要强调两者的互补性,比如WSL提供Linux环境,而Docker提供应用隔离和部署能力。用户可能在开发跨平台应用,需要这两种工具的结合使用。 需要检查是否有技术细节错误,比如Docker的核心技术是否是Namespace和CGroup,是的。而WSL2是否基于Hyper-V,是的。同时,Docker Desktop在WSL2中的运行方式是否正确,是的,通过集成WSL2的后端,提升性能。 最后,总结部分需要简明扼要,说明各自适用场景以及如何配合使用,帮助用户做出选择。可能用户需要决定在Windows环境下如何搭建开发环境,所以需要明确两者的优势和协作方式。</think>### DockerWSL 的核心解析 #### 1. **Docker**(容器化平台) **核心功能** - **容器化技术**:通过 Linux 的 `Namespace` 和 `CGroup` 实现进程隔离,打包应用及其依赖(如 Python + Redis 环境)到独立容器 - **镜像管理**:基于分层文件系统(如 `OverlayFS`)构建镜像(例如:`nginx:alpine`) - **跨平台部署**:通过 `docker-compose.yml` 定义多容器协作(如 Web 服务 + 数据库) **典型场景** ```bash # 开发环境标准化 docker run -d -p 8080:80 --name my_nginx nginx # 启动 Web 服务器 docker exec -it my_nginx bash # 进入容器调试 ``` **技术优势** - 资源占用低(相比虚拟机,内存节省约 50%) - 快速启动(容器启动时间 <1 秒) - 支持 CI/CD 流水线集成(如 GitHub Actions 调用 Docker 构建) --- #### 2. **WSL**(Windows Subsystem for Linux) **核心功能** - **Linux 子系统**:在 Windows 内核上运行未修改的 Linux ELF 二进制文件(如 Ubuntu、Debian) - **文件系统互通**:通过 `/mnt/c` 直接访问 Windows 的 `C:\` 盘 - **混合调用**:在 PowerShell 中执行 `wsl ls /home` 调用 Linux 命令 **版本差异** | | WSL1 | WSL2 | |----------|-------------------------------|-------------------------------| | 架构 | 转换层(系统调用兼容) | 轻量级虚拟机(基于 Hyper-V) | | 性能 | 文件 I/O 较慢 | 接近原生 Linux(IO 提升 20x) | | 兼容性 | 支持 GUI 应用(需 X Server) | 完整内核支持(如 Docker) | **典型使用** ```powershell wsl --install -d Ubuntu-22.04 # 安装指定发行版 wsl -d Ubuntu-22.04 -e python3 app.py # 直接运行 Linux 环境下的脚本 ``` --- #### 3. **关键对比** | **维度** | Docker | WSL | |----------------|---------------------------------|--------------------------------| | **核心技术** | 容器隔离(Namespace/CGroup) | 系统调用转换(WSL1)或虚拟化(WSL2) | | **资源消耗** | 低(仅隔离必要进程) | 中(WSL2 需分配固定内存) | | **主要用途** | 应用打包与跨环境部署 | 在 Windows 中无缝使用 Linux 工具链 | | **文件交互** | 需挂载卷(`-v /host:/container`) | 直接访问双方文件系统 | --- #### 4. **协作场景** **案例:在 WSL2运行 Docker** 1. 启用 WSL2 安装 Ubuntu 2. 安装 Docker Desktop 勾选 **"Use WSL 2 based engine"** 3. 在 WSL 终端直接调用 Docker: ```bash docker run --rm -it python:3.11-slim # 无需启动额外虚拟机 ``` **优势组合** - 开发者在 Windows 使用 VS Code 编辑代码,通过 WSL 的 Linux 环境调试 - 最终通过 Docker 容器发布到云服务器(如 AWS EC2) --- ### 总结 - **选 Docker**:需快速部署标准化应用(如微服务集群) - **选 WSL**:需在 Windows 深度使用 Linux 开发工具(如 `gcc`、`apt`) - **最佳实践**:在 WSL2运行 Docker,兼顾开发便利性与部署一致性
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值