你是否经历过这种绝望:
"明明在我电脑上能跑,为什么发到服务器上就报错了?"
环境不一致(JDK 版本不同、缺少系统库、端口冲突)是开发者的噩梦。而 Docker 的出现,就是为了把这个噩梦装进盒子里扔掉。
今天这篇,不念教科书定义,用最通俗的语言带你理解 Docker,并手把手教你跑起第一个服务。
1. 什么是 Docker?
如果把你的代码比作一条金鱼:
传统部署:是你把金鱼送到服务器,服务器必须提供水、氧气泵、鱼缸。如果服务器的水质(系统环境)不对,鱼就挂了。
Docker 部署:是你把金鱼、水、氧气泵、鱼缸一起打包成一个密闭的集装箱。不管服务器是什么样子,只要能放得下这个箱子,鱼就能活。
Docker 和虚拟机的区别:
虚拟机 (VM):是一栋独立的小房子,有完整的地基(操作系统),很重,启动慢。
Docker 容器:是房子里的一个隔间(进程),共用地基(宿主机内核),极轻,启动只要几秒。
2. 核心概念:Docker 的“三剑客”
学 Docker,只要搞懂这三个名词就够了:
镜像 (Image):
相当于游戏安装包(只读的)。
它包含运行程序所需的一切:代码、运行环境、配置文件。
容器 (Container):
相当于运行起来的游戏。
它是通过镜像创建出来的运行实例。你可以开一个游戏(一个容器),也可以开十个。
仓库 (Repository):
相当于 App Store 或 GitHub。
用来存放和下载镜像的地方(最常用的是 Docker Hub)。
3. 实战:你的第一个 Nginx 服务
假设你已经安装好了 Docker(Windows/Mac 直接去官网下 Desktop 版,Linux 用 apt/yum 安装)。
我们来试着跑一个 Nginx 网页服务器,只要一行命令:
Bash
docker run -d -p 8080:80 --name my-nginx nginx
这行命令干了什么?
docker run:启动容器。nginx:告诉 Docker 我要用 Nginx 这个镜像(本地没有会自动去网上下载)。-d(Detached):后台运行,不要卡住我的终端。-p 8080:80(Port):端口映射。把服务器(宿主机)的8080端口,连接到容器内部的80端口。--name my-nginx:给这个容器起个名字叫my-nginx。
现在,打开浏览器访问 http://localhost:8080,你应该能看到 "Welcome to nginx!" 的页面了。
4. 进阶:如何修改容器里的内容?(挂载卷)
上面的 Nginx 虽然跑起来了,但页面是默认的。如果我们想展示自己的 HTML 怎么办?
直接进入容器修改是不推荐的(容器重启后数据可能丢失)。
正确做法:挂载数据卷 (Volume)。
把宿主机的文件夹“映射”到容器里,就像给容器插了一个 U 盘。
假设你在 D 盘有一个 index.html:
Bash
docker run -d -p 8081:80 \
-v D:/my-site:/usr/share/nginx/html \
--name my-custom-nginx \
nginx
-v 宿主机路径:容器内路径:现在,你修改宿主机的index.html,刷新网页,内容会立刻变化!
5. 终极武器:Docker Compose
实际开发中,一个项目往往包含:Java 后端 + Vue 前端 + MySQL 数据库 + Redis 缓存。
如果每次都要敲 4 行 docker run 命令,还要配置它们之间的网络,太麻烦了。
Docker Compose 就是一个“剧本”(.yml 文件),它能一次性启动所有服务。
比如,你要部署一个 WordPress 博客(包含数据库),只需写一个 docker-compose.yml:
YAML
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: examplepass
wordpress:
image: wordpress:latest
ports:
- "8000:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: examplepass
然后执行一句魔法指令:
Bash
docker-compose up -d
Docker 就会自动帮你下载 MySQL 和 WordPress,配置好网络连接,并把博客运行在 8000 端口。
6. 常用命令速查表
建议收藏,平时用得最多的就是这几个:
总结
Docker 并不是什么高深的黑科技,它只是改变了软件交付的标准。
以前我们交付代码(Code)。
现在我们交付镜像(Image)。
掌握了 Docker,无论是自己搭建博客(Halo, WordPress),还是部署复杂的微服务架构,你都迈出了最关键的一步。
原文链接:https://makule.top/