一、创建容器常用选项
1. 创建容器常用选项
1)常用选项
- 创建容器常用选项
- 交互式选项:
- -i:保持标准输入打开,允许交互式操作
- -t:分配伪终端,使容器像传统终端一样工作
- 组合使用:-it常用于进入容器交互模式,如docker exec -it <容器> bash
- 后台运行:
- -d:以守护进程方式运行容器
- 注意事项:纯净操作系统镜像(如centos)直接使用-d会立即退出,因为没有守护进程
- 终端分配原理:
- 伪终端作用:当使用-it时,伪终端会作为容器的一号进程来维持容器运行
- 对比实验:演示了docker run -d centos会退出,而docker run -it -d centos能保持运行
- 进程保持机制:
- nginx示例:通过docker top查看nginx容器有主进程和worker进程保持运行
- centos示例:加-it后伪终端成为一号进程,防止容器退出
- 设置环境变量
- 参数格式:-e key=value
- 应用场景:
- 区分开发/测试/生产环境配置
- 传递数据库连接等动态参数
- 示例:-e env=prod设置环境类型为生产环境
- 容器内验证:通过echo$env可查看传入的变量值
- 发布容器端口
参数格式:
- -P:自动映射所有expose端口到随机宿主机端口
- -p 宿主机端口:容器端口:指定映射关系
- 示例:-p 88:80将容器80端口映射到宿主机88端口
- 访问验证:通过浏览器访问宿主机IP:88测试端口映射
- 指定容器名称
- 参数格式:--name 容器名
- 管理优势:
- 替代难记的容器ID
- 提高可读性和管理效率
- 示例:--name web为nginx容器命名
- 设置容器主机名
参数格式:-h 主机名
- 示例:-h web设置容器内主机名
- 验证方法:进入容器执行hostname命令查看
- 容器重启策略
- 参数格式:--restart=策略
- 策略类型:
- no:不自动重启(默认)
- always:总是重启
- on-failure:失败时重启
- 生产建议:使用always确保服务高可用
- 重要特性:主机重启后docker会自动拉起配置了always的容器
- 查看容器详细信息
- 命令:docker inspect 容器
- 输出内容:
- 网络配置(IP、网关等)
- 存储驱动信息
- 挂载点详情
- 应用场景:调试容器问题时获取完整配置信息
- 容器读写层与数据持久性
- 存储位置:/var/lib/docker/overlay2/
- 读写层特性:
- 容器修改保存在读写层(UpperDir)
- 删除容器会同时删除读写层数据
- 数据查看:
- 通过docker inspect找到UpperDir路径
- 在宿主机可直接查看容器内文件
- 持久化建议:重要数据应使用volume或bind mount
2)资源限制
- 内存限制:
- -m/--memory: 设置容器可使用的最大内存量,如500m表示500MB,1g表示1GB
- --memory-swap: 控制允许交换到磁盘的内存量
- --memory-swappiness: 设置容器使用SWAP分区的百分比(0-100),默认-1表示继承宿主机设置
- --oom-kill-disable: 禁用OOM Killer机制
- CPU限制:
- --cpus: 指定容器可使用的CPU核心数量,如1表示1核,1.5表示1.5核
- --cpuset-cpus: 限制容器使用特定的CPU核心编号,如"0-3"表示使用0到3号核心
- --cpu-shares: 设置CPU使用的相对权重
- 必要性:
- 防止单个容器资源耗尽影响宿主机和其他容器
- 避免"造反"现象:当某个容器异常消耗资源时,不会拖垮整个宿主机
- 在多容器环境下实现资源制衡,确保各容器公平使用资源
- 实际应用:
- 典型限制示例:docker run -m="500m" --cpus="1" -d nginx
- 内存单位支持:MB(m)、GB(g)等标准单位
- CPU核心数支持小数形式,如0.5表示半个核心
- 配置建议:
- 根据服务类型合理分配资源:Web服务通常需要更多内存,计算服务需要更多CPU
- 生产环境必须设置资源限制,开发环境可适当放宽
- 监控容器实际资源使用情况,动态调整限制参数
- 注意事项:
- 资源限制不是绝对的,极端情况下仍可能影响系统稳定性
- 设置过小的限制可能导致服务性能下降
- CPU共享权重(--cpu-shares)和核心绑定(--cpuset-cpus)通常只在特殊场景使用
二、知识小结
知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
创建容器常用选项 | -d后台运行、-it分配伪终端、-e环境变量、-p端口映射、--name容器命名、--restart重启策略 | -it组合作用:①进入容器交互界面 ②作为纯净系统守护进程 | ⭐⭐⭐ |
容器资源限制 | --memory内存限制(如500M)、--cpusCPU核数限制(如1.5核) | 关键区别:默认无限制 vs 显式限制可防止资源抢占 | ⭐⭐⭐⭐ |
容器数据持久化 | 读写层存储在/var/lib/docker/containers/ID,容器删除即丢失数据 | 易混淆点:重启容器≠删除容器,数据不会丢失 | ⭐⭐⭐ |
容器网络基础 | -p 宿主机端口:容器端口实现端口暴露(如-p 8888:80) | 重点验证:通过宿主机IP:端口访问容器服务 | ⭐⭐ |
镜像与容器关系 | 镜像需包含守护进程(如nginx),否则需-it维持运行 | 典型对比:nginx镜像(自带进程)vs centos镜像(需伪终端) | ⭐⭐⭐⭐ |
容器状态管理 | docker ps -l查看最新容器、docker top查看进程、docker inspect查看详情 | 关键命令:docker exec -it ID bash进入运行中容器 | ⭐⭐ |