贝博恩创新科技网

Docker Windows教程,环境配置与容器运行全流程?

Docker for Windows 完整教程

目录

  1. 前置条件:你需要什么?
  2. 第一步:安装 Docker Desktop for Windows
  3. 第二步:验证安装与配置
  4. 第三步:核心概念快速入门
    • 镜像
    • 容器
    • Dockerfile
  5. 第四步:实战演练 - 部署一个 Nginx 网站
  6. 第五步:实战演练 - 构建一个自定义 Web 应用
    • 创建一个简单的 Node.js 应用
    • 编写 Dockerfile
    • 构建镜像
    • 运行容器
  7. 第六步:常用 Docker 命令速查
  8. 第七步:Docker Compose 简介(多容器应用)
  9. 常见问题与解决方案

前置条件:你需要什么?

在安装 Docker 之前,请确保你的 Windows 系统满足以下要求:

Docker Windows教程,环境配置与容器运行全流程?-图1
(图片来源网络,侵删)
  • 操作系统版本
    • Windows 10 64-bit: Pro, Enterprise, or Education (Build 16299 or higher)
    • Windows 11 64-bit: Home, Pro, Enterprise, or Education
  • 硬件要求
    • CPU:支持虚拟化技术,这通常在 BIOS 中默认开启,但某些情况下可能需要手动检查。
    • 内存:至少 4GB RAM,推荐 8GB 或更多
    • 硬盘空间:至少 20GB 可用空间。
  • 虚拟化技术
    • Hyper-V:Docker for Windows 依赖于 Hyper-V 来创建轻量级的虚拟机(Linux VM)来运行容器,Windows 10/11 的专业版和企业版通常默认包含 Hyper-V。
    • WSL 2 (Windows Subsystem for Linux 2):这是 Docker Desktop 的推荐后端,它提供了一个完整的 Linux 内核,性能更好,与 Windows 文件系统集成更紧密,WSL 2 通常会随 Docker Desktop 自动安装和配置。

如何检查 Hyper-V 是否已启用?

  1. 打开“控制面板” -> “程序” -> “程序和功能” -> “启用或关闭 Windows 功能”。
  2. 在列表中勾选 “Hyper-V”“适用于 Linux 的 Windows 子系统”
  3. 点击“确定”,系统会自动重启并安装所需组件。

第一步:安装 Docker Desktop for Windows

Docker for Windows 现在被称为 Docker Desktop,安装过程非常简单。

  1. 下载安装程序

  2. 运行安装程序

    Docker Windows教程,环境配置与容器运行全流程?-图2
    (图片来源网络,侵删)
    • 双击下载的 Docker Desktop Installer.exe 文件。
    • 按照安装向导的提示进行操作,通常只需一路点击 "Next" 或 "OK" 即可。
  3. 启动 Docker Desktop

    • 安装完成后,Docker Desktop 会自动启动,你会在 Windows 任务栏的右下角看到 Docker 的鲸鱼图标。
    • 首次启动时,Docker 可能需要下载一些初始组件(如 Linux 内镜),这需要一些时间,请耐心等待。

第二步:验证安装与配置

当 Docker 图标从静止变为活动状态(或显示绿色的对勾)时,表示 Docker 服务已成功启动。

  1. 打开命令行工具

    • 打开 PowerShell命令提示符 (CMD)
  2. 运行 docker version 命令

    Docker Windows教程,环境配置与容器运行全流程?-图3
    (图片来源网络,侵删)
    docker version

    如果安装成功,你将看到客户端和服务端的版本信息,表明 Docker 可以与守护进程通信。

  3. 运行 docker run hello-world 命令

    docker run hello-world

    这个命令会从 Docker Hub 下载一个 hello-world 镜像,并在容器中运行它,如果一切正常,你会看到一条欢迎消息,这证明了你的 Docker 环境已经完全可用。


第三步:核心概念快速入门

