极简 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 docker
3.2 Windows 系统安装(WSL2 + Docker Desktop)
1. 开启系统功能
打开「Windows 功能」,勾选:
虚拟机平台(Virtual Machine Platform)
适用于 Linux 的 Windows 子系统
勾选后重启电脑生效。
2. 安装配置 WSL2
管理员身份打开命令提示符 / PowerShell,执行:
wsl --set-default-version 2 wsl --update --web-download
3. 安装 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/n8n
4.2 国内镜像加速配置(解决拉取超时)
官方镜像源国内访问极慢,推荐稳定加速源:
"registry-mirrors": [ "https://docker.1ms.run" ]
4.3 指定架构拉取镜像
Mac M系列(ARM架构)可兼容x86镜像,通过QEMU模拟,存在轻微性能损耗:
docker pull --platform=xxx nginx
4.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_USERNAME=tech \ -e MONGO_INITDB_ROOT_PASSWORD=dbkuaizi \ 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 nginx
5.2 仅创建不启动容器
docker create nginx
5.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.py
from fastapi import FastAPI import uvicorn app = FastAPI() @app.get("/") def read_root(): return {"hello":"dbkuaizi"} if __name__ == "__main__": uvicorn.run(app,host='0.0.0.0',port=8000)
requirements.txt
fastapi uvicorn
7.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 nginx
8.2 Host 主机模式
容器直接共享宿主机网络,无需端口映射,直接使用宿主机端口对外提供服务。
docker run -d --network host nginx
8.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
