🐳 什么是 Docker?写给完全不了解的你

先从一个真实的痛苦说起

你有没有遇到过这种情况:

在自己电脑上跑得好好的项目,发给同学或者部署到服务器上,突然就报错了?

原因几乎每次都一样——环境不一致。你的电脑上是 Python 3.11,服务器上是 Python 3.8;你装了某个版本的数据库,对方没有……

这个问题困扰了程序员很多年,直到 Docker 出现。


Docker 是什么?用一个生活例子理解

想象一下集装箱的发明。

在集装箱出现之前,货物运输是一团乱麻——各种形状的货物要分别装卸,换船就得重新来一遍。集装箱的革命性在于:把货物和它的包装方式标准化,不管是轮船、火车还是卡车,同一个箱子直接搬上去就能跑。

Docker 做的事情完全一样:

把你的代码 + 运行环境 + 所有依赖,一起装进一个标准化的"集装箱"(容器),不管在哪台机器上运行,里面的东西完全一致。


三个你必须知道的概念

📦 Image(镜像) 可以理解为"模板"或者"安装包"。它是只读的,定义了容器里有什么——比如"一个装了 Python 3.11 + 我的代码的环境"。

🚀 Container(容器) 镜像运行起来之后,就变成了容器。如果镜像是"类",容器就是"实例",可以同时跑很多个互不干扰。

🏪 Registry(仓库) 存放和分享镜像的地方,官方是 Docker Hub。就像 GitHub 存代码,Docker Hub 存镜像。你可以直接 pull 别人做好的 Nginx、MySQL 镜像,拿来即用。公司也可以在这里存放私有镜像,仅供内部使用。


你的第一个 Docker 命令

安装好 Docker Desktop 之后,打开终端试试这个:

bash

# 直接拉取并运行一个 Nginx 网页服务器
docker run -d -p 8080:80 --name my-first-nginx nginx

然后打开浏览器访问 http://localhost:8080,你会看到 Nginx 的欢迎页面。

这行命令干了什么?

  • docker run — 运行一个容器
  • -d — 在后台运行(不占用终端)
  • -p 8080:80 — 把本机的 8080 端口映射到容器的 80 端口
  • --name my-first-nginx — 给容器起个名字
  • nginx — 使用官方的 nginx 镜像

整个过程不需要你手动安装 Nginx,Docker 会自动从 Docker Hub 下载镜像并运行。

如果 8080 端口被占用,换个端口号就行,访问 http://localhost:端口号 即可。


如果需要修改容器内部端口

拉取的 nginx 镜像默认监听 80 端口。如果你想改掉容器内的监听端口,需要做如下操作:

第一步:在本机新建 nginx.conf,内容如下:

nginx

server {
    listen 4515;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
}

第二步:运行时用 -v 将该文件挂载进容器,覆盖容器内的默认配置:

bash

docker run -d -p 16987:4515 --name my-first-nginx -v E:\CSDN\nginx.conf:/etc/nginx/conf.d/default.conf nginx

这条命令的意思是:开放本机 16987 端口并映射到容器的 4515 端口,同时用本地的 E:\CSDN\nginx.conf 覆盖容器内的默认配置(只覆盖相同标签部分,不会将配置文件全覆盖),从而让 nginx 监听 4515 而非默认的 80。

⚠️ Windows CMD 不支持 \ 换行,命令需要写在一行。


常用命令速查

bash

docker ps                    # 查看正在运行的容器
docker ps -a                 # 查看所有容器(包括已停止的)
docker images                # 查看本地已有的镜像
docker stop my-first-nginx   # 停止容器
docker rm my-first-nginx     # 删除容器
docker pull mysql:8.0        # 拉取 MySQL 镜像

总结

没有 Docker有了 Docker
环境配置每台机器手动装一次打包,到处运行
协作"你的环境和我不一样"大家跑同一个镜像
部署运维装环境半天docker run 一行搞定

Docker 是现代开发的基础工具,不管你做前端、后端还是运维,迟早都会用到它。

下一篇:用 Docker Compose 一键启动"前端 + 后端 + 数据库"完整项目,你还会发现我们打包镜像前会规定镜像版本,这样公司任何员工都可以根据同一份文件完成打包部署 🚀


📌 觉得有帮助的话点个赞!有疑问欢迎评论区留言 👇

更多推荐