极简 Docker 入门笔记 Docker 超全学习笔记零基础完整版一、Docker 核心概念1.1 Docker 容器Docker 通过容器化技术为应用程序封装独立、隔离的运行环境每一个独立运行环境即为一个容器运行容器的物理/虚拟主机称为宿主机。容器 VS 虚拟机核心区别Docker容器共享宿主机系统内核仅打包应用与依赖轻量、秒启动、资源占用极低虚拟机搭载完整独立操作系统内核体积大、启动慢、资源消耗高1.2 Docker 镜像镜像可理解为封装好环境与代码的压缩包/模板是只读文件。容器是镜像运行后生成的可运行实例一个镜像可批量创建多个完全一致的容器可修改运行中的容器重新打包生成自定义镜像镜像可分享迁移保证所有设备运行环境完全统一1.3 Docker 仓库用于存储、管理、分享 Docker 镜像的远程服务器。开发者可上传自定义镜像也可拉取公共镜像直接使用。官方仓库https://hub.docker.com国内加速镜像站官方无法访问时使用https://docker.fxxk.dedyn.io/二、Docker 技术原理Docker 基于 Linux 两大核心原生能力实现容器虚拟化无需模拟完整系统2.1 Cgroups资源限制限制、隔离容器进程的硬件资源可单独配置每个容器的CPU、内存、网络带宽上限避免单个容器占用过高资源影响宿主机和其他容器运行。2.2 Namespaces资源隔离隔离容器的资源视图让容器仅能看到自身的进程、端口、文件目录、网络配置完全隔离宿主机与其他容器资源。本质容器是被隔离、受限的特殊进程内部看似独立系统实际共享宿主机内核。三、Docker 安装教程Docker 原生基于 Linux 内核Windows / Mac 需依赖 WSL2 虚拟 Linux 子系统Linux 系统为最佳运行环境。3.1 Linux 系统安装RedHat / CentOS 系yum install dockerAlpine 系统apk add docker3.2 Windows 系统安装WSL2 Docker Desktop1. 开启系统功能打开「Windows 功能」勾选虚拟机平台Virtual Machine Platform适用于 Linux 的 Windows 子系统勾选后重启电脑生效。2. 安装配置 WSL2管理员身份打开命令提示符 / PowerShell执行wsl --set-default-version 2 wsl --update --web-download3. 安装 Docker Desktop下载地址第三方适配安装包选择对应系统版本安装。验证安装docker --version重要注意事项Docker Desktop 必须后台运行否则会出现管道报错所有 docker 命令失效。报错示例Docker 未启动error during connect: Get http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.51/containers/json: open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.3.3 Mac 系统安装直接从 Docker 官网下载对应芯片Intel/ARM的安装包傻瓜式安装即可。四、Docker 镜像操作4.1 拉取镜像docker pull镜像地址完整结构仓库地址/命名空间/镜像名:版本标签仓库地址(registry)官方仓库可省略默认 docker.io命名空间(library)官方公共镜像命名空间可省略镜像名需要拉取的服务名称nginx、mysql、python等版本标签latest 为最新版可指定具体版本常用拉取命令# 完整写法 docker pull docker.io/library/nginx:latest# 简化写法日常使用 docker pull nginx# 拉取私有仓库镜像 docker pull docker.n8n.io/n8nio/n8n4.2 国内镜像加速配置解决拉取超时官方镜像源国内访问极慢推荐稳定加速源registry-mirrors: [ https://docker.1ms.run ]4.3 指定架构拉取镜像Mac M系列ARM架构可兼容x86镜像通过QEMU模拟存在轻微性能损耗docker pull --platformxxx nginx4.4 镜像查看与删除# 查看本地所有镜像 docker images # 删除镜像ID/镜像名均可 docker rmi [镜像标识]五、Docker 容器操作核心常用5.1 创建并运行容器docker run自动判断本地是否有镜像无镜像则自动 pull 拉取。# 基础运行 docker run nginx常用参数详解# 1. 后台运行不阻塞终端-d docker run -d nginx# 2. 自定义容器名称 --name docker run -d --name kz_nginx nginx# 3. 端口映射 -p 宿主机端口:容器端口 docker run -d -p 8080:80 nginx# 4. 目录挂载数据持久化-v 本地路径:容器路径 docker run -d -p 8080:80 -v ./:/usr/share/nginx/html nginx# 5. 传入环境变量 -e数据库常用 docker run -d -p 27017:27017 \ -e MONGO_INITDB_ROOT_USERNAMEtech \ -e MONGO_INITDB_ROOT_PASSWORDdbkuaizi \ mongo # 6. 交互式进入容器 -it docker run -it alpine# 7. 退出自动删除容器 --rm docker run -it --rm alpine# 8. 容器重启策略 --restart # always无论崩溃/断电自动重启# 9. unless-stopped手动停止后不重启 docker run -d --restart always nginx5.2 仅创建不启动容器docker create nginx5.3 查看容器列表# 查看正在运行的容器 docker ps# 查看所有容器含已停止 docker ps -a列表字段说明容器ID、镜像来源、创建时间、运行状态、端口、容器名称5.4 启停 / 删除容器# 启动容器 docker start [容器标识]# 停止容器 docker stop [容器标识]# 删除停止的容器 docker rm [容器标识] # 强制删除运行中的容器 docker rm -f [容器标识]5.5 容器内部操作# 进入容器终端 docker exec -it [容器标识] bash# 在容器外执行容器内部命令 docker exec alpine ps -ef# 查看容器详细信息JSON格式 docker inspect [容器标识]# 查看容器日志 docker logs [容器标识]# 实时滚动查看日志 docker logs -f [容器标识]注意官方极简镜像内部无多余命令需自行安装工具。六、Docker 数据卷Volume容器数据默认随容器删除而清空数据卷用于持久化存储实现数据与容器解耦支持容器间数据共享、备份恢复。# 创建数据卷 docker volume create [卷名称]# 查看卷详情 docker volume inspect nginx_html# 查看所有数据卷 docker volume list# 删除指定数据卷 docker volume rm nginx_html# 清理所有未使用的卷 docker volume prune七、Dockerfile 自定义构建镜像Dockerfile 是构建自定义镜像的配置文件定义镜像环境、依赖、启动规则。7.1 完整 Dockerfile 示例Python 项目# 基础镜像 FROM python:3.13-slim# 设置工作目录 WORKDIR /app# 拷贝项目所有文件到容器 COPY . .# 安装项目依赖 RUN pip install -r requirements.txt# 声明对外端口 EXPOSE 8000# 容器启动命令 CMD [python3,main.py]7.2 配套项目文件main.pyfrom fastapi import FastAPI import uvicorn app FastAPI() app.get(/) def read_root(): return {hello:dbkuaizi} if __name__ __main__: uvicorn.run(app,host0.0.0.0,port8000)requirements.txtfastapi uvicorn7.3 构建并运行自定义镜像# 构建镜像 -t 镜像名:版本 docker build -t docker_test . # 启动自定义容器 docker run -d -p 8000:8000 docker_test八、Docker 网络模式8.1 Bridge 桥接模式默认容器独立子网172.17.x.x与宿主机网络隔离。同一自定义网络下的容器可通过容器名互相通信无需IP。# 创建自定义网络 docker network create network1 # 容器指定网络 docker run -d --network network1 nginx8.2 Host 主机模式容器直接共享宿主机网络无需端口映射直接使用宿主机端口对外提供服务。docker run -d --network host nginx8.3 None 无网络模式关闭容器所有网络权限完全隔离仅本地运行。8.4 网络管理命令# 查看所有网络 docker network list # 删除自定义网络 docker network rm network1默认 bridge、host、none 网络为系统内置不可删除。九、Docker Compose 多容器编排9.1 核心作用通过docker-compose.yml配置文件一键管理多个关联容器前端、后端、数据库、缓存解决多容器启动、依赖、网络配置繁琐问题。优势服务拆分独立、故障不连锁、支持精准扩容、团队环境统一。9.2 完整 Compose 示例MongoDB可视化services: my_mongodb: image: mongo environment: MONGO_INITDB_ROOT_USERNAME: name MONGO_INITDB_ROOT_PASSWORD: pass volumes: - /my/datadir:/data/db my_mongodb_express: image: mongo-express ports: - 8081:8081 environment: ME_CONFIG_MONGODB_SERVER: my_mongodb ME_CONFIG_MONGODB_ADMINUSERNAME: name ME_CONFIG_MONGODB_ADMINPASSWORD: pass depends_on: - my_mongodb # 依赖前置服务自动控制启动顺序9.3 Compose 常用命令# 后台启动所有服务 docker compose up -d# 指定配置文件启动 docker compose -f xxx.yml up -d# 停止并删除容器、网络 docker compose down# 仅停止服务不删除资源 docker compose stop# 启动已停止的compose服务 docker compose start