做开发这几年,最大的感受就是环境配置太折腾人了。换台电脑、换个服务器,光是把 Java、Python、Node 这些环境搭起来就得耗上半天,更别提各种依赖版本冲突带来的“灵异事件”。直到我彻底拥抱了 Docker 容器化,才觉得自己的开发生涯终于“清爽”了。
这篇文章,笔者(我们习惯叫自己“站长”)想用最接地气的方式,把 Docker 容器化这件事给你掰开揉碎了讲清楚。不整那些虚头巴脑的理论,直接上干货,让你看完就能上手用。
一、Docker 到底是什么?为什么大家都在用它?
💡 推荐阅读:别再被参数表忽悠了!云服务器选购,看懂这6个核心参数才算真行家
简单来说,Docker 就是一个“轻量级的虚拟机”,但它比虚拟机更聪明、更省资源。它把你的应用以及应用运行所需的所有依赖(代码、运行时、系统工具、库、设置)打包成一个标准化的单元,这个单元就叫镜像(Image)。镜像运行起来,就是一个容器(Container)。
你可以把镜像理解成一个“菜谱”,容器就是按照这个菜谱做出来的“菜”。不管你在哪里炒菜(开发机、测试机、生产服务器),只要按照这个菜谱来,做出来的味道(运行结果)绝对一模一样。
它的核心优势非常直观:
- 环境隔离:你的应用和数据库、缓存服务互相不干扰,A 项目用 Python 2,B 项目用 Python 3,两者互不打架。
- 一次构建,到处运行:这是最爽的一点。在本地跑通的容器,扔到云服务器上,
docker run一下,直接就能跑起来,彻底告别“在我电脑上是好的啊”这种尴尬。 - 秒级启动:相比于虚拟机启动要几十秒甚至几分钟,容器因为共享宿主机内核,启动速度是毫秒级的。
- 极致利用资源:容器占用的空间很小,一台 2核4G 的云服务器,跑十几个容器毫无压力。
二、核心概念扫盲:镜像、容器、仓库
💡 延伸阅读:Linux服务器从裸机到安全加固:一份能直接照着做的实战配置手册
刚开始接触 Docker 的人,最容易把这三个概念搞混。咱们用大白话捋一遍:
| 概念 | 类比 | 说明 |
|---|---|---|
| 镜像 (Image) | 类 / 安装包 | 只读的模板,包含了运行应用所需的一切。比如 nginx:latest 就是一个装好了 Nginx 服务的镜像。 |
| 容器 (Container) | 实例 / 运行中的程序 | 镜像运行起来后的实体。你可以对容器进行启动、停止、删除等操作。同一个镜像可以创建多个容器。 |
| 仓库 (Registry) | 代码仓库 (GitHub) | 用来存放镜像的地方。最著名的就是 Docker Hub,我们可以在上面拉取(pull)别人做好的镜像,也可以推送(push)自己的镜像。 |
三、动手实操:从安装到运行第一个容器
光说不练假把式。下面我们以 Linux 服务器(CentOS 7 或 Ubuntu 20.04 以上)为例,带大家走一遍完整流程。
1. 安装 Docker 引擎
如果你用的是云服务器(站长建议选择靠谱的云厂商),执行以下命令即可一键安装(以 CentOS 为例):
# 卸载旧版本(如果有)
sudo yum remove docker docker-common docker-selinux docker-engine
# 安装依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker 官方源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker
sudo yum install -y docker-ce
# 启动 Docker 并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 查看版本,验证安装成功
docker version
2. 换源加速(国内用户必看)
由于网络原因,直接从 Docker Hub 拉取镜像可能会很慢。我们需要配置国内镜像加速器。编辑配置文件:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<'EOF'
{
"registry-mirrors": ["https://docker.m.daocloud.io"]
}
EOF
# 重启 Docker 使配置生效
sudo systemctl daemon-reload
sudo systemctl restart docker
3. 部署一个 Nginx 网站
这算是 Docker 世界的“Hello World”。我们直接拉取官方的 Nginx 镜像并运行:
# 拉取镜像
docker pull nginx:latest
# 运行容器
# -d 表示后台运行
# --name 给容器起个名字
# -p 8080:80 将服务器的 8080 端口映射到容器的 80 端口
docker run -d --name my-web -p 8080:80 nginx:latest
# 查看运行中的容器
docker ps
现在,在浏览器里访问 http://你的服务器IP:8080,如果能看到 Nginx 的欢迎页,恭喜你,你的第一个容器就跑起来了!
四、进阶实战:容器化部署一个 Python Web 应用
光跑个现成的 Nginx 不过瘾,我们来写一个简单的 Python Flask 应用,然后用 Docker 把它“容器化”。
1. 准备项目文件
创建一个项目目录,里面放两个文件:
mkdir my-flask-app
cd my-flask-app
第一个文件 app.py:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello from Docker Container! - 站长"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
第二个文件 requirements.txt:
Flask==3.0.0
2. 编写 Dockerfile(构建镜像的蓝图)
这是容器化的核心文件,告诉 Docker 如何一步步构建镜像。
# 基于 Python 3.11 的官方镜像
FROM python:3.11-slim
# 设置工作目录
WORKDIR /app
# 将当前目录下的 requirements.txt 复制到容器中
COPY requirements.txt .
# 安装 Python 依赖
RUN pip install --no-cache-dir -r requirements.txt
# 将当前目录下的所有文件复制到容器中
COPY . .
# 声明容器运行时监听的端口
EXPOSE 5000
# 指定容器启动时运行的命令
CMD ["python", "app.py"]
3. 构建并运行
# 构建镜像,-t 是给镜像打标签
docker build -t my-flask-app:v1 .
# 运行容器
docker run -d -p 5000:5000 --name flask-app my-flask-app:v1
# 测试
curl http://localhost:5000
看到 Hello from Docker Container! 的输出,说明你的 Python 应用已经成功跑在容器里了。
五、容器化落地:Docker Compose 编排多容器
真实项目往往不止一个服务,比如一个 Web 应用需要搭配 MySQL 和 Redis。这时候手动一个个 docker run 就太累了。我们需要用 Docker Compose 来一键启动所有服务。
1. 编写 docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
depends_on:
- db
- redis
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:7-alpine
volumes:
db_data:
2. 一键启动
# 启动所有服务(-d 后台运行)
docker-compose up -d
# 查看状态
docker-compose ps
# 查看日志
docker-compose logs -f web
# 停止所有服务
docker-compose down
有了 Compose,我们只需要一条命令,就能把整个项目环境跑起来,团队协作时效率直接拉满。
六、给新手的避坑指南与建议
最后,站长结合自己的实战经验,分享几个新手容易踩的坑:
- 不要把数据存在容器里:容器一旦删除,里面的数据就没了。一定要通过
-v参数或volumes将数据挂载到宿主机。 - 注意时区问题:默认容器是 UTC 时区,如果应用有日志或定时任务,记得在 Dockerfile 里加上
ENV TZ=Asia/Shanghai。 - 镜像标签别用 latest:在正式环境,尽量使用具体的版本号(如
nginx:1.25.3),避免因 latest 变动导致环境不一致。 - 学会看日志:排查问题第一件事就是
docker logs 容器名,这比进入容器内部瞎猜高效得多。
容器化这条路,走进去就会发现新世界。它彻底解决了环境配置的痛点,也让我们的应用交付变得更加标准化、自动化。如果你正在为部署环境头疼,不妨从今天开始,试着把你手头的项目容器化。顺便提一句,玩 Docker 对服务器配置有一定要求,如果你还没有一台趁手的云服务器,建议选择正规云厂商的 2核4G 以上配置,跑起来会更从容。
希望这篇文章能帮到你,我们下期见。
延伸阅读
- 别再被参数表忽悠了!云服务器选购,看懂这6个核心参数才算真行家
- Linux服务器从裸机到安全加固:一份能直接照着做的实战配置手册
- 从零玩转 Docker:这几个高星开源项目,直接让你的服务器效率翻倍
- WordPress慢到让人抓狂?别急着换主机,这10个提速技巧90%的人只做对了一半
🎁 全套实操配置文件与 AI 提效资料包免费下载
本文涉及的全套 Docker Compose 配置文件、服务器运维避坑手册及 AI 提效指令库已完整打包上传至夸克网盘,可直接免费极速转存:
💡 提示:推荐使用手机【夸克网盘 App】打开保存,新用户首月免费赠送 1TB 超大空间与免流量极速下载特权。