配置Systemd

  1. 启动WSL并进入Ubuntu实例。

  2. 查看WSL配置文件,cat /etc/wsl.conf 确保在引导选项中systemd被设置为true。若尚未设置,需在配置中添加:

    1
    2
    [boot]  
    systemd = true
  3. 执行wsl.exe shutdown命令,让WSL重启以启用systemd。

  4. 重新进入Ubuntu实例后,通过systemctl status检查systemd状态,可看到控制组的树形输出,其中会列出所有进程及其PID,确认系统功能正常。通过systemctl list-unit-files –type=service可发现当前无Docker服务运行。

安装Docker

  1. 访问Docker官网,在文档中找到适用于Ubuntu的快速安装脚本。

  2. 首先通过curl下载脚本:

    1
    curl -fsSL https://get.docker.com -o get-docker.sh  
  3. 执行脚本安装Docker:

    1
    sudo sh get-docker.sh  

    等待20秒

  4. 安装完成后,可通过docker version查看Docker引擎的客户端版本、服务器版本,以及引擎、containerd、runc和Docker init的具体版本信息。

以非root用户运行Docker

  1. 直接运行docker run hello-world会遇到权限拒绝错误;
  2. 执行id命令,确认当前用户不在docker组中。若需解决:
    • 执行groupadd docker(若组已存在,此命令无影响)。
    • 执行`usermod -aG docker $USER,将当前用户添加到docker组。
    • 执行newgrp docker刷新用户组权限。
  3. 再次执行docker run hello-world,系统会拉取镜像并显示“hello from docker”,确认非root用户已可正常运行Docker。

网络问题

  • docker 的代理设置:

    1
    sudo mkdir -p /etc/docker
  • 设置加速器(可用加速器经常变化,网络搜索最新的服务器):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    sudo tee /etc/docker/daemon.json <<EOF
    {
    "registry-mirrors": [
    "https://docker.xuanyuan.me",
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run"
    ]
    }
    EOF
  • 重启docker服务,使其生效:

    1
    sudo systemctl daemon-reload && sudo systemctl restart docker

配置Docker随系统启动

借助此前配置的systemd,我们可以让Docker在WSL启动时自动运行:

  1. 启用Docker服务自启动:

    1
    sudo systemctl enable docker.service  
  2. 启用containerd服务自启动:

    1
    sudo systemctl enable containerd.service  
  3. 通过systemctl status docker和systemctl status containerd检查服务状态,若显示“enabled”,则表示已成功配置为开机启动。

安装Docker Compose

  1. 再次访问Docker官网文档,执行以下命令:

    1
    2
    sudo apt-get update  
    sudo apt-get install docker-compose-plugin
  2. 检查Docker Compose版本(示例版本为2.3.6.2):

    1
    docker compose version  
  3. 验证功能:在测试项目中执行docker compose up,启动后访问localhost:8000,刷新页面可看到Flask应用正常运行。

    1
    2
    测试项目构建方法,官网链接:
    https://docs.docker.com/compose/gettingstarted/
  4. 测试项目推荐的Dockerfile配置(官网配置有网络问题,耗时很长):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # syntax=docker/dockerfile:1
    FROM python:3.10-slim
    WORKDIR /app
    RUN echo "deb http://mirrors.aliyun.com/debian bookworm main" > /etc/apt/sources.list && \
    echo "deb http://mirrors.aliyun.com/debian bookworm-updates main" >> /etc/apt/sources.list && \
    apt-get update && apt-get install -y --no-install-recommends gcc && \
    rm -rf /var/lib/apt/lists/*
    COPY requirements.txt .
    RUN pip install --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
    COPY . .
    ENV FLASK_APP=app.py
    ENV FLASK_RUN_HOST=0.0.0.0
    EXPOSE 5000
    CMD ["flask", "run", "--debug"]

参考

https://docs.qq.com/aio/DSXd3a1RmaFRTZXBP?p=pNPW6DCKQ8PQF6kZfzjUtr