制作基于Debian的宝塔Docker镜像
容器基础环境搭建:
XML/HTML代码
- #拉取Debian镜像
- docker pull debian
- #运行Debian
- docker run -itd --privileged=true --shm-size=1g --name=baota --net=host --restart=always -v /www/wwwroot:/www/wwwroot debian
- #进入容器内部
- docker exec -it baota /bin/bash
- #替换镜像源(有良好的国际互联网连接则可以不用)&更新源
- sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list && apt-get update
- #设置临时环境变量,用于静态交互
- export DEBIAN_FRONTEND=noninteractive
- #安装软件包,如果不使用curl安装宝塔面板则可以不安装curl,wget同理,其它的软件包真的用不到也可以不安装
- apt-get install -y init procps wget iproute2
- //apt-get install -y curl
安装宝塔面板(命令二选一):
宝塔开心版出自:https://bt.sy/ 宝塔官网:https://www.bt.cn/
XML/HTML代码
- #试验性Centos/Ubuntu/Debian安装命令 独立运行环境(py3.7)可能存在少量兼容性问题
- curl -sSO http://io.bt.sy/install/install_panel.sh && bash install_panel.sh
- #Debian安装命令:
- wget -O install.sh http://io.bt.sy/install/install-ubuntu_6.0.sh && bash install.sh
XML/HTML代码
- wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh
询问是否安装,回复y继续,中途可能会遇到报错,自行解决。
安装完成后,输入bt可查看命令,如果输入了这个就直接交互数字就行了。
XML/HTML代码
- ===============宝塔面板命令行==================
- (1) 重启面板服务 (8) 改面板端口
- (2) 停止面板服务 (9) 清除面板缓存
- (3) 启动面板服务 (10) 清除登录限制
- (4) 重载面板服务 (11) 取消入口限制
- (5) 修改面板密码 (12) 取消域名绑定限制
- (6) 修改面板用户名 (13) 取消IP访问限制
- (7) 强制修改MySQL密码 (14) 查看面板默认信息
- (22) 显示面板错误日志 (15) 清理系统垃圾
- (23) 关闭BasicAuth认证 (16) 修复面板(检查错误并更新面板文件到最新版)
- (24) 关闭动态口令认证 (17) 设置日志切割是否压缩
- (25) 设置是否保存文件历史副本 (18) 设置是否自动备份面板
- (0) 取消 (29) 取消访问设置验证
- ===============================================
- 请输入命令编号:
- ===============================================
高级设置:
输入前面设置的账号密码登录(如果没有重设账号密码就按照安装后提示的账号密码登录)
阅读《用户协议》并确认,进入面板(可以先不用安装推荐的选项)
按照自己的需要自定义设置
本地测试可以把面板设置里的IP地址改成0.0.0.0
如果需要IPV6则可以在面板设置里打开监听IPv6开关
退出容器内部
exit
然后提交成本地镜像
docker commit baota xiwangly/baota:latest
导出镜像到文件(可选)
docker save -o xiwangly-baota.tar xiwangly/baota:latest
登录Docker Hub
docker login
//输入账号密码登录
推送到Docker Hub
docker push xiwangly/baota:latest
以上操作可以整合修改为Dockerfile一键构建镜像,使用下面的Dockerfile自动化构建(安装用的URL自己找):
XML/HTML代码
- FROM debian
- RUN /bin/bash -c '\
- sed -i "s/deb.debian.org/mirrors.ustc.edu.cn/g" /etc/apt/sources.list;\
- apt-get update;\
- export DEBIAN_FRONTEND=noninteractive;\
- apt-get install -y init procps wget iproute2;\
- export go=y;\
- wget -O install.sh http://xxx.com/install/install-ubuntu_6.0.sh && bash install.sh -y;\
- export go=;\
- export DEBIAN_FRONTEND=;\
- bt 11;\
- echo 123456 | bt 5 123456;'
之后要用就可以从Docker Hub拉取镜像
docker pull xiwangly/baota:latest
或者从导出的镜像文件导入(可选)
docker load -i xiwangly-baota.tar
之后就可以删除这个容器
docker rm -f baota
再run,使用init进行初始化(也就是让服务开机自启)
Linux系统用这个命令运行
XML/HTML代码
- docker run -itd --privileged=true --shm-size=1g --name=baota --net=host --restart=always -v /www/wwwroot:/www/wwwroot xiwangly/baota /sbin/init
XML/HTML代码
- docker run -itd --name=baota -p 80:80 -p 443:443 -p 8888:8888 -p 888:888 -p 3306:3306 -p 21:21 -p 22:22 --privileged=true --shm-size=1g --restart=always -v /www/wwwroot:/www/wwwroot xiwangly/baota /sbin/init
根据实际需要更改这个docker run命令的参数
进入容器,之后怎么用就看自己了
docker exec -it baota /bin/bash
退出容器
exit
删除容器
docker rm -f baota
删除镜像
docker rmi xiwangly/baota:latest
其他Docker宝塔镜像:
Dockerhub:https://hub.docker.com/r/btpanel/baota
此docker镜像由堡塔安全官方发布,镜像版本为宝塔面板8.0.5正式版,镜像会随着正式版的宝塔面板更新 目前支持x86_64和arm架构可供下载使用(官方原版同步)
注意:部署完成后,请立即登录宝塔面板--->面板设置中修改用户名和密码并修改安全入口
latest 标签拉取的是lib标签,安装了面板并且安装集成依赖包,安装每个软件都会快一点。
fresh 标签表示安装了面板但是没有安装集成依赖包,安装第一个软件会比较慢,因为需要装依赖包。
lib标签表示安装了面板并且安装集成依赖包,安装每个软件都会快一点。
lnmp 标签表示安装了面板、集成包并且集成LNMP【Nginx1.24+MySQL8.0+PHP8.2】
7.9.4的lnmp 标签表示安装了面板、集成包并且集成LNMP【Nginx1.22+MySQL5.7+PHP7.4】arm标签是MySQL5.6
lamp 标签表示安装了面板、集成包并且集成LAMP【Apache2.4+MySQL8.0+PHP8.2】
7.9.4的lamp 标签表示安装了面板、集成包并且集成LAMP【Apache2.4+MySQL5.7+PHP7.4】arm标签是MySQL5.6
如何拉取镜像
仅拉取镜像保存到本地,不部署容器,仅需拉取一次,永久存储到本地镜像列表
docker pull btpanel/baota:lnmp
7.9.4旧镜像拉取方式
docker pull btpanel/baota:7.9.4-lnmp
小贴士:即使不拉取镜像,在下面部署的时候如果docker本地镜像列表找不到镜像,docker会从云镜像库里面拉取,只要执行一次之后镜像就会永久存储到本地镜像列表中。
疑问?:我是arm服务器arch64架构怎么办?
答疑!:直接拉取镜像即可,docker默认会根据系统架构自动拉取匹配架构的镜像到本地。
如何部署
方法1:复制下方的命令,无需映射端口使用本地网络直接部署宝塔面板docker镜像。
XML/HTML代码
- docker run -d --restart unless-stopped --name baota --net=host -v ~/website_data:/www/wwwroot -v ~/mysql_data:/www/server/data -v ~/vhost:/www/server/panel/vhost btpanel/baota:lnmp
XML/HTML代码
- docker run -d --restart unless-stopped --name baota -p 8888:8888 -p 22:22 -p 443:443 -p 80:80 -p 888:888 -v ~/website_data:/www/wwwroot -v ~/mysql_data:/www/server/data -v ~/vhost:/www/server/panel/vhost btpanel/baota:lnmp
~/website_data修改成/home/website_data
~/mysql_data修改成/home/mysql_data
~/vhost修改成/home/vhost
此时我的容器启动命令就是这个
XML/HTML代码
- docker run -d --restart unless-stopped --name baota --net=host -v /home/website_data:/www/wwwroot -v /home/mysql_data:/www/server/data -v /home/vhost:/www/server/panel/vhost btpanel/baota:lnmp
小提示
1.如果你希望运行的docker在你设置了内容以后,再commit打包成自己的镜像留着日后使用,请不要映射目录运行容器,可以使用下面的方法运行容器,这样打包容器就能将你的网站内容、各种设置、数据库一起打包在里面
docker run -d --net=host btpanel/baota:lnmp
2.额外参数作用简要说明:
#重启docker后自启容器
--restart unless-stopped
#命名改容器命为baota,如果已经存在一个请设置成其他
--name baota
如何访问
现在,您可以在浏览器访问默认地址 http://您的ip地址:8888/btpanel 上的宝塔面板。
默认用户:btpanel
默认密码:btpaneldocker
镜像默认SSH密码:btpaneldocker
无法访问?
请检查系统防火墙以及服务器商家安全组是否开放了8888端口,下面给出系统防火墙firewalld(必需)的开放方法
添加8888端口放行(必需):
firewall-cmd --zone=public --remove-port=8888/tcp --permanent
重载firewalld(必需):
firewall-cmd --reload
端口使用分析
SSH:22
MySQL:3306
网站服务:80,443
宝塔面板:8888
phpmyadmin:888
目录使用分析
容器里面的网站数据目录:/www/wwwroot
MySQL数据目录:/www/server/data
vhost文件路径:/www/server/panel/vhost
使用有任何问题或者建议,欢迎广大用户在此贴提交,您宝贵的建议会让我们有更大的动力
相关学*教程参考:
https://www.runoob.com/docker/docker-command-manual.html
Docker 官方文档: https://docs.docker.com/
常见问题和解决方法
1.计划任务不自动执行的解决方法
进入容器内
docker exec -it ID bash
然后执行下面的命令重启激活计划任务程序,再删掉面板添加的计划任务重新添加一遍就可以了
pkill crond && /sbin/crond
2.数据库页面提示密码错误的解决方法在数据库页面点击root密码,重置MySQL密码即可
3.fresh、lib标签安装软件后无法自启动的解决方法;根目录下有个bt.sh的文件,添加下面的内容即可,php记得换成自己的版本,如果是apache将nginx换成httpd;其他软件需要自启也同样加内容到这个bt.sh脚本里面。
XML/HTML代码
- /etc/init.d/nginx start
- /etc/init.d/mysqld start
- /etc/init.d/php-fpm-74 start
- /etc/init.d/pure-ftpd start
- /etc/init.d/bt restart
- pkill crond
- /sbin/crond
- tail -f /dev/null
原版7.7.0优化版:https://hub.docker.com/r/gettionhub/baota
尽可能使用编译安装,否则容易出问题。
注:如果启动nginx的时候报这个错误:error while loading shared libraries: libgd.so.2: cannot open shared object,是因为缺失gd库,把他装上就可以了。
使用yum安装程序会出现错误,是因为默认的源有问题,可以更换源后再安装。(centos系统)
XML/HTML代码
- #更换源
- bash <(curl -sSL https://linuxmirrors.cn/main.sh)
- #安装gd库
- yum install gd
如果yum搜索不到gd库的安装包,可以手动下载对应rpm包,下载地址:http://rpmfind.net/linux/rpm2html/search.php?query=libgd.so.2下载完了之后安装即可。安装完成之后,再启动nginx正常。