Docker 简介
Docker 是一个开源的容器化平台,它把应用程序连同代码、运行时、系统库和配置一起打包成「镜像」,再在任何装有 Docker 的机器上以「容器」的形式运行,实现一次构建、到处运行。学习 Docker 是部署应用与中间件(Nginx、MySQL、Redis 等)的基本功。
什么是 Docker
传统方式把软件直接装进操作系统,换一台机器就要重新配置一遍环境。Docker 把「代码 + 依赖 + 环境」封装成只读镜像,运行镜像即可生成相互隔离的容器:
docker run -d -p 8080:80 nginx # 拉取 nginx 镜像并以后台方式启动容器
docker ps # 输出:CONTAINER ID ... nginx 处于运行中
curl http://localhost:8080 # 访问返回 nginx 欢迎页即部署成功
为什么需要容器
没有容器时,部署经常遇到三类典型问题:
| 痛点 | 说明 |
|---|---|
| 环境不一致 | 开发、测试、生产系统差异大,代码「在我机器上能跑」却部署失败 |
| 依赖冲突 | 两个应用需要同一软件的不同版本,装在一台机器上互相影响 |
| 迁移成本高 | 换服务器、加节点都要重装环境,步骤多、易遗漏 |
容器与传统部署的区别
容器共享宿主机的操作系统内核,只把进程、文件系统、网络等隔离开,因此比整机安装更轻量、启动更快、资源占用更小;它和虚拟机的详细对比见下一章。
典型工作流:build-ship-run
Docker 的日常使用围绕构建、分发、运行三个动作展开:
docker build -t myapp:1.0 . # build:在本地把应用构建成镜像
docker push myapp:1.0 # ship:把镜像推送到镜像仓库
docker pull myapp:1.0 # 在目标机器上从仓库拉取
docker run -d -p 8080:80 myapp:1.0 # run:启动容器对外提供服务
Docker 生态
除核心的镜像与容器外,还有一整套配套组件协同工作:
| 组件 | 作用 |
|---|---|
| 镜像仓库 Registry | 存放并分发镜像,最常用的是 Docker Hub,也可用国内公共仓库或自建 |
| Docker Compose | 用 YAML 描述多个容器,一条命令完成编排启动 |
| Docker Swarm | Docker 自带的集群编排工具,适合小规模集群 |
| Kubernetes(K8s) | 目前主流的容器编排平台,负责大规模容器的调度与自愈 |
小结
Docker 把应用与环境一起打包成镜像,通过 build-ship-run 三步完成标准化交付;Compose 解决单机多容器编排,Swarm 与 K8s 负责集群管理,从下一章起逐步掌握这套体系。