当前位置:首页>Linux>【Linux 运维体系 · 第 14 篇】Docker 与容器化基础 —— 为什么越来越多服务都跑在容器里?

【Linux 运维体系 · 第 14 篇】Docker 与容器化基础 —— 为什么越来越多服务都跑在容器里?

  • 2026-09-10 07:49:46
【Linux 运维体系 · 第 14 篇】Docker 与容器化基础 —— 为什么越来越多服务都跑在容器里?

本篇目标

  • • 理解什么是容器
  • • 理解 Docker 的核心概念
  • • 掌握镜像和容器的区别
  • • 学会部署和管理 Docker 容器
  • • 学会使用数据卷持久化数据
  • • 学会查看日志和排查容器问题

一、为什么会出现 Docker?

在 Docker 出现之前,部署一个服务通常是这样的:

购买服务器 → 安装系统 → 安装运行环境 → 安装依赖 → 部署程序 → 修改配置 → 启动服务

看起来没什么问题。

但实际工作中经常遇到:

开发电脑运行正常 → 测试环境运行正常 → 生产环境启动失败

开发说:

我电脑上明明能跑。

运维说:

服务器上就是不行。

最终发现:

  • • JDK 版本不一致
  • • Python 版本不同
  • • 系统依赖库不同
  • • 配置文件不同

于是 Docker 出现了。

Docker 的核心思想其实很简单:

把程序和运行环境一起打包。

这样无论部署到哪里:

开发环境 → 测试环境 → 生产环境

运行结果都尽量保持一致。


二、什么是镜像?什么是容器?

很多新手最容易混淆这两个概念。

可以简单理解:

镜像(Image) → 启动运行 → 容器(Container)

举个例子:

Windows安装包 → 安装运行 → 软件程序

对应 Docker:

Docker镜像 → docker run → Docker容器

因此:

概念
说明
镜像(Image)
静态文件,相当于安装包
容器(Container)
运行中的实例

记住一句话:

镜像是静态的,容器是运行中的。


三、安装 Docker

Ubuntu:

# 更新软件源
apt update

# 安装 Docker

apt install docker.io -y

# 设置开机启动

systemctl enable docker

# 启动服务

systemctl start docker

# 查看状态

systemctl status docker

验证安装:

# 查看版本
docker version

# 查看运行信息

docker info

# 运行测试容器

docker run hello-world

如果出现:

Hello from Docker!

说明安装成功。


四、Docker 最常用的命令

刚开始学习 Docker,不需要背全部命令。

先掌握下面这些:

# 查看镜像
docker images

# 查看运行中的容器

docker ps

# 查看所有容器

docker ps -a

# 查看容器日志

docker logs 容器名

# 停止容器

docker stop 容器名

# 启动容器

docker start 容器名

# 删除容器

docker rm 容器名

# 删除镜像

docker rmi 镜像名

# 进入容器

docker exec -it 容器名 bash

其中使用频率最高的是:

docker ps → 查看运行状态

docker logs → 查看错误日志

docker exec → 进入容器排查问题

五、部署第一个容器

以 Nginx 为例。

先拉取镜像:

docker pull nginx

查看镜像:

docker images

启动容器:

docker run -d \
--name nginx \
-p 80:80 \
nginx

# -d          后台运行

# --name      指定容器名称

# -p          端口映射

查看容器:

docker ps

浏览器访问服务器 IP:

http://服务器IP

如果出现 Nginx 欢迎页面,说明容器启动成功。


六、什么是端口映射?

很多新人第一次接触 Docker 时都会疑惑:

容器明明启动了,为什么访问不到?

原因通常是:

容器内部端口没有映射到宿主机

例如:

docker run -d \
--name nginx \
-p 80:80 \
nginx

端口对应关系:

宿主机端口
容器端口
80
80

如果改成:

docker run -d \
--name nginx \
-p 8080:80 \
nginx

则变成:

宿主机端口
容器端口
8080
80

此时访问地址应该是:

http://服务器IP:8080

七、容器删除后为什么数据会丢失?

很多新手都会踩这个坑。

例如启动一个 MySQL:

docker run -d mysql

运行几个月后。

误删容器:

docker rm -f mysql

结果发现:

数据库数据全部消失

原因是:

数据默认保存在容器内部。

而容器本身是临时资源。

删除容器时:

容器内的数据也会一起删除

八、数据卷(Volume)

解决方案就是:

把数据保存到宿主机。

启动一个带数据卷的 Nginx:

docker run -d \
--name nginx \
-p 80:80 \
-v /data/nginx/html:/usr/share/nginx/html \
nginx

目录映射关系:

宿主机目录
容器目录
/data/nginx/html/usr/share/nginx/html

这样网站文件实际保存在宿主机。

即使执行:

docker rm -f nginx

重新创建容器后:

数据依然存在

生产环境部署:

  • • MySQL
  • • Redis
  • • PostgreSQL
  • • Nginx

都必须使用数据卷。


九、进入容器

有时候需要进入容器查看文件。

例如:

docker exec -it nginx bash

进入后:

pwd
ls

cat

ps

这些命令都可以正常使用。

退出:

exit

不过生产环境更推荐:

修改宿主机配置 → 重新创建容器

而不是直接修改容器内部文件。


十、查看日志与排错

运维排错第一原则:

先看日志。

Docker 提供了非常方便的日志功能:

# 查看全部日志
docker logs nginx

# 实时查看日志

docker logs -f nginx

# 查看最近100行

docker logs --tail 100 nginx

排错流程建议:

docker ps -a → 查看容器状态

↓

docker logs → 查看错误日志

↓

docker exec → 进入容器排查

很多问题:

  • • 配置错误
  • • 环境变量错误
  • • 权限问题
  • • 程序启动失败

日志里都会直接给出线索。


十一、真实案例:容器启动失败

某次部署 Nginx。

执行:

docker run -d \
--name nginx \
-p 80:80 \
nginx

报错:

port is already allocated

查看端口占用:

ss -lntp

发现:

系统已经运行了一个 Nginx

占用了 80 端口。

解决方案:

方案一:

停止原有服务

方案二:

docker run -d \
--name nginx \
-p 8080:80 \
nginx

修改端口映射。

这个案例说明:

很多 Docker 问题,本质上还是 Linux 系统问题。


十二、Docker 与虚拟机有什么区别?

很多人会把 Docker 和虚拟机混为一谈。

实际上区别很大。

项目
Docker
虚拟机
启动速度
秒级
分钟级
资源占用
低
高
是否独立内核
否
是
部署效率
高
较低

简单理解:

虚拟机 = 模拟完整电脑

Docker = 运行独立应用

因此现在越来越多企业选择:

Docker → Kubernetes → 云原生

作为基础架构。


十三、实战:部署一个静态网站

创建网站目录:

mkdir -p /data/nginx/html

创建首页:

echo "Hello Docker" > /data/nginx/html/index.html

启动容器:

docker run -d \
--name myweb \
-p 80:80 \
-v /data/nginx/html:/usr/share/nginx/html \
nginx

访问:

http://服务器IP

如果看到:

Hello Docker

说明:

网站部署成功

数据保存在宿主机

容器可随时重建

这就是 Docker 最基础、最常见的使用方式。


十四、本篇总结

Docker 的核心价值不是替代虚拟机,而是让应用部署变得标准化、可复制、可迁移。

最新文章

随机文章