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组件

  1. 浏览器访问 http://主机IP:新端口
  2. 登录宝塔 → 应用商店 → 安装:
    • Nginx(建议最新稳定版)
    • MySQL(按项目需求)
    • PHP(多版本可选)
    • Python(为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

Docker hub仓库


七、避坑指南(常见问题解决)

  1. 宝塔服务未自启?
    确保启动命令包含 /usr/sbin/init,这是systemd托管服务的关键

  2. 中文显示乱码?
    检查是否漏执行 locale-genupdate-locale

  3. 端口冲突问题
    建议在容器内修改宝塔默认端口:

    bt
    1  # 修改端口为例如 8888
    
  4. 安全提醒

    • 务必修改默认账号密码
    • 生产环境建议绑定独立数据卷:
      -v /your/mysql_data:/var/lib/mysql
      

通过这个标准化流程,你可以为不同项目定制专属环境镜像。下次部署新项目时,直接运行 docker run 就能获得开箱即用的开发环境啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92930.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92930.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/92930.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.net\c#web、小程序、安卓开发之基于asp.net家用汽车销售管理系统的设计与实现

.net\c#web、小程序、安卓开发之基于asp.net家用汽车销售管理系统的设计与实现

药房智能盘库系统:基于CV与时间序列预测的库存革命

> 在医疗资源日益紧张的今天,**全国78%的药房仍依赖人工盘库**,平均每100家药房每年因库存问题损失超50万元。当计算机视觉遇见时间序列预测,一场药房库存管理的智能化革命正在悄然发生。 --- ### 一、传统药房库存的三大痛点与破局思路 #### 致命痛点分析 1. **人工…

【互动屏幕】解析双屏联动在数字展厅中的应用与价值

双屏联动 https://www.bmcyzs.com/ 作为现代展厅设计中的重要技术手段,通过两块或多块屏幕的协同工作,实现了信息的动态展示与交互体验的提升。在展厅环境中,双屏联动软件能够将触摸屏与大屏幕无缝连接,使观众通过简单的操作即可控…

clickhouse基础概念及集群部署

一. 简述: ClickHouse 是一款高性能列式存储数据库,专为海量数据的实时分析场景设计。它以极致的查询速度、高效的存储利用率和强大的并行处理能力著称,广泛应用于日志分析、用户行为分析、业务监控等大数据分析领域。1. 核心特性&#xff1a…

低版本 IntelliJ IDEA 使用高版本 JDK 语言特性的问题

现实问题: 目前最新的 IntelliJ IDEA 已经不支持在 Win7 环境上安装了,如果企业内开发环境仍然是 Win7,就会导致很多问题。 比如当前 IDEA 版本为 2023.1,最大支持 JDK17,如何正常使用 JDK21 的新特性呢?比…

3分钟 Spring AI 实现对话功能

1.什么是spring AISpring AI 是 Spring 官方推出的一个基于 Spring 生态的 AI 应用开发框架,旨在简化将人工智能(如大语言模型、生成式 AI)集成到 Java 应用中的过程。它提供了统一的 API 和工具,让开发者能更轻松地调用 AI 模型2…

CMake笔记:配置(Configure)、生成(Generate)和构建(Build)

以下为AI生成的内容&#xff1a; 一、配置阶段&#xff08;Configure&#xff09; 本质&#xff1a;解析项目逻辑&#xff0c;构建内存模型 触发命令&#xff1a;cmake -S <源码路径> -B <构建路径> 关键操作与输出&#xff1a;操作类型典型案例输出产物变量定义se…

直接编辑pdf文件教程

工具下载地址&#xff1a;https://pan.quark.cn/s/4befbe5f4a77 一、下载并安装软件二、打开软件&#xff0c;并打开一个pdf文件三、编辑PDF文件&#xff0c;并保存四、关闭软件&#xff0c;打开源文件查看效果。

javaswing json格式化工具

效果展示代码 package com.example.springbootdemo;import javax.swing.*; import javax.swing.border.TitledBorder; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeSelectionModel; import java.…

真实案例 | 如何用iFlyCode开发Webpack插件?

01案例背景在项目中&#xff0c;我们经常需要存档前端每次打包的版本&#xff0c;方便线上快速切换不同版本使用。经过思考&#xff0c;我们可以在打包时&#xff0c;将本次打包结果另存为zip压缩包&#xff0c;方便后续使用。于是我准备开发一个Webpack插件实现此功能&#xf…

19day-人工智能-机器学习-分类算法-决策树

1. 什么是决策树学过数据结构与算法的小伙伴应该对树不陌生吧&#xff0c;这里的决策树也是大同小异的&#xff0c;只是每次反之都有一个条件来决定流向的。1.1 决策节点通过条件判断而进行分支选择的节点。如&#xff1a;将某个样本中的属性值(特征值)与决策节点上的值进行比较…

地球磁层全球MHD模型中模拟Dst指数的半经验方法

A semi-empirical approach to simulating the Dst index in global MHD models of Earth’s magnetosphere pdf 1 Introduction Dst指数 (Disturbance storm time index, 地磁暴时扰动指数) 是描述磁暴活动强度应用最广泛的指数&#xff0c;对于研究地磁扰动和磁暴具有重要意…

什么是脏读、幻读、不可重复读?

脏读、幻读和不可重复读是数据库事务隔离级别中常见的三种数据一致性问题。它们描述了在并发事务环境下可能出现的异常现象。下面通过对比表格和具体示例进行清晰解析&#xff1a;核心概念对比表问题类型触发场景本质原因示例脏读 (Dirty Read)事务A读取了事务B未提交的修改读取…

腾讯位置商业授权微信小程序关键词输入提示

微信小程序JavaScript SDK 开发指南 关键词输入提示 getSuggestion(options:Object) 用于获取输入关键字的补完与提示&#xff0c;帮助用户快速输入 注&#xff1a;坐标系采用gcj02坐标系 options属性说明 属性类型必填说明keywordString是用户输入的关键词&#xff08;希望…

LabVIEW菜单操控

该程序围绕运行时菜单栏操作&#xff0c;实现从初始化构建菜单结构&#xff08;含菜单项、快捷键 &#xff09;&#xff0c;到响应交互删除特定菜单项&#xff0c;再到监控界面事件驱动逻辑&#xff0c;完成自定义菜单交互全流程&#xff0c;适配需灵活菜单控制的程序开发场景。…

Web 服务详解:HTTP 与 HTTPS 配置

Web 服务详解&#xff1a;HTTP 与 HTTPS 配置 一、HTTP 服务概述 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是用于在网络上传输网页数据的基础协议&#xff0c;默认使用80 端口&#xff0c;以明文形式传输数据。常见的 HTTP 服务软…

YOLO-v2-tiny 20种物体检测模型

一、简介 YOLO-v2-tiny是基于YOLO(You Only Look Once)实时目标检测算法的轻量级版本&#xff0c;专门为嵌入式设备和资源受限环境优化。本模型能够检测20种常见物体类别&#xff0c;在保持较高检测精度的同时大幅减少了计算量和模型大小。 20种物体检测模型&#xff0c; 使用…

heterophilic graph和hetergeneous graph区别(附带homophilic graph 和homoegeneous graph)

Heterophilic Graph&#xff08;异配图&#xff09;连接的节点在属性上不相似,但是所有节点和边的类别都是同一种类型&#xff0c;数据集如squirrel / chameleon&#xff0c;它们是 heterogeneous graph&#xff08;异质图&#xff09;而不是Heterophilic Graph&#xff08;异配…

Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞检测,命令执行,Getshell

工具介绍 Thinkphp(GUI)漏洞利用工具&#xff0c;支持各版本TP漏洞检测&#xff0c;命令执行&#xff0c;Getshell。JAVAFX可视化编写&#xff0c;博主第一次用javafx来写界面&#xff0c;第一次学习尝试&#xff0c;仅仅只用于学习尝试如果缺少什么payload&#xff0c;欢迎提交…

GitHub分支保护介绍(Branch Protection)(git分支保护)(通过设置规则和权限来限制对特定分支的操作的功能)

文章目录**1. 核心功能****a. 防止误操作****b. 强制代码审查****c. 状态检查&#xff08;Status Checks&#xff09;****d. 权限控制****2. 如何设置分支保护&#xff1f;**1. **进入仓库设置**2. **添加分支保护规则**3. **配置保护规则**4. **保存设置****3. 常见应用场景**…