容器和虚拟机的区别是必考点
考试时经常会让你对比容器和虚拟机。简单说,虚拟机跑的是整个操作系统,资源占用大,启动慢;而容器共享宿主机的内核,只打包应用和依赖,轻量又快速。比如你在公司部署一个Web服务,用虚拟机可能要几分钟,而用Docker容器几秒就起来了。
镜像和容器的关系不能搞混
镜像是静态的文件模板,类似于“照片”;容器是镜像运行起来的实例,就像“活人”。比如你用 nginx:latest 镜像启动一个容器,这个容器可以修改、暂停、删除,但镜像本身不会变。考试常考镜像分层结构和写时复制机制(Copy-on-Write)。
Docker 常用命令必须会写
别光背概念,命令行操作是硬功夫。下面这几个命令几乎必考:
docker run -d -p 8080:80 nginx
docker ps -a
docker images
docker exec -it <container_id> /bin/bash
docker build -t myapp .特别是 run 的参数,-d 后台运行,-p 端口映射,-v 挂载目录,-e 设环境变量,这些在实际维护中天天用。
编写 Dockerfile 要懂最佳实践
考试喜欢让你判断一段 Dockerfile 是否合理。记住:尽量合并 RUN 指令减少镜像层数,把变化少的指令放前面,使用 .dockerignore 忽略无关文件。比如下面这个片段就很典型:
FROM ubuntu:20.04
WORKDIR /app
COPY requirements.txt .
RUN apt-get update && apt-get install -y python3-pip
RUN pip3 install -r requirements.txt
COPY . .
CMD ["python3", "app.py"]网络模式要清楚各自用途
Docker 有 bridge、host、none 几种网络模式。bridge 是默认的,容器通过NAT和外部通信;host 模式直接使用宿主机网络,性能好但端口容易冲突。比如你在测试环境跑个监控服务,想直接用宿主机的80端口,用 host 模式最省事。
数据持久化怎么实现
容器删了,里面的数据就没了,所以考试常问怎么保存数据。答案是用卷(Volume)或者绑定挂载(Bind Mount)。比如你运行 MySQL 容器,一定要把数据目录挂出来:
docker run -d -v /mydata/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0这样即使容器重建,数据库还在。
容器编排基础也得了解
虽然 Docker Compose 不是 Docker 本身的功能,但考试越来越爱考。你会写 docker-compose.yml 就能加分。比如启动一个 Web 加数据库的组合服务:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: redis一行命令 docker-compose up 全部启动,运维效率高一大截。