容器与镜像的基本概念
搞运维的都知道,现在部署服务基本都往容器上靠。考试第一关就是分清容器和镜像的区别。镜像是只读模板,比如 nginx:alpine 这种,容器是镜像运行时的实例。就像盖章,镜像是印模,容器是盖出来的章。
常用命令必须熟记
考试里常考 docker run、docker ps、docker exec 这些基础操作。比如启动一个后台运行的 Nginx 容器:
docker run -d -p 8080:80 --name webserver nginx:alpine
别小看这行命令,-d 是后台运行,-p 做端口映射,--name 指定名字,哪个参数错都可能丢分。
数据持久化怎么处理
容器一重启数据就没了,这在实际运维中是大问题。考试重点会考卷(volume)和绑定挂载(bind mount)。推荐用命名卷来保存数据库数据:
docker volume create dbdata
docker run -d --name mysql-db -v dbdata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
这样就算容器删了,数据还在卷里。
网络模式不能糊弄
Docker 有 bridge、host、none 几种网络模式。bridge 是默认的,每个容器有自己的 IP;host 模式直接共用宿主机网络,性能好但端口容易冲突。考试喜欢问“哪种模式没有独立 IP”,答案就是 host。
自定义桥接网络的作用
多个容器要通信,比如前端连后端,光靠链接(--link)早过时了。得会建自定义网络:
docker network create app-net
docker run -d --name backend --network app-net myapp:backend
docker run -d --name frontend --network app-net -p 8000:80 myapp:frontend
这样两个容器就能通过名字直接互通,运维配置也更清晰。
Dockerfile 写法要点
考试常让你看一段 Dockerfile 判断最终结果,或者补全指令。记住几个关键点:FROM 必须第一行,COPY 和 ADD 区别(ADD 能解压远程 URL),RUN 执行命令,CMD 是默认启动命令。
FROM alpine:latest
RUN apk add --no-cache nginx
COPY index.html /var/www/index.html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
每一层都会生成镜像层,合并命令能减小体积,比如把多个 RUN 合成一条。
容器编排初探:为什么考 Docker Compose
单个容器好管,一堆容器就得靠编排。Docker Compose 是考试必考项。写个 docker-compose.yml 就能一键启停多个服务。
version: '3'
services:
web:
image: nginx:alpine
ports:
- "8000:80"
depends_on:
- app
app:
build: ./app
environment:
- DB_HOST=db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: secret
这个文件一写,整个环境 docker-compose up 就跑起来了,运维效率翻倍。
资源限制和健康检查
生产环境不能让容器随便吃资源。考试会考内存、CPU 限制怎么设。比如限制容器最多用 512MB 内存:
docker run -d --name limited-app -m 512m --cpus=1.5 myapp
还有健康检查,确保服务真活着,不是容器在但进程卡了:
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \\n CMD curl -f http://localhost/health || exit 1