Docker 从零到实战:Windows Linux 安装、命令与配置全攻略

Docker 从零到实战:Windows  Linux 安装、命令与配置全攻略

Docker 从零到实战:Windows & Linux 安装、命令与配置全攻略

前言

Docker 是现在开发和运维的“必备技能”。它能把你的程序和整个运行环境打包成一个轻量级的容器,在任何机器上都跑得一模一样,再也不用担心“我电脑上能跑,服务器上就报错”。

本文面向纯新手,把 Docker 的安装、常用命令、核心配置和实战用法一次性讲透。覆盖 Linux 的yum安装、二进制解压安装和 Windows 上的安装,全程复制即用。

适用系统:CentOS 7+ / RHEL 7+ / Ubuntu 18+ / Windows 10/11(含 WSL2)


一、Docker 到底是什么?

把 Docker 理解成轻量级虚拟机就行,但比传统虚拟机快得多、占用资源少得多。

对比维度传统虚拟机Docker 容器
启动速度分钟级秒级
资源占用每个 VM 要独占几 GB 内存共享宿主机内核,一个容器几十 MB
隔离性全虚拟化,强隔离进程级隔离,够用
迁移发布复杂,要导出镜像再导入一个 Dockerfile 或镜像就能带走

核心概念三件套

  • 镜像(Image):一个只读的模板,比如包含Ubuntu + Nginx的文件系统快照。
  • 容器(Container):镜像的运行时实例,你可以进容器里面执行命令。
  • 仓库(Registry):放镜像的地方,Docker Hub 是官方公共仓库,公司内部也可以搭私有仓库。

二、Linux 安装 Docker

环境检查

  • 内核版本 >= 3.10(uname -r可查看)
  • 64 位系统(CentOS 7+ 默认满足)

方法一:yum 安装(官方推荐,最省心)

1. 卸载旧版本(如果有)
sudoyum removedockerdocker-client docker-client-latest docker-common\docker-latest docker-latest-logrotate docker-logrotate\docker-engine
2. 安装必要依赖并添加官方仓库
sudoyuminstall-yyum-utilssudoyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3. 安装 Docker Engine
sudoyuminstall-ydocker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

这里会同时安装docker-compose-plugin,让你可以使用docker compose命令(V2 版)。

4. 启动并设置开机自启
sudosystemctl startdockersudosystemctlenabledockersudosystemctl statusdocker# 确认 active (running)
5. 允许当前用户直接使用 docker(不用每次 sudo)
sudogroupadddocker# 如果组已存在会提示,忽略sudousermod-aGdocker$USER# 把你自己加入 docker 组newgrpdocker# 刷新组权限(或重新登录)

测试:docker run hello-world,看到欢迎信息就说明安装成功。


方法二:二进制解压安装(离线、无网络、不用 yum)

适用于不能联网、没有包管理器、或者你需要多版本并存的环境。

1. 下载官方静态二进制包

访问 https://download.docker.com/linux/static/stable/ ,选择对应架构(x86_64、aarch64),复制最新版本的.tgz链接。
例如:

