在docker中手动安装宝塔面板(bt.cn)
在docker中手动安装宝塔面板(bt.cn)
好处:
- 宝塔损坏不会影响系统,修复宝塔也不需要重装,只要执行
docker rm -f bt删除宝塔容器就能消除所有影响(网站数据不会丢失,因为数据在主机的/www目录,不在容器内),再执行mv /www /www.old重命名/www文件夹,就能再用下面的方法重新安装宝塔。 - 即使系统不是 CentOS 7,也可以使用宝塔的“极速安装”功能(仅限x86_64,因为宝塔没有给arm64编译rpm包,所以arm64还是要编译安装)。
坏处:
- docker守护进程和容器内的systemd进程等占用了额外的内存。
- (也可能是好处)因为容器没有网络管理权限,所以宝塔的防火墙功能不会生效。
安装方法
# 安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#(x86_64)启动一个 CentOS 7 容器
#(你也可以换成别的,但是 CentOS 7 是宝塔的参考发行版,选 CentOS 7 才能让宝塔的“极速安装”功能生效)
#(“极速安装”功能仅限x86_64,因为宝塔没有给arm64编译rpm包,所以arm64还是要编译安装)
docker run -d --restart=always --name bt -it --network host --tmpfs /tmp:exec --tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /www:/www centos:7 /sbin/init
#(arm64)启动一个 OpenEuler 容器
#(不建议 arm64 使用 CentOS 7 容器,因为 gcc 版本太低,编译 memcached 的时候会失败)
#(所以这里换成华为的 OpenEuler 容器)
docker run -d --restart=always --name bt -it --network host --tmpfs /tmp:exec --tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro -v /www:/www openeuler/openeuler:20.03 /sbin/init
# 进入容器
docker exec -it bt bash
# (在容器内执行)修复安装软件包时出现 Unable to get systemd shutdown inhibition lock 的问题
[ -e /usr/bin/docker ] || sed -i 's/%__transaction_systemd_inhibit/#%__transaction_systemd_inhibit/g' /usr/lib/rpm/macros
# (在容器内执行)禁用不需要的服务
[ -e /usr/bin/docker ] || systemctl disable auditd.service systemd-hostnamed.service systemd-networkd-wait-online.service NetworkManager-wait-online.service NetworkManager.service
[ -e /usr/bin/docker ] || systemctl stop systemd-hostnamed.service systemd-networkd-wait-online.service NetworkManager-wait-online.service NetworkManager.service
[ -e /usr/bin/docker ] || systemctl set-default multi-user.target
exit
docker restart bt
docker exec -it bt bash
# (在容器内执行)安装宝塔
yum install -y wget cronie initscripts && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
容器管理
# 停止
docker stop bt
# 启动
docker start bt
# 重启
docker restart bt
网站根目录
网站根目录位于/www,在容器外也能访问。如果要在容器外替换/www文件夹,请先停止容器,否则替换不会生效。
其他说明
- 如果docker开机自启动,那么面板也会开机自启动(
--restart=always)。 - 宝塔容器和主机共享网络(
--network=host),所以宝塔开启的任何服务都能直接被外界访问。 - 因为宝塔容器没有网络管理权限,所以宝塔的防火墙功能不会生效。



;初玩 docker 不久,请教两个问题,如果不忙的话 
;如果我以默认网络模式拉起一个centos7容器,并且在这个容器里面并且设置了一些 iptables 规则。