Docker搭建博客:用容器技术5分钟装好Z-Blog
说实话,第一次让我用Docker部署博客的时候,我是拒绝的。「容器」「镜像」「编排」这些词听着就头大,我想我一个写博客的,又不是程序员,搞这个干嘛?
结果试了一次之后……真香。
今天就把我的踩坑过程分享出来,保证小白也能看懂。
一、为什么要用Docker装博客
先说说我之前是怎么装的。
用的是传统的LNMP架构:买服务器 → 装Linux → 装Nginx → 装MySQL → 装PHP → 配置php-fpm → 下载博客程序 → 配置伪静态……
光环境配置就要折腾大半天,中间还踩了各种版本不兼容、权限问题的坑。有一次升级PHP,直接把网站搞崩了,恢复备份都花了两小时。
Docker的好处是什么呢?你不用关心环境怎么配。程序开发者把运行环境打包成「镜像」,你下载下来直接跑,就像点外卖一样简单。
换服务器?把镜像导出迁移就行,5分钟在新机器上复原。
升级出问题了?删掉重来,不影响主机环境。
二、Docker核心概念先搞清楚
镜像(Image)
可以理解成菜谱。Docker根据镜像里的指令来创建容器。你不需要知道菜谱怎么写的,只需要执行就行。
容器(Container)
根据镜像创建出来的运行实例。就像按照菜谱做出来的菜。菜可以删了重做,但菜谱(镜像)还在。
仓库(Registry)
放镜像的地方。最常用的是Docker Hub,类似手机的应用商店。
记住一个公式:镜像 + 运行状态 = 容器。
三、开始动手:5步搞定Docker博客
第一步:安装Docker
Linux服务器(以Ubuntu为例):
```bash
更新软件源
sudo apt update
安装必要依赖
sudo apt install -y curl wget vim
一键安装Docker
curl -fsSL https://get.docker.com | sh
启动Docker并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
```
Windows或Mac用户直接去官网下Docker Desktop,安装包大概800MB。
第二步:安装宝塔面板(可选)
如果你是新手,建议先装个宝塔面板,图形界面管理Docker会友好很多:
```bash
yum install -y宝塔面板安装脚本 && bt default
```
然后在宝塔后台找到「Docker」管理器,可以可视化操作。
第三步:拉取Nginx+PHP+MySQL镜像
最简单的方式是用`lnmp`镜像包:
```bash
拉取包含Nginx、PHP、MySQL的镜像
docker pull best AVAILABLE/lnmp
创建并运行容器
docker run -d \
--name myblog \
-p 80:80 \
-p 443:443 \
-v /www/wwwroot/blog:/www/wwwroot/blog \
-e MYSQL_ROOT_PASSWORD=你的数据库密码 \
best AVAILABLE/lnmp
```
解释一下参数:
- `--name myblog`:给容器起个名字
- `-p 80:80`:把容器的80端口映射到服务器的80端口
- `-v /www/wwwroot/blog:/www/wwwroot/blog`:把服务器目录挂载到容器里,这样数据不会丢
- `-e MYSQL_ROOT_PASSWORD`:设置MySQL密码
第四步:下载并配置Z-Blog
```bash
进入挂载的目录
cd /www/wwwroot/blog
下载Z-Blog
wget https://update.zblogcn.com/dl/Z-BlogPHP_1_7_2_2140.tar.gz
解压
tar -xzvf Z-BlogPHP_1_7_2_2140.tar.gz
给权限
chmod -R 755 /www/wwwroot/blog
chown -R www:www /www/wwwroot/blog
```
然后浏览器访问你的服务器IP,按照向导填写数据库信息就行。
第五步:配置域名和SSL
在宝塔面板里添加站点,绑定你的域名,然后申请免费的Let's Encrypt证书。
Docker容器里的Nginx配置需要在容器内修改,或者通过宝塔的可视化界面统一管理。
四、Docker日常维护命令
学会这几个命令就够了:
```bash
查看运行中的容器
docker ps
停止容器
docker stop myblog
启动容器
docker start myblog
查看容器日志
docker logs -f myblog
进入容器内部(类似SSH)
docker exec -it myblog bash
更新镜像
docker pull best AVAILABLE/lnmp
docker stop myblog
docker rm myblog
重新运行,保留数据卷
docker run -d --name myblog -p 80:80 -v /www/wwwroot/blog:/www/wwwroot/blog best AVAILABLE/lnmp
```
五、我的踩坑经验总结
坑1:端口冲突
如果服务器上已经跑了Nginx,Docker里的Nginx又占用了80端口,就会冲突。解决方法:要么停掉服务器的Nginx,要么改Docker端口映射为`-p 8080:80`。
坑2:数据丢失
刚开始我用Docker没挂载数据卷,结果删了容器之后文章全没了欲哭无泪。后来学会`-v`挂载数据目录,数据存在服务器上,容器随便删。
坑3:内存爆了
Docker默认不限制内存,但如果你的服务器只有1G内存,MySQL可能跑不动。启动时加参数限制:`--memory=512m --memory-swap=1g`。
坑4:防火墙拦了
我在阿里云服务器上部署完,发现访问不了。后来才想起来安全组没开80和443端口白折腾了半天。
六、Docker vs 传统部署对比
| 对比项 | 传统LNMP | Docker部署 |
|---|---|---|
| 安装耗时 | 2-4小时 | 5-15分钟 |
| 环境兼容性 | 依赖服务器系统 | 跨平台通用 |
| 迁移难度 | 麻烦,需要重新配置 | 导出镜像即可 |
| 版本升级 | 容易出兼容性问题 | 回滚镜像即可 |
| 资源占用 | 较小 | 额外占用容器开销 |
FAQ常见问题
Q:Docker对服务器配置要求高吗?
A:1核1G能跑,但建议2核2G以上,不然MySQL可能会内存不足。
Q:容器删掉之后数据还在吗?
A:只要你用`-v`参数挂载了数据卷,容器删了数据还在服务器上。没挂载的话就没了。
Q:怎么查看Docker占用了多少资源?
A:`docker stats`可以看到所有容器的CPU、内存、网络使用情况。
Q:可以同时跑多个博客吗?
A:可以,每个博客用不同的容器和端口就行。比如`-p 8081:80`映射到8081端口。
Q:容器出问题了怎么排查?
A:先`docker logs -f 容器名`看日志,如果容器内命令有问题,用`docker exec -it 容器名 bash`进入容器内部排查。
标签:Docker部署博客, Z-Blog安装教程, 容器化建站, Linux服务器配置, 宝塔面板Docker
需要了解更多使用技巧?
扫码加我微信,我来给你详细解答!
微信号:15207283116
(博客来的朋友优先通过!)
—— 本文仅供参考,具体以实际情况为准 ——
还木有评论哦,快来抢沙发吧~