cd/tmpwgethttps://download.docker.com/linux/static/stable/x86_64/docker-24.0.7.tgz
2. 解压并移动到系统路径
tar-zxvfdocker-24.0.7.tgzsudocpdocker/* /usr/bin/# 将 docker, dockerd 等二进制文件放到 /usr/bin
3. 手动启动 Docker 守护进程(临时测试)
sudodockerd&

会输出一堆日志,按回车回到终端。此时另开一个终端执行docker version验证。

4. 配置为 systemd 服务(生产必需)

创建 service 文件:

sudovi/etc/systemd/system/docker.service

写入以下内容:

[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target

然后:

sudosystemctl daemon-reloadsudosystemctl startdockersudosystemctlenabledockersudosystemctl statusdocker
5. 创建 docker 用户组(同上)
sudogroupadddockersudousermod-aGdocker$USER

三、Windows 安装 Docker

方案:Docker Desktop for Windows(最易用)

Docker Desktop 封装了 WSL2 后端,让 Windows 原生支持 Linux 容器。

1. 开启 WSL2 和虚拟机平台

以管理员身份打开 PowerShell,执行:

dism.exe/online/enable-feature/featurename:Microsoft-Windows-Subsystem-Linux/all/norestart dism.exe/online/enable-feature/featurename:VirtualMachinePlatform/all/norestart

重启电脑

下载并安装 WSL2 内核更新包:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

设置 WSL2 为默认版本:

wsl--set-default-version 2
2. 下载并安装 Docker Desktop

从 https://www.docker.com/products/docker-desktop/ 下载Docker Desktop Installer.exe,双击安装,勾选Use WSL 2 instead of Hyper-V(推荐)。

安装完成后,启动 Docker Desktop,等待鲸鱼图标不再转圈。

3. 验证

打开 PowerShell 或 CMD:

dockerrun hello-world

看到欢迎信息就 OK 了。

4. Windows 下的终端建议

强烈建议使用Windows Terminal+WSL2内的 Ubuntu 发行版来操作 Docker。
在 WSL2 的 Ubuntu 里直接使用 Docker,就和 Linux 完全一样了(Docker Desktop 已自动配置好)。

如果不想依赖 Docker Desktop,Windows Server 上也可以装原生 Docker Engine,但新手先用 Desktop 足矣。


四、Docker 常用命令速查表

1. 镜像管理

命令说明
docker images列出本地所有镜像
docker pull 镜像名:标签从仓库拉取镜像,如docker pull nginx:latest
docker rmi 镜像ID删除镜像(需先删除使用它的容器)
docker tag 源镜像 新名字:标签给镜像打标签
docker save -o nginx.tar nginx:latest把镜像导出成 tar 文件
docker load -i nginx.tar从 tar 文件导入镜像

2. 容器生命周期

命令说明
docker run -d --name web -p 80:80 nginx最常用:以后台模式启动一个叫 web 的容器,映射端口 80
docker ps查看正在运行的容器
docker ps -a查看所有容器(包括已停止的)
docker stop 容器名停止容器
docker start 容器名启动已停止的容器
docker restart 容器名重启容器
docker rm 容器名删除已停止的容器(运行中的需先 stop)
docker exec -it 容器名 /bin/bash进入容器的 bash 交互终端(有些镜像用/bin/sh
docker logs 容器名查看容器输出日志
docker logs -f 容器名实时跟踪日志

3.docker run核心参数解释

dockerrun-d\# -d: 后台运行--namemyapp\# 给容器起个名字-p8080:80\# 端口映射:宿主机端口:容器端口-v/data:/usr/share/nginx/html\# 挂载目录:宿主机目录:容器目录-eMYSQL_ROOT_PASSWORD=123456\# 设置环境变量--restart=always\# 退出时自动重启nginx:latest# 镜像名:标签

4. 网络与数据卷

命令说明
docker network ls查看网络列表
docker network create mynet创建自定义桥接网络
docker volume ls查看数据卷列表
docker volume create mydata创建命名卷
docker inspect 容器名查看容器的所有配置细节(IP、挂载点等)

五、Docker Compose:一键启动多个服务

真实项目中往往有多个容器(比如 web + db + redis),一个一个敲docker run太麻烦。
Docker Compose 用一个docker-compose.yml文件定义所有服务,一句命令全启动。

1. 写一个简单的 compose 文件

新建docker-compose.yml

version:'3.8'services:web:image:nginx:latestports:-"80:80"volumes:-./html:/usr/share/nginx/htmlnetworks:-app-netredis:image:redis:7networks:-app-netnetworks:app-net:driver:bridge

2. 常用 Compose 命令

命令说明
docker compose up -d后台启动所有服务
docker compose down停止并删除所有服务(网络、容器)
docker compose ps查看 compose 管理的容器状态
docker compose logs -f查看所有服务的实时日志
docker compose restart web重启 web 服务
docker compose exec web bash进入 web 服务容器内部

新版 Docker 已经内置了 compose 插件,直接用docker compose即可(中间没有横杠)。


六、Dockerfile:自己打包镜像

Dockerfile 是一份脚本,告诉 Docker 如何一步步构建镜像。

一个简单的静态网站 Dockerfile

在项目根目录下新建Dockerfile

# 1. 基础镜像 FROM nginx:alpine # 2. 维护者信息(可选) LABEL maintainer="you@example.com" # 3. 把本地的 index.html 复制到容器内 Nginx 的默认目录 COPY index.html /usr/share/nginx/html/ # 4. 暴露 80 端口 EXPOSE 80

同一目录下准备一个index.html文件,然后构建并运行:

dockerbuild-tmy-web:v1.# -t 指定镜像名:标签, . 表示当前目录dockerrun-d-p8080:80 my-web:v1

访问http://IP:8080即可看到你的网页。

常用 Dockerfile 指令

指令说明
FROM指定基础镜像
COPY/ADD复制文件到镜像;ADD还支持自动解压 tar
RUN在构建时执行命令,如RUN apt update && apt install -y curl
CMD容器启动时默认执行的命令
WORKDIR设置工作目录
ENV设置环境变量
EXPOSE声明容器监听端口(文档作用,实际映射靠-p

七、核心配置详解:daemon.json

Docker 的全局配置都放在/etc/docker/daemon.json中(Linux),Windows 上可通过 Docker Desktop 的 Settings → Docker Engine 界面修改。

完整配置示例及说明

{"registry-mirrors":["https://mirror.example.com"],"insecure-registries":["192.168.1.100:5000"],"data-root":"/data/docker","log-driver":"json-file","log-opts":{"max-size":"10m","max-file":"3"},"storage-driver":"overlay2","iptables":true,"live-restore":true,"dns":["8.8.8.8","114.114.114.114"]}
配置项作用
registry-mirrors镜像加速器(阿里云、腾讯云等提供,大幅加快 pull 速度)
insecure-registries允许使用 HTTP 的私有仓库(无 TLS)
data-root修改 Docker 数据目录(镜像、容器存放位置),默认在/var/lib/docker
log-driver日志驱动,默认json-file;还可为syslogjournald
log-opts日志轮转,防止日志占满磁盘,单个文件最大 10M,最多保留 3 个
storage-driver存储驱动,overlay2是目前最佳选择
live-restore即使 Docker 守护进程重启,容器也能继续运行(热更新守护进程时很有用)
dns容器默认 DNS 服务器

修改后需要重启 Docker 服务:sudo systemctl restart docker

配置镜像加速(阿里云为例)

  1. 登录阿里云容器镜像服务,获取专属加速器地址。

  2. 修改/etc/docker/daemon.json

    {"registry-mirrors":["https://你的ID.mirror.aliyuncs.com"]}
  3. sudo systemctl restart docker

注意:daemon.json格式必须严格符合 JSON 标准,最后一个键值对末尾不能有逗号。


八、实战:用 Docker 快速部署 Nginx + 挂载本地网页

这个例子让你一次性弄懂端口映射、挂载目录、后台运行。

# 1. 创建本地网页目录mkdir~/mywebsiteecho"Hello Docker">~/mywebsite/index.html# 2. 启动容器,将本地目录挂进去dockerrun-d--namemy-nginx\-p80:80\-v~/mywebsite:/usr/share/nginx/html:ro\--restart=always\nginx:alpine
  • -v ~/mywebsite:/usr/share/nginx/html:ro:把宿主机的~/mywebsite挂载到容器里 Nginx 的网站根目录,ro表示只读。
  • 现在访问http://服务器IP就能看到 “Hello Docker”。

修改本地的index.html,浏览器刷新立刻生效,不用重启容器。


九、新手避坑 & 排错指南

  1. 端口映射后外网不通

    • 先检查 firewalld/iptables 是否放行了宿主机端口。
    • 云服务器记得在安全组同时放行。
  2. 容器启动后立刻退出

    • docker logs 容器名查看错误日志。
    • 可能原因:前台没有常驻进程,比如你只是运行echo就结束了。
  3. docker run提示权限不足

    • 要么加sudo,要么把当前用户加入docker组并重新登录。
  4. 目录挂载后容器内文件消失

    • 挂载会覆盖容器内该目录原有的内容,这是正常现象。如果需要原文件的备份,可在启动前用docker cp复制出来。
  5. Windows 下路径格式

    • CMD 中用反斜杠但最好用正斜杠并加引号:-v "C:/Users/me/html:/usr/share/nginx/html"
    • WSL2 里用/mnt/c/Users/me/html即可。
  6. daemon.json修改后启动失败

    • 肯定是 JSON 格式错误(逗号、引号问题)。用python3 -m json.tool /etc/docker/daemon.json校验一下。

附录:常用命令速查卡片

任务命令
拉取镜像docker pull nginx:alpine
后台运行容器docker run -d --name web -p 80:80 nginx:alpine
停止/启动容器docker stop web/docker start web
进入运行中的容器docker exec -it web /bin/sh
查看容器日志docker logs -f web
删除所有停止的容器docker container prune
删除无用的镜像docker image prune -a
用 compose 启动docker compose up -d
构建镜像docker build -t 名字:标签 .
查看磁盘占用docker system df
全面清理(慎用)docker system prune -a --volumes

掌握上述内容后,你就已经可以用 Docker 独立搭建环境、部署项目、排查常见问题了。
接下来建议亲手完成:

  1. 用 Docker 跑一个 Nginx + Tomcat + MySQL 的组合环境(用 Compose 编排)
  2. 写一个 Dockerfile 把自己的网页打包成镜像
  3. 把镜像推送到 Docker Hub 或私有仓库

有任何具体报错或场景,随时可以把日志贴出来一起分析。加油!