孤鸿掠影 发表于 2019-12-17 15:40:55

基于centos 7 的lnmpa Dockerfile和启动脚本,求大神指点

    小白花了几天基于一位大神修改了个lnmpa的docker镜像,基于centos7,但是做出来镜像有3.54G之大,求大神指点怎么优化,谢谢!!下面附上Dockerfile文件和启动文件脚本。    过程中参考资料:https://hub.docker.com/r/itxq/lnmpa/dockerfile
    Dockerfile中可以针对lnmpa一键安装包需要选择的各程序版本做对应修改。
    在线等大神指点优化。
封装目录   web├── Dockerfile
└── run-lnmpa
封装命令(当前目录下) docker build --rm -t lnmpa .
Dockerfile#基于Centos镜像
FROM centos:7
#镜像作者信息
MAINTAINER 孤鸿 <wsc@wsczx.com>
#LNMPA 版本
ARG LNMPA_VERSION="1.6"
#MySql版本
#You have 11 options for your DataBase install.
#1: Install MySQL 5.1.73
#2: Install MySQL 5.5.62 (Default)
#3: Install MySQL 5.6.44
#4: Install MySQL 5.7.26
#5: Install MySQL 8.0.13
#6: Install MariaDB 5.5.63
#7: Install MariaDB 10.0.38
#8: Install MariaDB 10.1.40
#9: Install MariaDB 10.2.24
#10: Install MariaDB 10.3.15
#0: DO NOT Install MySQL/MariaDB
ARG DBSelect="10"
#MySQL ROOT 密码
ARG DB_ROOT_PASSWORD="P@ssw0rd"
#启用InnoDB Storage Engine
ARG InnoDBSelect="Y"
#PHP版本
#You have 9 options for your PHP install.
#1: Install PHP 5.2.17
#2: Install PHP 5.3.29
#3: Install PHP 5.4.45
#4: Install PHP 5.5.38
#5: Install PHP 5.6.40 (Default)
#6: Install PHP 7.0.33
#7: Install PHP 7.1.30
#8: Install PHP 7.2.19
#9: Install PHP 7.3.6
ARG PHPSelect="9"
#Memory Allocator名称
#You have 3 options for your Memory Allocator install.
#1: Don't install Memory Allocator. (Default)
#2: Install Jemalloc
#3: Install TCMalloc
ARG MemorySelect="2"
#Administrator Email Address
ARG AdminEmail="wsc@wsczx.com"
#Apache版本
#You have 2 options for your Apache install.
#1: Install Apache 2.2.34
#2: Install Apache 2.4.39 (Default)
ARG ApacheSelect="2"
#安装依赖
RUN yum install -y wget && yum install -y expect && yum install -y vim && yum clean all
#添加shell脚本
COPY ./run-lnmpa /usr/bin/
#安装LNMPA & Redis & Opcache & 创建启动脚本软连 & 清理安装文件
RUN mkdir -m 777 -p /data \       
        && cd /data \
        && wget http://soft.vpser.net/lnmp/lnmp${LNMPA_VERSION}-full.tar.gz -cO lnmp${LNMPA_VERSION}-full.tar.gz && tar zxf lnmp${LNMPA_VERSION}-full.tar.gz && cd lnmp${LNMPA_VERSION}-full \
        && DBSelect="${DBSelect}" \
        DB_Root_Password="${DB_ROOT_PASSWORD}" \
        InstallInnodb="${InnoDBSelect}" \
        PHPSelect="${PHPSelect}" \
        SelectMalloc="${MemorySelect}" \
        ApacheSelect="${ApacheSelect}" \
        ServerAdmin="${AdminEmail}" \
        ./install.sh lnmpa \
        && cd /data/lnmp${LNMPA_VERSION}-full && yes|./addons.sh install redis && yes|./addons.sh install opcache \
        && chmod a+x /usr/bin/run-lnmpa \
        && rm -rf /data/*
#镜像信息
LABEL org.label-schema.schema-version="1.0.1" \
    org.label-schema.name="Docker LNMPA" \
    org.label-schema.vendor="孤鸿wsczx.com" \
    org.label-schema.license="Apache Licence 2.0" \
    org.label-schema.build-date="201912.11"
#开放端口
EXPOSE 3306 443 80
# 启动命令
CMD ["run-lnmpa"]启动脚本

#!/bin/bash
##配置文件初始化
echo "数据和配置文件初始化开始"
#初始化Nginx
if [ -d "/data/nginx/" ];then
        echo "nginx 目录不为空,自动使用当前目录数据和配置文件"
        rm -rf /usr/local/nginx
        ln -sfv /data/nginx /usr/local/nginx
else
        mkdir -m 775 -p /data/nginx
        cp -a -p /usr/local/nginx/* /data/nginx
        rm -rf /usr/local/nginx
        ln -sfv /data/nginx /usr/local/nginx
        echo "Nginx 配置文件初始化完成"
fi
#初始化Apache
if [ -d "/data/apache/" ];then
        echo "nginx 目录不为空,自动使用当前目录数据和配置文件"
        rm -rf /usr/local/apache
        ln -sfv /data/apache /usr/local/apache
else
        mkdir -m 775 -p /data/apache
        cp -a -p /usr/local/apache/* /data/apache
        rm -rf /usr/local/apache
        ln -sfv /data/apache /usr/local/apache
        echo "Apache 配置文件初始化完成"
fi
#初始化Mariadb
if [ -d "/data/mariadb/" ];then
        echo "Apache 目录不为空,自动使用当前目录数据和配置文件"
        rm -rf /usr/local/apache
        ln -sfv /data/mariadb /usr/local/mariadb
else
        mkdir -m 775 -p /data/mariadb
        cp -a -p /usr/local/mariadb/* /data/mariadb
        rm -rf /usr/local/mariadb
        ln -sfv /data/mariadb /usr/local/mariadb
        echo "Mriadb 配置文件初始化完成"
fi
#初始化PHP
if [ -d "/data/php/" ];then
        echo "php 目录不为空,自动使用当前目录数据和配置文件"
        rm -rf /usr/local/apache
        ln -sfv /data/apache /usr/local/apache
els
        mkdir -m 775 -p /data/php
        cp -a -p /usr/local/php/* /data/php
        rm -rf /usr/local/php
        ln -sfv /data/php /usr/local/php
        echo "PHP 配置文件初始化完成"
fi
#初始化Redis
if [ -d "/data/redis/" ];then
        echo "redis 目录不为空,自动使用当前目录数据和配置文件"
        rm -rf /usr/local/redis
        ln -sfv /data/redis /usr/local/redis
else
        mkdir -m 775 -p /data/redis
        cp -a -p /usr/local/redis/* /data/redis
        rm -rf /usr/local/redis
        ln -sfv /data/redis /usr/local/redis
        echo "Redis 配置文件初始化完成"
fi
if [ -d "/data/wwwroot/" ];then
        echo "wwwroot 目录不为空,自动使用当前目录数据和配置文件"
        rm -rf /home/wwwroot
        ln -sfv /data/wwwroot /home/wwwroot
else
        mkdir -m 775 -p /data/wwwroot
        chown -R www:www /data/wwwroot
        cp -a -p /home/wwwroot/* /data/wwwroot
        rm -rf /home/wwwroot
        ln -sfv /data/wwwroot /home/wwwroot
        echo "wwwroot 网站根目录配置文件初始化完成"
fi
ln -sfv /usr/bin/run-lnmpa /data/run-lnmpa
lnmp restart >> /data/lnmp.log
/bin/bash
echo "已完成初始化,所有配置文件和数据均使用挂载卷中相关目录,请注意备份!!!"







补充内容 (2019-12-17 16:13):
该镜像需要在启动的时候挂载一个数据目录到容器的/data目录

jakeli1992 发表于 2019-12-31 16:20:39

你好我参照你的dockerfile和脚本,做了一个lnmp镜像,可能对你有帮助:
参考链接: http://www.zhangqiongjie.com/2343.html
我只做的docker镜像大小是1.85G
页: [1]
查看完整版本: 基于centos 7 的lnmpa Dockerfile和启动脚本,求大神指点