在docker中手动安装宝塔面板(bt.cn)

@Ta 2021-12-22发布,03-23 13:57修改 3846点击

在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 && 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),所以宝塔开启的任何服务都能直接被外界访问。
  • 因为宝塔容器没有网络管理权限,所以宝塔的防火墙功能不会生效。
回复列表(12)
  • @Ta / 2021-12-22 / /

    我看见在宝塔中装Docker的
    又看见Docker中装宝塔的

    小米MIX2s(白)
  • @Ta / 2021-12-22 / /
    @水木易安,对的,docker里面装宝塔,然后在宝塔里面装个docker,然后在宝塔的docker里面在装个宝塔
  • 06
    @Ta / 2021-12-22 / /

    @love封尘,套娃?

  • @Ta / 2021-12-22 / /

    @06,docker in docker

    https://www.cnblogs.com/kirito-c/p/11357522.html

    (其实没有套娃,只有一层docker)

  • @Ta / 2021-12-22 / /
    被锁定
    层主 @MFVPNHAHA 于 2021-12-22 22:33 删除了该楼层。
  • @Ta / 2021-12-25 / /

    @老虎会游泳,似乎需要端口映射?无法直接访问ip+8888访问后台

    本消息来自粉金版 爱欧博客

  • @Ta / 2021-12-25 / /

    @老子会游泳--network host是不需要端口映射的,如果无法访问,请检查主机防火墙规则和云服务安全组。如果忘记加--network host,那就需要端口映射。

    注意:宝塔的防火墙功能没有任何效果,所以如果主机开启了防火墙,就必须自行配置规则放行端口。或者也可以选择禁用主机防火墙,使用云服务安全组来充当防火墙功能。

    当然,如果在云服务安全组那边忘记放行端口,那就还是无法访问。

  • @Ta / 2021-12-25 / /

    @老虎会游泳,我用的openwrt搭建的,应该没有防火墙

    本消息来自粉金版 爱欧博客

  • @Ta / 2021-12-25 / /

    @老虎会游泳,已解决原来是8888端口冲突ᥬ

    本消息来自粉金版 爱欧博客

  • @Ta / 2021-12-29 / /

    这个docker镜像能ssh登陆进去吗?
    红米K30S

  • @Ta / 2021-12-29 / /
    @值班电工, docker是一个容器,默认没有sshd-server,你可以装一个,然后端口映射,你所说的ssh只是linux的一个sshd-server服务。
    为什么默认没有呢?因为你在宿主机下输入 docker exec -it 容器id /bin/bash 就能进入他的容器stdin/stdout了,所以没那必要。

    还有@老虎会游泳, dockerhub 有宝塔官方成品,直接docker pull就行了。
  • @Ta / 03-23 14:16 / /

    备注1:请安装cronie软件包,否则会缺少计划任务功能,证书不能自动续期。我已更新教程,补充了该软件包。

    docker exec -it bt bash
    yum install cronie
    

    装好后检查宝塔的计划任务,如果是停用,记得点启用。
    图片.png

添加新回复
回复需要登录