
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.10uname -r可查看64 位系统CentOS 7 默认满足方法一yum 安装官方推荐最省心1. 卸载旧版本如果有sudoyum removedockerdocker-client docker-client-latest docker-common\docker-latest docker-latest-logrotate docker-logrotate\docker-engine2. 安装必要依赖并添加官方仓库sudoyuminstall-yyum-utilssudoyum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo3. 安装 Docker Enginesudoyuminstall-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不用每次 sudosudogroupadddocker# 如果组已存在会提示忽略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.tgz2. 解压并移动到系统路径tar-zxvfdocker-24.0.7.tgzsudocpdocker/* /usr/bin/# 将 docker, dockerd 等二进制文件放到 /usr/bin3. 手动启动 Docker 守护进程临时测试sudodockerd会输出一堆日志按回车回到终端。此时另开一个终端执行docker version验证。4. 配置为 systemd 服务生产必需创建 service 文件sudovi/etc/systemd/system/docker.service写入以下内容[Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target [Service] Typenotify ExecStart/usr/bin/dockerd ExecReload/bin/kill -s HUP $MAINPID LimitNOFILEinfinity LimitNPROCinfinity TimeoutStartSec0 Delegateyes KillModeprocess Restarton-failure StartLimitBurst3 StartLimitInterval60s [Install] WantedBymulti-user.target然后sudosystemctl daemon-reloadsudosystemctl startdockersudosystemctlenabledockersudosystemctl statusdocker5. 创建 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 22. 下载并安装 Docker Desktop从 https://www.docker.com/products/docker-desktop/ 下载Docker Desktop Installer.exe双击安装勾选Use WSL 2 instead of Hyper-V推荐。安装完成后启动 Docker Desktop等待鲸鱼图标不再转圈。3. 验证打开 PowerShell 或 CMDdockerrun hello-world看到欢迎信息就 OK 了。4. Windows 下的终端建议强烈建议使用Windows TerminalWSL2内的 Ubuntu 发行版来操作 Docker。在 WSL2 的 Ubuntu 里直接使用 Docker就和 Linux 完全一样了Docker Desktop 已自动配置好。如果不想依赖 Docker DesktopWindows Server 上也可以装原生 Docker Engine但新手先用 Desktop 足矣。四、Docker 常用命令速查表1. 镜像管理命令说明docker images列出本地所有镜像docker pull 镜像名:标签从仓库拉取镜像如docker pull nginx:latestdocker 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 的容器映射端口 80docker ps查看正在运行的容器docker ps -a查看所有容器包括已停止的docker stop 容器名停止容器docker start 容器名启动已停止的容器docker restart 容器名重启容器docker rm 容器名删除已停止的容器运行中的需先 stopdocker exec -it 容器名 /bin/bash进入容器的 bash 交互终端有些镜像用/bin/shdocker logs 容器名查看容器输出日志docker logs -f 容器名实时跟踪日志3.docker run核心参数解释dockerrun-d\# -d: 后台运行--namemyapp\# 给容器起个名字-p8080:80\# 端口映射宿主机端口:容器端口-v/data:/usr/share/nginx/html\# 挂载目录宿主机目录:容器目录-eMYSQL_ROOT_PASSWORD123456\# 设置环境变量--restartalways\# 退出时自动重启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.ymlversion:3.8services:web:image:nginx:latestports:-80:80volumes:-./html:/usr/share/nginx/htmlnetworks:-app-netredis:image:redis:7networks:-app-netnetworks:app-net:driver:bridge2. 常用 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 maintaineryouexample.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还支持自动解压 tarRUN在构建时执行命令如RUN apt update apt install -y curlCMD容器启动时默认执行的命令WORKDIR设置工作目录ENV设置环境变量EXPOSE声明容器监听端口文档作用实际映射靠-p七、核心配置详解daemon.jsonDocker 的全局配置都放在/etc/docker/daemon.json中LinuxWindows 上可通过 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 的私有仓库无 TLSdata-root修改 Docker 数据目录镜像、容器存放位置默认在/var/lib/dockerlog-driver日志驱动默认json-file还可为syslog、journald等log-opts日志轮转防止日志占满磁盘单个文件最大 10M最多保留 3 个storage-driver存储驱动overlay2是目前最佳选择live-restore即使 Docker 守护进程重启容器也能继续运行热更新守护进程时很有用dns容器默认 DNS 服务器修改后需要重启 Docker 服务sudo systemctl restart docker。配置镜像加速阿里云为例登录阿里云容器镜像服务获取专属加速器地址。修改/etc/docker/daemon.json{registry-mirrors:[https://你的ID.mirror.aliyuncs.com]}sudo systemctl restart docker注意daemon.json格式必须严格符合 JSON 标准最后一个键值对末尾不能有逗号。八、实战用 Docker 快速部署 Nginx 挂载本地网页这个例子让你一次性弄懂端口映射、挂载目录、后台运行。# 1. 创建本地网页目录mkdir~/mywebsiteechoHello Docker~/mywebsite/index.html# 2. 启动容器将本地目录挂进去dockerrun-d--namemy-nginx\-p80:80\-v~/mywebsite:/usr/share/nginx/html:ro\--restartalways\nginx:alpine-v ~/mywebsite:/usr/share/nginx/html:ro把宿主机的~/mywebsite挂载到容器里 Nginx 的网站根目录ro表示只读。现在访问http://服务器IP就能看到 “Hello Docker”。修改本地的index.html浏览器刷新立刻生效不用重启容器。九、新手避坑 排错指南端口映射后外网不通先检查 firewalld/iptables 是否放行了宿主机端口。云服务器记得在安全组同时放行。容器启动后立刻退出用docker logs 容器名查看错误日志。可能原因前台没有常驻进程比如你只是运行echo就结束了。docker run提示权限不足要么加sudo要么把当前用户加入docker组并重新登录。目录挂载后容器内文件消失挂载会覆盖容器内该目录原有的内容这是正常现象。如果需要原文件的备份可在启动前用docker cp复制出来。Windows 下路径格式CMD 中用反斜杠但最好用正斜杠并加引号-v C:/Users/me/html:/usr/share/nginx/htmlWSL2 里用/mnt/c/Users/me/html即可。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 独立搭建环境、部署项目、排查常见问题了。接下来建议亲手完成用 Docker 跑一个 Nginx Tomcat MySQL 的组合环境用 Compose 编排写一个 Dockerfile 把自己的网页打包成镜像把镜像推送到 Docker Hub 或私有仓库有任何具体报错或场景随时可以把日志贴出来一起分析。加油