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

```

更新软件源-第1张图片-无双博客

解释一下参数:

  • `--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 传统部署对比

对比项传统LNMPDocker部署
安装耗时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