docker 是开源的容器化应用运行工具,核心是把应用程序依赖代码环境打包成镜像,在隔离的容器里面运行,解决传统部署里面环境不一致,软件依赖冲突,迁移麻烦的痛点,和虚拟机不一样,docker 不需要完整操作系统,共享宿主机内核,启动速度快资源占用低。这份 docker 教程从基础概念,安装部署,核心命令,镜像容器操作,Dockerfile 编写,数据持久化,网络原理,常见故障排查完整讲解,适合零基础运维开发人员,学完之后可以独立完成应用容器部署,理解容器运行机制,掌握日常运维常用操作,不再只会复制命令,明白每一条命令背后的作用。
docker 核心基础概念
镜像 image 只读模板,里面包含应用代码 依赖库 配置文件,相当于软件安装包,可以从仓库拉取,也可以自己构建。
容器 container 镜像运行之后的实例,是独立隔离的运行进程,可以启动停止删除,同一个镜像可以同时启动多个容器。
仓库 registry 存放镜像的服务器,官方公共仓库是 Docker Hub,企业一般搭建私有镜像仓库。
Dockerfile 文本配置文件,通过编写指令自动构建自定义镜像,实现镜像标准化打包。
数据卷 volume 用来持久化容器内部数据,容器删除之后数据卷里面的数据不会丢失,解决容器销毁数据丢失问题。
网络 network docker 自带虚拟网络,用来实现容器之间通信,宿主机和容器端口映射,隔离不同业务容器网络。
安装与初始化配置
linux 环境推荐 centos ubuntu 系统,先卸载旧版本 docker,配置 yum 或者 apt 源,安装 docker-ce 社区版,安装完成启动服务,设置开机自启。国内访问官方仓库速度很慢,需要配置镜像加速器,修改 daemon.json 文件,添加国内镜像源地址,重启 docker 服务生效。
基础验证命令
docker version 查看客户端和服务端版本
docker info 查看 docker 完整运行信息,存储驱动 加速器 内核参数
核心常用命令对照表
| 分类 | 命令 | 功能说明 |
|---|---|---|
| 镜像操作 | docker pull | 从仓库拉取镜像 |
| 镜像操作 | docker images | 查看本地全部镜像 |
| 镜像操作 | docker rmi | 删除本地镜像 |
| 镜像操作 | docker build | 根据 Dockerfile 构建镜像 |
| 容器操作 | docker run | 创建并启动容器 |
| 容器操作 | docker ps | 查看正在运行容器 |
| 容器操作 | docker ps -a | 查看全部容器包含已停止 |
| 容器操作 | docker start stop restart | 启动 停止 重启容器 |
| 容器操作 | docker exec | 进入正在运行容器内部执行命令 |
| 容器操作 | docker logs | 查看容器运行日志 |
| 容器操作 | docker rm | 删除已经停止的容器 |
| 网络存储 | docker volume | 管理数据卷 |
| 网络存储 | docker network | 管理 docker 虚拟网络 |
docker run 重点参数讲解
d 后台守护进程运行
p 宿主机端口:容器端口 做端口映射
v 宿主机目录:容器目录 挂载数据卷
name 指定容器名称
e 设置容器内部环境变量
network 指定容器加入的虚拟网络
restart 设置容器重启策略,例如 always 开机自动拉起
Dockerfile 基础指令
FROM 指定基础镜像,必须是第一行指令
RUN 构建镜像阶段执行安装命令
COPY 把宿主机文件复制进镜像
WORKDIR 设置容器内部工作目录
EXPOSE 声明容器监听端口
CMD 容器启动默认执行命令
ENTRYPOINT 固定入口命令,优先级高于 CMD
进阶实战要点
容器本身是临时的,不适合把业务数据直接写在容器内部,数据库类业务必须挂载数据卷,否则容器重建之后数据库文件全部丢失。容器之间通信不要使用宿主机公网 ip,推荐创建自定义 bridge 网络,使用容器名称互相访问。多容器业务编排可以搭配 docker compose,通过 yaml 文件一次性启动多个关联容器,适合网站数据库 redis 这类多组件项目。容器资源可以限制 cpu 内存,防止单个容器占用宿主机全部资源,造成宿主机卡顿。
常见故障原理
拉取镜像超时,一般是镜像加速器失效,网络防火墙拦截,仓库访问不通。
容器启动立刻退出,大多是启动命令错误,主进程没有前台运行,docker 容器机制是主进程结束容器就停止。
端口映射失败,宿主机端口已经被其他程序占用。
容器内部无法联网,docker 虚拟网卡异常,内核 iptables 转发规则出错。
权限报错,普通用户没有加入 docker 用户组,执行命令需要加 sudo。
教程总结
docker 学习主线就是镜像构建 容器运行 数据持久化 网络通信,先熟练基础命令,再学习 Dockerfile 自定义镜像,之后学习 docker compose 多容器编排。docker 核心优势是环境标准化,快速部署,弹性扩容,学习这份 docker 教程之后,日常项目部署,测试环境搭建,服务迁移都可以使用容器方案,后续还可以继续学习 k8s 容器集群,k8s 就是大规模管理 docker 容器的编排平台。
【常见问题】
问题 1 这份 docker 教程里面容器和镜像有什么区别
回答 1 根据这份 docker 教程,镜像是只读模板也就是安装包,容器是镜像运行之后的实例,一个镜像可以启动多个独立容器。
问题 2 学习这份 docker 教程,为什么容器删除之后里面的数据就消失
回答 1 这份 docker 教程提到容器本身是临时运行实例,如果没有挂载数据卷,容器内部数据保存在容器层,容器删除之后容器层一并清除,所以数据库业务必须按照教程配置数据卷持久化。
问题 3 这份 docker 教程里面 docker run 的 p 参数作用是什么
回答 1 这份 docker 教程说明 p 参数用来做端口映射,把宿主机端口映射到容器内部端口,外部用户才可以访问容器里面运行的服务。
问题 4 按照这份 docker 教程操作,容器启动马上退出是什么原因
回答 1 这份 docker 教程解释,docker 容器要求主进程保持前台运行,如果启动命令执行完主进程退出,容器就会立刻停止,这是容器最常见报错原因。
【免责申明】
本文为 docker 技术学习教程,仅用于技术学习参考,不同 linux 发行版内核版本,docker 版本参数会存在差异,生产环境操作前请做好备份,镜像拉取和部署请遵守软件开源协议以及相关法律法规,本文不对依据教程操作造成的业务中断 数据丢失 服务器故障等后果承担责任。
