如何在 Windows 上安装 Docker 25.0.3

简介

本教程将指导您如何在 windows 系统上安装 Docker 25.0.3。Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到各种操作系统上。Docker使应用的部署和扩展变得更加简单和高效。

前置要求

  • Windows 操作系统
  • 稳定的网络连接
  • 管理员权限
  • 64位操作系统
  • 至少4GB的RAM
  • Windows 10专业版或企业版 (1903+)

安装方法

Docker Desktop安装

Docker Desktop是官方推荐的安装方式,它包含了Docker Engine、Docker CLI、Docker Compose和其他工具。

1. 下载Docker Desktop安装包

访问Docker官方网站,下载Docker Desktop for Windows安装包。

https://www.docker.com/products/docker-desktop/

2. 运行安装程序

双击下载的安装包,按照向导完成安装。

安装过程中,您可能需要启用Hyper-V和WSL 2功能。安装程序会自动执行这些配置。

3. 启动Docker Desktop

安装完成后,从开始菜单启动Docker Desktop。初次启动时,可能需要几分钟来完成初始化。

使用Winget安装

Windows的包管理器Winget提供了一种简便的方式来安装Docker Desktop。

1. 使用Winget安装Docker Desktop

打开PowerShell或命令提示符,执行以下命令:

winget install Docker.DockerDesktop

2. 验证安装

安装完成后,从开始菜单启动Docker Desktop。

验证安装

1. 验证Docker版本

检查Docker是否正确安装及其版本:

docker --version
Docker version 25.0.3, build 4debf41

2. 验证Docker守护进程是否运行

运行一个简单的容器来验证Docker守护进程是否正常运行:

docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

3. 检查Docker信息

查看Docker系统信息:

docker info

这个命令会显示Docker的详细配置信息,包括存储驱动、容器数量、镜像数量等。

基本使用示例

运行一个容器

运行一个基于Nginx的Web服务器容器:

docker run -d -p 8080:80 --name my-nginx nginx

这个命令将拉取nginx镜像并在后台(-d)运行一个容器,将主机的8080端口映射到容器的80端口(-p 8080:80),并将容器命名为my-nginx。

列出所有容器

查看所有正在运行的容器:

docker ps

这个命令显示当前运行的所有容器。添加-a参数可以查看所有容器,包括已停止的容器。

停止和删除容器

停止和删除先前创建的Nginx容器:

docker stop my-nginx
docker rm my-nginx

首先使用stop命令停止容器,然后使用rm命令删除容器。

构建自定义镜像

使用Dockerfile创建自定义镜像:

# 创建Dockerfile
cat > Dockerfile << EOF
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
EOF

# 构建镜像
docker build -t my-node-app .

上述命令首先创建了一个简单的Dockerfile,定义了一个基于Node.js的应用。然后使用docker build命令构建镜像,并将其标记为my-node-app。

使用Docker Compose管理多容器应用

创建并启动一个包含Node.js应用和MongoDB数据库的多容器应用:

# 创建docker-compose.yml
cat > docker-compose.yml << EOF
version: "3.8"
services:
  app:
    image: my-node-app
    ports:
      - "3000:3000"
    depends_on:
      - mongodb
  mongodb:
    image: mongo
    ports:
      - "27017:27017"
    volumes:
      - mongodb_data:/data/db
volumes:
  mongodb_data:
EOF

# 启动服务
docker-compose up -d

这个示例展示了如何使用Docker Compose定义和运行多容器应用。docker-compose.yml文件定义了一个由Node.js应用和MongoDB数据库组成的应用堆栈。使用docker-compose up命令启动整个应用堆栈。

常见问题

问题:docker command not found

解决方案:确保软件已正确安装并添加到系统PATH中。可能需要重启终端或系统。

问题:安装过程中遇到权限错误

解决方案:确保您有管理员权限。在Windows上以管理员身份运行命令提示符,在Mac/Linux上使用sudo。

问题:Docker守护进程无法启动

解决方案:检查Docker服务状态并重启服务。

net stop docker && net start docker

问题:权限不足

解决方案:确保当前用户属于docker用户组,或使用sudo运行Docker命令。

使用管理员权限运行Docker相关命令

问题:Docker容器无法访问网络

解决方案:检查网络配置和防火墙设置。

netsh advfirewall firewall add rule name="Docker" dir=in action=allow protocol=TCP localport=2375

使用技巧

使用Docker Compose简化多容器应用的管理。

经常使用docker system prune命令清理未使用的资源,包括悬挂镜像、停止的容器和未使用的网络。

为常用命令创建别名,例如在.bashrc或.zshrc中添加:alias dps="docker ps"。

使用Docker卷(volumes)持久化容器数据,而不是在容器内存储数据。

使用多阶段构建(multi-stage builds)减小最终镜像的大小。

在生产环境中,考虑使用Docker Swarm或Kubernetes进行容器编排。

定期更新您的Docker和基础镜像,以获取安全补丁和性能改进。

在Dockerfile中使用.dockerignore文件排除不需要的文件,减小构建上下文大小。

为了安全起见,在容器中使用非root用户运行应用。

使用Docker Scout或其他工具定期扫描您的容器镜像,查找安全漏洞。

相关资源

总结

恭喜!您已经成功安装了Docker 25.0.3,并了解了基本的使用方法。Docker是一个强大的工具,可以帮助您简化开发、测试和部署过程。随着您对Docker的深入了解,您将能够构建更复杂的容器化应用程序,使用Docker Compose管理多容器应用,甚至使用Docker Swarm或Kubernetes进行容器编排。继续探索Docker的更多功能,将为您的开发工作流程带来更多便利。