LinuxDocker(学习笔记清晰简洁版)
一、Docker 基础与容器管理
1.容器运行与管理
| 命令 | 用途 | 关键选项/参数 | 说明 |
|---|---|---|---|
docker container run | 运行容器 | -d(后台)、-p(端口映射)、-e(环境变量)、--name(命名) | 基础运行命令 |
docker container start/stop/restart | 启动/停止/重启容器 | 容器名/ID | 生命周期管理 |
docker container pause/unpause | 暂停/恢复容器 | 容器名/ID | 暂停容器进程 |
docker container ls | 列出容器 | -a(显示所有)、-q(仅ID) | 新命令格式,替代docker ps |
docker container rm | 删除容器 | -f(强制删除运行中容器) | 删除已停止容器 |
docker container prune | 删除所有已停止容器 | 无 | 清理专用命令 |
docker system prune | 清理未使用资源 | -a(删除所有未使用镜像) | 清理容器、镜像、网络、缓存 |
2.容器内执行命令
| 命令 | 用途 | 关键点 |
|---|---|---|
docker exec | 在运行中容器内执行命令 | 必须容器正在运行;启动的是附属进程,非主进程;容器重启后不保留 |
3.容器信息查看
| 命令 | 用途 | 输出格式/内容 |
|---|---|---|
docker inspect | 查看容器/镜像详细元数据 | JSON格式,包含IP、挂载点、端口、环境变量等完整信息 |
docker logs | 查看容器日志 | 标准输出和错误流 |
docker port | 查看容器的端口映射 | 显示主机端口与容器端口的映射关系 |
4.新旧命令对比
| 新命令(推荐) | 旧命令(兼容) | 功能 |
|---|---|---|
docker container ls | docker ps | 列出容器 |
docker image ls | docker images | 列出镜像 |
docker container rm | docker rm | 删除容器 |
docker image rm | docker rmi | 删除镜像 |
二、Docker 存储管理
1.存储类型对比
| 类型 | 特点 | 适用场景 | 管理命令 | 数据持久性 |
|---|---|---|---|---|
| Volumes(命名卷) | Docker管理,路径透明(/var/lib/docker/volumes/) | 生产环境、数据库、共享数据 | docker volume系列命令 | 持久化 |
| Bind Mounts(绑定挂载) | 主机绝对路径,双向同步 | 开发环境、代码热重载 | 直接指定路径 | 持久化 |
| tmpfs Mounts | 内存存储,容器停止即丢失 | 临时敏感数据、缓存 | 仅Linux平台 | 非持久化 |
| 容器可写层 | 默认存储层,与容器生命周期绑定 | 临时数据、测试 | 容器自带 | 容器删除即丢失 |
2.卷操作命令
# 创建卷 docker volume create myvolume # 列出卷 docker volume ls # 查看卷详情 docker volume inspect myvolume # 删除未使用卷 docker volume prune # 使用卷运行容器 docker run -v myvolume:/app/data nginx # 或(新语法) docker run --mount source=myvolume,target=/app/data nginx
3.绑定挂载
# 开发环境代码热重载 docker run -v /home/user/code:/app nginx # 注意:必须使用绝对路径
4.重要特性
数据丢失风险:容器删除后,可写层数据永久丢失
卷共享:多个容器可挂载同一卷实现数据共享
性能:Volumes通常优于Bind Mounts
安全:Bind Mounts可访问主机任意路径,有安全风险
存储路径:Linux上Volumes默认存储在
/var/lib/docker/volumes/
三、Docker 网络与端口
1.端口映射
格式:
-p 主机端口:容器端口[/协议]示例:
-p 8080:80、-p 8080:80/tcp随机端口:
-p 容器端口(Docker自动分配主机端口)限制:同一主机端口只能被一个容器绑定
访问方式:
http://localhost:主机端口
2.EXPOSE 指令
作用:仅作为文档说明,提示容器监听的端口
不产生实际效果:不会自动发布端口到主机
查看方法:
docker inspect --format='{{.ContainerConfig.ExposedPorts}}' 镜像名 # 或查看Dockerfile中的EXPOSE指令
3.端口映射 vs EXPOSE
| 特性 | -P参数 | EXPOSE指令 |
|---|---|---|
| 作用 | 实际映射端口到主机 | 声明容器监听端口 |
| 外部访问 | 允许外部访问 | 不允许外部访问 |
| 配置位置 | docker run命令行 | Dockerfile 中 |
| 必要性 | 必须使用才能从外部访问 | 可选,仅为文档 |
四、Docker Compose
1.基本概念
用途:多容器应用的一键编排与管理
文件:
docker-compose.yml核心优势:简化多容器应用的定义、依赖管理和启停操作
2.核心命令
| 命令 | 用途 | 关键选项 |
|---|---|---|
docker-compose up | 创建并启动所有服务 | -d(后台运行) |
docker-compose down | 停止并移除所有资源 | -v(同时删除命名卷) |
docker-compose logs | 查看所有服务日志 | -f(跟踪日志) |
docker-compose exec | 在服务容器内执行命令 | -it(交互式终端) |
docker-compose ps | 查看服务状态 | |
docker-compose config | 验证配置文件语法 |
3.核心配置字段
version: '3.8' # 推荐使用3.x版本 services: web: image: nginx:latest # 使用现有镜像 build: ./dir # 从Dockerfile构建 ports: - "8080:80" # 端口映射 volumes: - ./app:/usr/share/nginx/html # 绑定挂载 - data:/app/data # 命名卷 environment: - NODE_ENV=production env_file: .env # 从文件加载环境变量 depends_on: # 依赖关系(仅控制启动顺序) - db networks: - frontend db: image: postgres:13 volumes: data: # 定义命名卷 networks: frontend:
4.网络配置
默认网络:所有服务自动加入同一内部网络
服务发现:可通过服务名直接访问(DNS解析)
多网络支持:一个服务可连接多个网络实现隔离
注意:
depends_on仅控制启动顺序,不等待服务就绪
5.环境变量管理
推荐方式:使用
.env文件,通过env_file引用安全实践:
将
.env加入.gitignore避免泄露敏感信息不要将敏感信息硬编码在
docker-compose.yml中为不同环境准备不同的
.env文件
6.数据卷配置
| 类型 | 配置示例 | 特点 |
|---|---|---|
| 命名卷 | data:/app/data | Docker管理,路径透明 |
| 绑定挂载 | ./app:/usr/share/nginx/html | 主机路径,双向同步 |
| 匿名卷 | /var/lib/mysql | 临时使用,不推荐生产 |
7.适用场景
| 场景 | 适合使用COMPOSE | 说明 |
|---|---|---|
| 本地开发环境(Web + DB + Cache) | ✅ | 快速搭建开发环境 |
| CI/CD流水线的集成测试环境 | ✅ | 标准化测试环境 |
| 单机部署微服务原型 | ✅ | 简化部署流程 |
| 大规模生产集群管理 | ❌ | 使用Kubernetes或Swarm |
五、Linux 基础
1.Linux 概述
设计灵感:源自UNIX
内核类型:单体式内核(Monolithic Kernel)
高安全发行版:Kali Linux(网络安全/渗透测试)
跨平台性:支持多种硬件架构
2.发行版组成
包含:内核(Kernel)、系统库(如glibc)、包管理器(如apt、dnf)
不包含:Microsoft Office(商业软件)
3.系统架构分层
应用层:用户程序
系统库层:提供API接口
Shell层:命令行接口
内核层:直接控制硬件,系统核心
硬件层:物理设备
4.应用领域
服务器与托管
桌面与个人使用
嵌入式系统
网络安全(Kali Linux)
六、Linux 文件与目录操作
1.基本命令
| 命令 | 用途 | 常用选项 | 说明 |
|---|---|---|---|
| pwd | 显示当前工作目录的完整路径 | 无 | Print Working Directory |
| cd | 切换目录 | cd ~(家目录)、cd ..(上级)、cd -(返回上次目录) | Change Directory |
| ls | 列出目录内容 | -a(显示隐藏文件)、-l(详细信息) | List |
| mkdir | 创建目录 | -p(递归创建多层目录) | Make Directory |
| rmdir | 删除空目录 | 无 | Remove Directory |
| rm -r | 递归删除非空目录 | -i(交互确认)、-f(强制) | 危险操作 |
| cat | 查看小文件全部内容 | -n(显示行号) | 大文件用less |
| touch | 创建空文件或更新文件时间戳 | 无 | 已存在文件仅更新时间戳 |
| echo | 打印文本或创建文件 | > file(覆盖)、>> file(追加) | 不能直接删除文件内容 |
2.目录操作技巧
递归创建:
mkdir -p a/b/c(自动创建中间目录)安全删除:先确认路径,重要数据先备份
文件查看:小文件用
cat,大文件用less(支持双向滚动)
七、Linux 系统信息与帮助
1.系统信息命令
| 命令 | 用途 | 常用选项 | 说明 |
|---|---|---|---|
| df -h | 查看磁盘使用情况 | -h(人类可读格式) | Disk Free |
| ps aux | 查看所有进程信息 | aux(显示所有用户进程) | Process Status |
| uname -a | 查看系统内核信息 | -a(所有信息) | Unix Name |
| top | 动态查看系统资源使用 | 无 | 实时监控 |
| systemctl | 管理系统服务 | start/stop/restart/status | systemd服务管理 |
| journalctl | 查看系统日志 | -f(跟踪日志) | systemd日志 |
2.帮助系统
man 命令:查看命令手册页
按
/搜索关键词按
q退出支持所有已安装命令
--help 选项:快速查看命令帮助(如
ls --help)
3.其他工具命令
grep:文本搜索(如
grep "error" log.txt)find:文件查找
wc:统计行数、字数、字节数
sort:排序
八、Linux 文件系统与权限
1.文件系统层次结构标准(FHS)
| 目录 | 主要用途 | 示例 |
|---|---|---|
| / | 根目录,所有目录的起点 | |
| /bin | 系统启动必需的用户命令(如ls、cp) | 核心命令 |
| /sbin | 系统管理命令,需root权限(如reboot、fdisk) | 管理命令 |
| /usr | 用户程序与数据(次级层次) | |
| /etc | 全局配置文件 | 系统配置 |
| /home | 普通用户的个人目录 | /home/username |
| /root | 系统管理员(root)的家目录 | |
| /tmp | 临时文件,所有用户可读写,重启后通常清除 | 临时存储 |
| /var | 可变数据(如日志、缓存) | 日志文件 |
| /dev | 设备文件(块设备、字符设备) | 硬件接口 |
| /proc | 虚拟文件系统,提供内核与进程的实时信息 | 系统信息 |
| /opt | 第三方独立软件包的安装目录 | 第三方软件 |
| /mnt | 系统管理员临时挂载文件系统的目录 | 手动挂载点 |
| /media | 自动挂载可移动设备(如U盘、光盘) | 自动挂载 |
2.路径类型
| 类型 | 特点 | 示例 | 说明 |
|---|---|---|---|
| 绝对路径 | 以/开头,位置固定 | /home/user/file.txt | 任何位置都指向同一目标 |
| 相对路径 | 不以/开头,依赖当前目录 | ./script.sh、../config/ | 需要当前目录上下文 |
3.特殊路径符号
| 符号 | 含义 | 示例 |
|---|---|---|
| . | 当前目录 | ./run.sh(运行当前目录脚本) |
| .. | 上一级目录 | cd ..(返回上级目录) |
| ~ | 当前用户的家目录 | cd ~(回家目录) |
| / | 根目录或路径分隔符 | /home/user |
4.文件权限基础
三类主体:所有者(Owner)、所属组(Group)、其他用户(Others)
三种权限:读(r)、写(w)、执行(x)
权限表示:
符号表示:
-rwxr-xr-x八进制表示:
755(rwxr-xr-x)、644(rw-r--r--)
5.目录权限特殊性
| 权限 | 对文件的影响 | 对目录的影响 |
|---|---|---|
| r | 读取文件内容 | 列出目录内容(仅文件名) |
| w | 修改文件内容 | 创建/删除/重命名目录内文件 |
| x | 执行文件 | 进入目录,访问文件元数据 |
6.常用权限设置
| 八进制值 | 符号表示 | 适用场景 |
|---|---|---|
| 644 | -rw-r--r-- | 普通文件默认权限 |
| 755 | -rwxr-xr-x | 可执行文件/目录 |
| 600 | -rw------- | 敏感文件(如SSH私钥) |
| 700 | -rwx------ | 用户家目录 |
| 750 | -rwxr-x--- | 脚本/程序文件(组用户可读执行) |
九、Linux 包管理与服务管理
1.主流包管理器
| 发行版家族 | 包管理器 | 安装命令示例 |
|---|---|---|
| Debian/Ubuntu | APT | sudo apt install nginx |
| RHEL/CentOS/Fedora | DNF/YUM | sudo dnf install nginx |
| openSUSE | Zypper | sudo zypper install nginx |
| Arch/Manjaro | Pacman | sudo pacman -S nginx |
2.APT常用操作
# 更新软件包列表 sudo apt update # 安装软件 sudo apt install package # 移除软件(保留配置) sudo apt remove package # 完全移除(包括配置) sudo apt purge package # 搜索软件包 apt search keyword # 查看已安装 apt list --installed
3.systemctl服务管理
# 启动服务 sudo systemctl start service # 停止服务 sudo systemctl stop service # 重启服务 sudo systemctl restart service # 重载配置(不重启) sudo systemctl reload service # 查看状态 sudo systemctl status service # 设置开机自启 sudo systemctl enable service # 禁用开机自启 sudo systemctl disable service
十、最佳实践与安全
1.Docker 最佳实践
镜像标签:生产环境避免使用
latest,明确指定版本数据持久化:
优先使用Volumes(生产环境)
开发环境可用Bind Mounts(热重载)
敏感数据使用Docker Secrets
端口管理:
不要暴露不必要的端口
使用
-p明确指定映射关系
容器清理:
定期执行
docker system prune清理未使用资源定期执行
docker volume prune清理未使用卷
环境变量:敏感信息通过
.env文件管理,不硬编码
2.Linux 安全实践
最小权限原则:只授予必要权限
敏感文件:适当权限设置(如私钥
600)备份:重要操作前备份数据
日志监控:定期检查系统日志
软件更新:定期更新系统和软件包
3.Compose 最佳实践
版本控制:Compose文件加入版本控制,
.env文件除外多环境配置:为不同环境准备不同的
.env文件资源限制:为服务设置CPU/内存限制
健康检查:配置
healthcheck确保服务就绪
十一、易错点总结
1.Docker 相关
端口映射方向:
-p 主机:容器(不是容器:主机)数据持久化:容器删除后,可写层数据丢失
EXPOSE vs -p:
EXPOSE只是声明,-p才是实际映射exec 限制:只能在运行中的容器使用
路径要求:Bind Mounts必须使用绝对路径
环境变量安全:不要将密码等硬编码在yml文件中
2.Linux 相关
mkdir 递归:创建多层目录必须加
-prm 危险:
rm -r递归删除不可恢复局部变量:必须显式初始化
目录权限:必须有
x权限才能进入目录服务管理:启动/停止服务需要root权限(通常用sudo)
3.综合要点
服务发现:Compose中服务可通过服务名直接访问
镜像标签:生产环境避免
latest卷管理:Volumes由Docker管理,Bind Mounts使用主机路径
帮助系统:
man命令查看手册,--help查看快速帮助
十二、综合知识图谱
Docker生态系统 ├── 容器管理 │ ├── 运行:docker run [-d] [-p] [-e] [--name] │ ├── 生命周期:start/stop/restart/pause │ ├── 执行:exec(仅运行中容器) │ └── 清理:prune 系列命令 ├── 存储管理 │ ├── Volumes(生产首选) │ ├── Bind Mounts(开发热重载) │ ├── tmpfs(内存临时存储) │ └── 容器层(临时数据) ├── 网络与端口 │ ├── 端口映射:-p 主机:容器 │ ├── EXPOSE(声明性) │ └── 服务发现(容器名/DNS) └── Docker Compose ├── 多服务编排 ├── 环境变量管理(env_file) ├── 数据卷定义 └── 网络配置 Linux系统 ├── 基础操作 │ ├── 文件操作:pwd/cd/ls/mkdir/rm/cat │ ├── 文本处理:grep/echo/find │ └── 系统信息:df/ps/uname/top ├── 文件系统 │ ├── FHS标准目录结构 │ ├── 绝对路径 vs 相对路径 │ └── 特殊符号:.、..、~、/ ├── 权限管理 │ ├── 三类主体:所有者/组/其他 │ ├── 三种权限:读/写/执行 │ └── 目录权限特殊性 └── 包与服务管理 ├── 包管理器:APT/DNF/Zypper/Pacman └── 服务管:systemctl(start/stop/enable/status)