在开始实战前,理解这三个核心概念至关重要。

  • 镜像

    • 是什么:一个只读的模板,用来创建容器,可以把它想象成一个虚拟机的快照或安装光盘的 ISO 文件。
    • 特点:包含了运行某个应用所需的所有代码、运行时、库、环境变量和配置文件。
    • 来源:可以从 Docker Hub 这样的公共仓库拉取,也可以自己创建。
  • 容器

    • 是什么:镜像的运行实例,它是轻量级、可移植、自包含的执行环境。
    • 特点:一个镜像可以运行多个容器,每个容器都是相互隔离的,拥有自己的文件系统、进程空间和网络栈。
    • 类比:如果镜像是“蓝图”,那么容器就是“根据蓝图建造好的房子”。
  • Dockerfile

    • 是什么:一个文本文件,包含了构建 Docker 镜像所需的所有指令。
    • 作用:它记录了如何从一个基础镜像开始,一步步添加代码、安装依赖、配置环境,最终创建出你所需的自定义镜像,这确保了构建过程的自动化和可重复性。

第四步:实战演练 - 部署一个 Nginx 网站

让我们用最简单的方式体验 Docker:直接运行一个现成的 Nginx Web 服务器。

  1. 运行 Nginx 容器 在 PowerShell 中执行以下命令:

    docker run --name my-web-server -d -p 8080:80 nginx
    • --name my-web-server:给容器起一个容易记的名字。
    • -d:在后台(Detached mode)运行容器。
    • -p 8080:80:将主机的 8080 端口映射到容器的 80 端口,这样你就可以通过 http://localhost:8080 访问 Nginx 服务。
    • nginx:要运行的镜像名称。
  2. 验证容器是否运行

    docker ps

    你应该能看到 my-web-server 容器正在运行。

  3. 访问网站 打开你的浏览器,访问 http://localhost:8080,你应该能看到 Nginx 的欢迎页面。

  4. 停止并删除容器 当你使用完后,可以清理掉这个容器。

    • 停止容器:
      docker stop my-web-server
    • 删除容器:
      docker rm my-web-server

第五步:实战演练 - 构建一个自定义 Web 应用

我们来构建自己的应用并为其创建 Docker 镜像,我们将创建一个简单的 Node.js "Hello World" 应用。

A. 创建一个简单的 Node.js 应用

  1. 创建一个项目文件夹:

    mkdir my-docker-app
    cd my-docker-app
  2. 创建 package.json 文件: 在 my-docker-app 文件夹中,创建一个名为 package.json 的文件,内容如下:

    {
      "name": "my-docker-app",
      "version": "1.0.0",
      "description": "A simple Node.js app for Docker",
      "main": "server.js",
      "scripts": {
        "start": "node server.js"
      },
      "author": "",
      "license": "ISC"
    }
  3. 创建 server.js 文件: 在同一文件夹下,创建 server.js如下:

    const http = require('http');
    const hostname = '0.0.0.0'; // 监听所有网络接口,以便从容器外部访问
    const port = 3000;
    const server = http.createServer((req, res) => {
      res.statusCode = 200;
      res.setHeader('Content-Type', 'text/plain');
      res.end('Hello from Docker!\n');
    });
    server.listen(port, hostname, () => {
      console.log(`Server running at http://${hostname}:${port}/`);
    });

B. 编写 Dockerfile

my-docker-app 文件夹中,创建一个名为 Dockerfile(没有后缀名)的文件,内容如下:

# 1. 使用官方的 Node.js 镜像作为基础镜像
# alpine 是一个轻量级的 Linux 发行版
FROM node:18-alpine
# 2. 在容器内创建一个工作目录
WORKDIR /usr/src/app
# 3. 将 package.json 和 package-lock.json (如果存在) 复制到工作目录
# 这一步可以充分利用 Docker 的缓存机制
COPY package*.json ./
# 4. 运行 npm install 安装应用依赖
RUN npm install
# 5. 将应用代码(当前目录下的所有文件)复制到工作目录
COPY . .
# 6. 暴露容器将要监听的端口
EXPOSE 3000
# 7. 定义容器启动时要执行的命令
# 这里相当于在容器内执行 'npm start'
CMD [ "npm", "start" ]

