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 lsdocker ps列出容器
docker image lsdocker images列出镜像
docker container rmdocker rm删除容器
docker image rmdocker 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/dataDocker管理,路径透明
绑定挂载./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.系统架构分层

  1. 应用层:用户程序

  2. 系统库层:提供API接口

  3. Shell层:命令行接口

  4. 内核层直接控制硬件,系统核心

  5. 硬件层:物理设备

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/statussystemd服务管理
journalctl查看系统日志-f(跟踪日志)systemd日志

2.帮助系统

  • man 命令:查看命令手册页

    • /搜索关键词

    • q退出

    • 支持所有已安装命令

  • --help 选项:快速查看命令帮助(如ls --help

3.其他工具命令

  • grep:文本搜索(如grep "error" log.txt

  • find:文件查找

  • wc:统计行数、字数、字节数

  • sort:排序


八、Linux 文件系统与权限

1.文件系统层次结构标准(FHS)

目录主要用途示例
/根目录,所有目录的起点
/bin系统启动必需的用户命令(如lscp核心命令
/sbin系统管理命令,需root权限(如rebootfdisk管理命令
/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/UbuntuAPTsudo apt install nginx
RHEL/CentOS/FedoraDNF/YUMsudo dnf install nginx
openSUSEZyppersudo zypper install nginx
Arch/ManjaroPacmansudo 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 最佳实践

  1. 镜像标签:生产环境避免使用latest,明确指定版本

  2. 数据持久化

    • 优先使用Volumes(生产环境)

    • 开发环境可用Bind Mounts(热重载)

    • 敏感数据使用Docker Secrets

  3. 端口管理

    • 不要暴露不必要的端口

    • 使用-p明确指定映射关系

  4. 容器清理

    • 定期执行docker system prune清理未使用资源

    • 定期执行docker volume prune清理未使用卷

  5. 环境变量:敏感信息通过.env文件管理,不硬编码

2.Linux 安全实践

  1. 最小权限原则:只授予必要权限

  2. 敏感文件:适当权限设置(如私钥600

  3. 备份:重要操作前备份数据

  4. 日志监控:定期检查系统日志

  5. 软件更新:定期更新系统和软件包

3.Compose 最佳实践

  1. 版本控制:Compose文件加入版本控制,.env文件除外

  2. 多环境配置:为不同环境准备不同的.env文件

  3. 资源限制:为服务设置CPU/内存限制

  4. 健康检查:配置healthcheck确保服务就绪


十一、易错点总结

1.Docker 相关

  1. 端口映射方向-p 主机:容器(不是容器:主机

  2. 数据持久化:容器删除后,可写层数据丢失

  3. EXPOSE vs -pEXPOSE只是声明,-p才是实际映射

  4. exec 限制:只能在运行中的容器使用

  5. 路径要求:Bind Mounts必须使用绝对路径

  6. 环境变量安全:不要将密码等硬编码在yml文件中

2.Linux 相关

  1. mkdir 递归:创建多层目录必须加-p

  2. rm 危险rm -r递归删除不可恢复

  3. 局部变量:必须显式初始化

  4. 目录权限:必须有x权限才能进入目录

  5. 服务管理:启动/停止服务需要root权限(通常用sudo)

3.综合要点

  1. 服务发现:Compose中服务可通过服务名直接访问

  2. 镜像标签:生产环境避免latest

  3. 卷管理:Volumes由Docker管理,Bind Mounts使用主机路径

  4. 帮助系统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)