Docker安装宝塔环境

利用Docker运行Centos容器,在Centos容器内安装宝塔

1.容器启动与宝塔安装

1.1 容器的启动

# 拉取 Centos纯净镜像
docker pull centos
# 创建并启动容器
docker run -it -d \
  --name=centos \
  -p 8888:8888 \ 
  centos
# 注:映射端口8888,为了安装完成宝塔后,能进入宝塔进行配置

1.2 容器内安装宝塔

启动容器后,接下来就进入容器内,在容器内安装宝塔

# 进入容器
docker exec -it centos /bin/bash
# 创建并切换到临时安装目录
mkdir /root/bt&&cd /root/bt
# 执行官方安装脚本,等待安装完成
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

2. 宝塔配置

2.1 组件安装

待安装完成后,打开浏览器访问 ip:8888/安全登录地址 ,利用安装完成界面给定的用户名密码进行登录,

提示安装环境时,推荐默认个lnmp,然后对面板进行配置,更改登录安全地址,更改用户名密码,安装需要的插件(为了导出镜像大小,可以不用安装,后期部署后在装)

待宝塔面板组件安装完毕后,需要进入/www/panel内,将缓存文件删除,不然导出镜像会很大

2.2 启动脚本

需要启动脚本来启动容器内宝塔面板,将shell脚本保存在任意位置,并设置可执行权限,在启动容器时需要,这里以保存为/www/Start.sh为例:

#!/bin/sh

echo "Starting..."
# 启动宝塔面板
echo "Starting BT"
/etc/init.d/bt start
# 启动Nginx
echo "Starting nginx"
/etc/init.d/nginx start
# 启动Apache 如果用的lamp
#echo "Starting Apache"
#/etc/init.d/httpd start
# 启动MySQL
echo "Starting mysqld"
/etc/init.d/mysqld start
# 启动ftp
echo "Starting pure-ftpd"
/etc/init.d/pure-ftpd start
# 启动 php-fpm 根据自己所安装的版本,可以添加多个版本一同启动
echo "Starting php-fpm-56"
/etc/init.d/php-fpm-56 start
echo "Starting php-fpm-72"
/etc/init.d/php-fpm-72 start
# 阻止容器结束运行
while(true)
do
  sleep 60
done

3. 容器导出

待宝塔面板配置完成后,即可对容器保存为镜像并导出

# 执行 `docker commit <container_id> <images_name>` 命令保存镜像
docker commit centos mybt:1.0
# 执行 `docker save` 对镜像进行导出
docker save -o mybt.tar mybt:1.0

4. 宝塔容器的部署

4.1 镜像导入

第三步中,将导出镜像分发到所需服务器,然后导入镜像

# 执行 `docker load` 导入镜像
docker load -i mybt.tar
# 检查镜像是否导入
docker images

4.2 容器配置启动

在上一步镜像入后,即可配置并启动容器

docker run \
  -it -d \
  --name=mybt \
  -p 8888:8888 \
  -p 80:80 \
  -p 888:888 \
  -p 443:443 \
  -p 21:21 \
  -v ~/mybt/wwwroot:/www/wwwroot \
  -v ~/mybt/backup:/www/backup \
mybt:1.0 /www/Start.sh
# 注意: 映射端口时,如果需要在外部使用工具管理MySQL时,添加3306端口的映射,以及其他所需端口,另外目录绑定也同理

容器启动之后,就可以访问 ip:8888/设置的登录地址 利用已设置的用户名密码登录宝塔面板

说明: 这里实际还是存在不足的地方,这样安装,run容器时得加上-it参数,不然会直接结束,并且容器不能检查宝塔的运行情况,可能实现宝塔面板已经停止了,但是容器还在正常运行中(虽然可以靠更改启动脚本作为守护进程),并且不能告诉容器需要映射那些端口,因此不能使用--net=host来映射所有容器内服务端口,如果用于生产环境,还是推荐使用Dockerfile进行镜像构建,那样就不用启动容器内脚本方式来启动了

Last modification:June 3rd, 2020 at 01:22 am
如果觉得我的文章对你有用,请随意赞赏