C. 构建镜像

my-docker-app 文件夹下,打开 PowerShell,执行以下命令来构建镜像:

docker build -t my-node-app .
  • -t my-node-app:给镜像打上 my-node-app 的标签。
  • 表示 Dockerfile 位于当前目录。

构建完成后,你可以用 docker images 命令查看新创建的镜像。

D. 运行容器

基于我们刚刚构建的镜像来运行一个容器:

docker run --name my-app-container -d -p 4000:3000 my-node-app
  • -p 4000:3000:将主机的 4000 端口映射到容器的 3000 端口。

E. 验证结果

打开浏览器,访问 http://localhost:4000,你应该能看到页面显示 "Hello from Docker!"。


第六步:常用 Docker 命令速查

命令 描述 示例
docker pull <image> 从仓库拉取一个镜像 docker pull nginx
docker run <options> <image> 运行一个容器 docker run -d -p 80:80 nginx
docker ps 列出当前正在运行的容器 docker ps
docker ps -a 列出所有容器(包括已停止的) docker ps -a
docker stop <container> 停止一个正在运行的容器 docker stop my-app-container
docker start <container> 启动一个已停止的容器 docker start my-app-container
docker rm <container> 删除一个已停止的容器 docker rm my-app-container
docker rmi <image> 删除一个镜像 docker rmi my-node-app
docker logs <container> 查看容器的日志输出 docker logs my-app-container
docker exec -it <container> <command> 在运行的容器中执行命令 docker exec -it my-app-container sh
docker build -t <tag> . 根据 Dockerfile 构建镜像 docker build -t my-app .

第七步:Docker Compose 简介

当你需要管理多个容器(例如一个 Web 服务器 + 一个数据库)时,手动使用 docker run 会变得很复杂。Docker Compose 就是解决这个问题的工具。

  • 是什么:一个用于定义和运行多容器 Docker 应用程序的工具。
  • 如何工作:你通过一个 docker-compose.yml 文件来定义你的应用服务(如 web, db),然后使用一个命令就可以启动和停止整个应用。

docker-compose.yml 示例(简化版)

version: '3.8'
services:
  web:
    build: .
    ports:
      - "4000:3000"
    depends_on:
      - db
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: example
  • 启动所有服务docker-compose up -d
  • 停止并删除所有服务docker-compose down

对于初学者,先掌握单容器操作,再学习 Docker Compose 会更容易。


常见问题与解决方案

  • 问题docker run 提示 docker: Error response from daemon: driver failed programming external connectivity on endpoint...

    • 原因:通常是因为 Hyper-V 或 WSL 2 配置有问题,或者端口已被其他程序占用。
    • 解决
      1. 检查端口是否被占用:netstat -ano | findstr :8080
      2. 尝试重启 Docker Desktop。
      3. 确保 Windows 的 Hyper-V 功能已正确启用。
  • 问题:Docker Desktop 启动很慢,或者一直卡在 "Starting..."。

    • 原因:可能是虚拟机磁盘空间不足,或系统资源紧张。
    • 解决
      1. 检查 C 盘空间。
      2. 在 Docker Desktop 设置中,可以尝试切换 WSL 2 和 Hyper-V 后端(设置 -> General -> "Use the WSL 2 based engine")。
  • 问题:在 Windows 中编辑文件,容器内没有实时更新。

    • 原因:Docker 默认将文件挂载为只读。
    • 解决:在 docker run 命令中使用 -v 参数进行数据卷挂载,并确保路径正确,或者,在 Docker Desktop 设置中启用 "File sharing" 并添加你的项目目录。
分享:
扫描分享到社交APP
上一篇
下一篇