一、编写Dockerfile文件
启动脚本里面使用debian12做为基本镜像,因为宝塔最推荐此系统,里面使用的运行脚本bt.sh,下面有代码
# 使用官方 Debian 12 作为基础镜像 FROM debian:12 # 设置维护者信息(可选,名称和邮件) LABEL maintainer="xxxx xxxx888@qq.com" # 设置环境变量,避免交互式安装时的提示 ENV DEBIAN_FRONTEND=noninteractive # 设置默认时区(避免交互式配置) ENV TZ=Asia/Shanghai RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && \ echo $TZ > /etc/timezone # 使用中科大 USTC镜像源 RUN sed -i 's@deb.debian.org@mirrors.ustc.edu.cn@g' /etc/apt/sources.list.d/debian.sources # 更新系统并安装必要的软件包 RUN apt-get update && \ apt-get install -y wget curl sudo cron unzip locales procps iproute2 python3 python3-pip && \ ln -s /usr/bin/python3 /usr/bin/python && \ echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && \ locale-gen en_US.UTF-8 && \ update-locale LANG=en_US.UTF-8 # 设置语言环境 ENV LANG=en_US.UTF-8 \ LANGUAGE=en_US:en \ LC_ALL=en_US.UTF-8 # 关闭防火墙(宝塔推荐) RUN systemctl disable ufw || true # 运行宝塔面板安装脚本 RUN wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && \ chmod +x install_panel.sh && \ bash install_panel.sh ed8484bec <<EOF y EOF # 清理和修改宝塔面板端口号 RUN apt-get clean && rm -rf /var/lib/apt/lists/* && \ echo "8888" > /www/server/panel/data/port.pl # 开放端口 EXPOSE 22 EXPOSE 80 EXPOSE 443 EXPOSE 3306 EXPOSE 8888 # 复制启动脚本(用于启动宝塔面板和应用,并保持容器运行) COPY ./bt.sh / # 运行 bash 作为默认命令 CMD ["/bin/bash", "/bt.sh"]
二、编写启动脚本
Docker下面服务需要自行启动,不会自动 启动,所以需要一个启动脚本,名称bt.sh,放在Dockerfile同级目录
脚本内容如下:
#!/bin/bash # 重启宝塔面板 /etc/init.d/bt restart # 设置 init 目录 initDir="/etc/init.d/" # 要排除的文件列表 exclude_files=("atd" "bt" "cron" "dbus" "exim4" "hwclock.sh" "procps" "sudo" "ufw" "x11-common") # 遍历 init.d 目录下的每个文件 for i in /etc/init.d/*; do # 提取文件名 filename=$(basename "$i") # 确保是文件且不在排除列表中 if [ -f "$i" ] && [[ ! " ${exclude_files[@]} " =~ " ${filename} " ]]; then echo "======Starting $filename ======" # 启动每个服务,确保它们是后台运行的 $i start fi done # 保持容器在后台运行,防止退出 tail -f /dev/null
三、使用构建命令构建脚本
脚本运行记录如下(只留下后面部分,构建时间看网络速度):
$ docker build -t btpanel-debian12 . [+] Building 202.4s (13/13) FINISHED docker:desktop-linux => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 1.62kB 0.0s => [internal] load metadata for docker.io/library/debian:12 23.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [1/8] FROM docker.io/library/debian:12@sha256:35286826a88dc879b4f438b645ba574a55a14187b483d09213a024dc0c0a64ed 0.0s => => resolve docker.io/library/debian:12@sha256:35286826a88dc879b4f438b645ba574a55a14187b483d09213a024dc0c0a64ed 0.0s => [internal] load build context 0.0s => => transferring context: 710B 0.0s => [2/8] RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone 0.2s => [3/8] RUN sed -i 's@deb.debian.org@mirrors.ustc.edu.cn@g' /etc/apt/sources.list.d/debian.sources 0.2s => [4/8] RUN apt-get update && apt-get install -y wget curl sudo cron unzip locales procps iproute2 python3 python3-pip && ln -s /usr/bin/python3 /usr/bin/python 43.7s => [5/8] RUN systemctl disable ufw || true 0.3s => [6/8] RUN wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && chmod +x install_panel.sh && bash install_panel.sh ed8484bec <<EOF 73.0s => [7/8] RUN apt-get clean && rm -rf /var/lib/apt/lists/* && echo "8888" > /www/server/panel/data/port.pl 0.4s => [8/8] COPY ./bt.sh / 0.2s => exporting to image 61.3s => => exporting layers 42.2s => => exporting manifest sha256:3f8fa296e6fa2c6557cde5ff51bd56d55aa99d8eff4cc4fe770415c755d30cf1 0.0s => => exporting config sha256:22622b05ad9dc4cfdd697383b6ceab1a33e5b4a470baffb44302086f11ae5795 0.0s => => exporting attestation manifest sha256:1f9c269f8370890fccc05e038733e5f559534d2c62a21bf6285cfed741c8ced8 0.0s => => exporting manifest list sha256:7cafabc6c825cbf53e1a9b90dda4c7e66d4ae17aab37eaf85791b2e1204b53da 0.0s => => naming to docker.io/library/btpanel-debian12:latest 0.0s => => unpacking to docker.io/library/btpanel-debian12:latest 19.1s View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/zmdw96hlq7mjhpjaqigoe9s9w What's next: View a summary of image vulnerabilities and recommendations → docker scout quickview
四、运行Docker容器
命令如下:
$ docker run -d --name btpanel \ -p 22:22 \ -p 8888:8888 \ -p 80:80 \ -p 443:443 \ -p 3306:3306 \ -v ./wwwroot:/www/wwwroot \ --restart unless-stopped \ btpanel-debian12:latest
由于不知道用户名密码和入口,所以请使用shell连接容器查询
使用docker ps可以查看容器信息
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 859f46038b00 btpanel-debian12:latest "/bin/bash /bt.sh" 37 seconds ago Up 36 seconds 0.0.0.0:22->22/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:3306->3306/tcp, 0.0.0.0:8888->8888/tcp btpanel
使用docker exec 进入容器shell
$ docker exec -it btpanel bash root@859f46038b00:/# bt ==================================宝塔面板命令行==================================== (1) 重启面板服务 (8) 改面板端口 | (2) 停止面板服务 (9) 清除面板缓存 | (3) 启动面板服务 (10) 清除登录限制 | (4) 重载面板服务 (11) 设置是否开启IP + User-Agent验证 | (5) 修改面板密码 (12) 取消域名绑定限制 | (6) 修改面板用户名 (13) 取消IP访问限制 | (7) 强制修改MySQL密码 (14) 查看面板默认信息 | (22) 显示面板错误日志 (15) 清理系统垃圾 | (23) 关闭BasicAuth认证 (16) 修复面板(检查错误并更新面板文件到最新版) | (24) 关闭动态口令认证 (17) 设置日志切割是否压缩 | (25) 设置是否保存文件历史副本 (18) 设置是否自动备份面板 | (26) 关闭面板ssl (19) 关闭面板登录地区限制 | (28) 修改面板安全入口 (29) 取消访问设备验证 | (30) 取消访问UA验证 (32) 开启/关闭【80、443】端口访问面板 | (0) 取消 | ==================================================================================== 请输入命令编号:14 =============================================== 正在执行(14)... =============================================== ================================================================== BT-Panel default info! ================================================================== 外网面板地址: http://240e:x:x:x::1:8888/4598cddd 内网面板地址: http://172.17.0.3:8888/4598cddd username: dulryzmx password: 6c0c5213 Warning: If you cannot access the panel, release the following port (8888|888|80|443|20|21) in the security group 注意:初始密码仅在首次登录面板前能正确获取,其它时间请通过 bt 5 命令修改密码 ================================================================== root@859f46038b00:/#
由上面的命令查询出入口地址和用户名密码,现在可以使用网页管理宝塔面板了
文章评论