Docker实战:为项目打造即开即用的宝塔LNMP环境
Docker实战:为项目打造即开即用的宝塔LNMP环境
- 背景
- 一、准备基础镜像
- 二、启动配置容器(关键步骤)
- 三、容器内环境配置(逐步执行)
- 1. 基础环境搭建
- 2. 安装Systemd(宝塔依赖)
- 3. 安装宝塔面板(自动化部署)
- 4. 安装LNMP组件
- 5. 清理空间
- 四、生成定制镜像
- 五、验证镜像可用性
- 六、镜像管理技巧
- 1. 版本迭代
- 2. 镜像分发
- 3. 推送到DockerHub
- 七、避坑指南(常见问题解决)
背景
因为经常帮别人做一些项目,我习惯使用宝塔面板去配置一些比较简单的项目,这样比较方便我本地测试和快速的上线管理和维护, 但是也有麻烦的,就是经常需要为不同项目配置测试环境,然后在里面去安装应用,实在是麻烦。
今天分享一个实用技巧:将宝塔面板+LNMP环境封装成Docker镜像,实现10秒快速部署完整PHP/Python开发环境。下面是我的完整操作流程:
一、准备基础镜像
docker pull ubuntu:24.04 # 使用官方LTS版本
为什么选24.04?
LTS版本提供5年支持周期,避免频繁升级带来的兼容性问题。
二、启动配置容器(关键步骤)
docker run -it --name bt-builder \--net=host \ # 共享主机网络(简化端口映射)--hostname my-bt-server \ # 设置容器主机名--privileged=true \ # 授予特权(systemd必需)ubuntu:24.04 \bash # 进入交互模式
⚠️ 注意:这里使用 --privileged
是为后续systemd正常运行做准备,非特权容器会导致宝塔服务启动失败。
三、容器内环境配置(逐步执行)
1. 基础环境搭建
# 更新系统并安装工具链
apt update && apt upgrade -y
apt install -y locales ca-certificates curl wget git vim sudo bash net-tools iputils-ping# 配置UTF-8环境(解决中文乱码)
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen en_US.UTF-8
update-locale LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8# 验证语言环境
locale
2. 安装Systemd(宝塔依赖)
apt install -y --reinstall systemd init # Ubuntu24.04需显式安装
3. 安装宝塔面板(自动化部署)
# 官方一键安装脚本(截止目前最新版本为11.0.0)
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec
安装完成后按提示操作:
bt # 启动控制台
1. 修改面板端口(避免冲突)
2. 修改登录账号
3. 修改登录密码(务必设置强密码!)
4. 安装LNMP组件
- 浏览器访问
http://主机IP:新端口
- 登录宝塔 → 应用商店 → 安装:
- Nginx(建议最新稳定版)
- MySQL(按项目需求)
- PHP(多版本可选)
- Python(为Python项目准备,安装路径如下图所示)
5. 清理空间
apt clean && rm -rf /var/lib/apt/lists/* # 释放约300MB空间
exit # 退出容器
四、生成定制镜像
docker commit \--message "Ubuntu24.04 + 宝塔面板 + LNMP" \bt-builder \ # 容器名ubuntu_bt_lnmp:1.0 # 镜像标签
✅ 最佳实践:用版本号标记镜像(如1.0),方便后续升级管理。
五、验证镜像可用性
# 启动生产容器(注意使用init系统)
docker run -d \--net=host \--name bt-production \--privileged=true \ubuntu_bt_lnmp:1.0 \/usr/sbin/init # 关键!使systemd托管服务# 查看服务状态
docker exec bt-production bt status
此时宝塔面板应可通过 http://主机IP:端口
访问,Nginx/MySQL等服务自动运行。
六、镜像管理技巧
1. 版本迭代
# 每次更新后打新标签
docker commit bt-builder ubuntu_bt_lnmp:1.1
docker tag ubuntu_bt_lnmp:1.1 ubuntu_bt_lnmp:latest
2. 镜像分发
# 导出镜像
docker save -o ubuntu_bt_lnmp-v1.0.tar ubuntu_bt_lnmp:1.0# 导入镜像
docker load -i ubuntu_bt_lnmp-v1.0.tar
3. 推送到DockerHub
docker tag ubuntu_bt_lnmp:1.0 yourname/ubuntu-bt-lnmp:1.0
docker login
docker push yourname/ubuntu-bt-lnmp:1.0
七、避坑指南(常见问题解决)
-
宝塔服务未自启?
确保启动命令包含/usr/sbin/init
,这是systemd托管服务的关键 -
中文显示乱码?
检查是否漏执行locale-gen
和update-locale
-
端口冲突问题
建议在容器内修改宝塔默认端口:bt 1 # 修改端口为例如 8888
-
安全提醒
- 务必修改默认账号密码
- 生产环境建议绑定独立数据卷:
-v /your/mysql_data:/var/lib/mysql
通过这个标准化流程,你可以为不同项目定制专属环境镜像。下次部署新项目时,直接运行 docker run
就能获得开箱即用的开发环境啦!