lnmp环境dockerfile构建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ijijni/article/details/82255094

经过多天的反复测试,构建,终于得出以下dockerfile文件,包括docker官方centos7.5,php7.2,nginx,redis,mongodb,swoole,mysql5.7等环境。文件内容如下:

#                       .::::.
#                     .::::::::.
#                    :::::::::::
#                 ..:::::::::::'
#              '::::::::::::'
#                .::::::::::
#           '::::::::::::::..
#                ..::::::::::::.
#              ``::::::::::::::::
#               ::::``:::::::::'        .:::.
#              ::::'   ':::::'       .::::::::.
#            .::::'      ::::     .:::::::'::::.
#           .:::'       :::::  .:::::::::' ':::::.
#          .::'        :::::.:::::::::'      ':::::.
#         .::'         ::::::::::::::'         ``::::.
#     ...:::           ::::::::::::'              ``::.
#    ```` ':.          ':::::::::'                  ::::..
#                       '.:::::'                    ':'````..
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#                  美女镇楼       永无BUG

#################################################
# Dockerfile to build lnmp_swoole container
# php7.2 nginx swoole mongodb redis mysql5.7
# base on centos 7.5
#################################################
# set the base image to centos
FROM centos:7.5.1804

# Version
ENV SWOOLE_VERSION 4.0.3

# file Author/Maintainer
MAINTAINER ijijni [email protected]

# mkdir /data/software /usr/local/webserver
RUN mkdir -p /data/software && mkdir -p /usr/local/webserver
WORKDIR /data/software
# install extension and install php7.2
RUN rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 && \
yum makecache && \
yum -y install gcc gcc-c++ \
autoconf wget \
psmisc \
openssl openssl-devel \
gperftools-devel \
tar \
passwd \
openssh-server \
openssh-clients \
initscripts \
bison bison-dev \
libxslt libxslt-devel \
readline readline-devel \
libmcrypt libmcrypt-devel \
libcurl libcurl-devel \
unzip pcre pcre-devel zlib zlib-devel git \
libxml2 libxml2-devel curl curl-devel \
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel \
python-setuptools dos2unix gperf \
libevent libevent-devel bzip2 bzip2-devel ncurses-devel \
boost libtool boost-devel* libuuid-devel python-sphinx.noarch && \
yum clean all && \
rm -rf /var/cache/yum

# install re2c
RUN wget https://sourceforge.net/projects/re2c/files/0.16/re2c-0.16.tar.gz && \
tar zxf re2c-0.16.tar.gz && cd re2c-0.16 && \
./configure && \
make && make install && \
cd .. && rm -rf  /data/software/re2c-0.16 /data/software/re2c-0.16.tar.gz
# linux user account set
RUN echo 'root:123465' | chpasswd
RUN /usr/sbin/sshd-keygen
RUN /usr/sbin/groupadd www &&/usr/sbin/useradd -r -m -s /bin/bash -g www www && \
 echo "www  ALL=(ALL) ALL" >> /etc/sudoers && echo 'root:123465' | chpasswd

# build PHP7.2
RUN wget http://am1.php.net/distributions/php-7.2.9.tar.gz && \
tar zxvf php-7.2.9.tar.gz && rm -f php-7.2.9.tar.gz && \
cd php-7.2.9 && \
./configure \
--prefix=/usr/local/webserver/php \
--with-config-file-path=/usr/local/webserver/php/etc \
--enable-fpm \
--with-fpm-user=www  \
--with-fpm-group=www \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared  \
--enable-soap \
--with-libxml-dir \
--with-xmlrpc \
--with-openssl \
--with-mhash \
--with-pcre-regex \
--with-sqlite3 \
--with-zlib \
--enable-bcmath \
--with-iconv \
--with-bz2 \
--enable-calendar \
--with-curl \
--with-cdb \
--enable-dom \
--enable-exif \
--enable-fileinfo \
--enable-filter \
--with-pcre-dir \
--enable-ftp \
--with-gd \
--with-openssl-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir  \
--with-freetype-dir \
--enable-gd-jis-conv \
--with-gettext \
--with-mhash \
--enable-json \
--enable-mbstring \
--enable-mbregex \
--enable-mbregex-backtrack \
--with-libmbfl \
--with-onig \
--enable-pdo \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-zlib-dir \
--with-pdo-sqlite \
--with-readline \
--enable-session \
--enable-shmop \
--enable-simplexml \
--enable-sockets  \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-libxml-dir \
--with-xsl \
--enable-zip \
--enable-mysqlnd-compression-support \
--with-pear \
--enable-opcache && \
make clean &&make && make install && \
cp ./php.ini-development /usr/local/webserver/php/etc/php.ini && \
# build systemd and deletes a number of unit files which might cause issues
(cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*; \
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*; \
rm -f /lib/systemd/system/anaconda.target.wants/*; \
# config
cd /data/software && rm -rf php-7.2.9 && \
cp -p /etc/profile /data/software/profile && \
sed -i '/^export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL$/i\PATH=/usr/local/webserver/php/bin:\$PATH\n' /data/software/profile && \
mv /usr/local/webserver/php/etc/php-fpm.conf.default /usr/local/webserver/php/etc/php-fpm.conf && \
mv /usr/local/webserver/php/etc/php-fpm.d/www.conf.default /usr/local/webserver/php/etc/php-fpm.d/www.conf && \
sed -i 's!127.0.0.1:9000!/var/run/php-fpm.sock!g' /usr/local/webserver/php/etc/php-fpm.d/www.conf && \
ln -s /usr/local/webserver/php/bin/php /usr/local/bin/php && \
#build systemd php-fpm
echo -e " [Unit] \n \
Description=php-fpm \n \
After=network.target \n \
 [Service] \n \
 Type=forking \n \
ExecStart=/usr/local/webserver/php/sbin/php-fpm \n \
ExecStop=/bin/pkill -9 php-fpm \n \
PrivateTmp=true \n \
[Install] \n \
WantedBy=multi-user.target" > /usr/lib/systemd/system/php-fpm.service && \
systemctl enable php-fpm.service

#build php redis mongodb extension
RUN /usr/local/webserver/php/bin/pecl install redis && \
sed -i '$a extension=redis.so\n' /usr/local/webserver/php/etc/php.ini
#安装 PHP的mongodb扩展
RUN /usr/local/webserver/php/bin/pecl install mongodb && \
sed -i '$a extension=mongodb.so\n' /usr/local/webserver/php/etc/php.ini
#build swoole
RUN wget https://github.com/nghttp2/nghttp2/releases/download/v1.32.1/nghttp2-1.32.1.tar.gz && \
tar zxvf nghttp2-1.32.1.tar.gz && cd nghttp2-1.32.1 && ./configure && make clean && make && make install && \
cd .. && rm -rf nghttp2-1.32.1.tar.gz && rm -rf nghttp2-1.32.1 && \
wget https://codeload.github.com/redis/hiredis/tar.gz/v0.13.3 && \
tar zxvf v0.13.3 && cd hiredis-0.13.3 && make clean && make && make install && \
mkdir /usr/lib/hiredis && \
# 将动态连接库libhiredis.so至/usr/lib/hiredis
cp libhiredis.so /usr/lib/hiredis  && \
mkdir /usr/include/hiredis && \
cp hiredis.h /usr/include/hiredis && \
echo '/usr/local/lib' >>/etc/ld.so.conf && \
ldconfig && \
cd .. && rm -rf v0.13.3 && rm -rf /data/software/hiredis-0.13.3 && \
wget http://pecl.php.net/get/swoole-${SWOOLE_VERSION}.tgz && \
tar zxvf swoole-${SWOOLE_VERSION}.tgz && rm -f swoole-${SWOOLE_VERSION}.tgz && \
cd swoole-${SWOOLE_VERSION} && \
/usr/local/webserver/php/bin/phpize && \
./configure \
--with-php-config=/usr/local/webserver/php/bin/php-config \
--enable-openssl  \
--enable-http2  \
--enable-async-redis \
--enable-sockets \
--enable-mysqlnd && \
make clean && make && make install && \
sed -i '$a extension=swoole.so\n' /usr/local/webserver/php/etc/php.ini && cd .. &&rm -rf swoole-${SWOOLE_VERSION}

RUN curl -sS https://getcomposer.org/installer | /usr/local/webserver/php/bin/php \
    && mv composer.phar /usr/local/bin/composer \
    && composer self-update --clean-backups

#build nginx
RUN rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm && \
yum install -y nginx && systemctl enable nginx.service

#build mysql
RUN rpm -Uvh https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm && \
yum-config-manager --disable mysql80-community && yum-config-manager --enable mysql57-community && \
yum install -y mysql-community-server  && systemctl enable mysqld.service
# the password: 
#grep 'temporary password' /var/log/mysqld.log
#mysql -uroot -p
#ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

# build redis
RUN wget http://download.redis.io/releases/redis-4.0.11.tar.gz && \
tar xzf redis-4.0.11.tar.gz && mv redis-4.0.11 /usr/local/webserver/redis && cd /usr/local/webserver/redis && \
make && rm -rf /data/software/redis-4.0.11.tar.gz && \
sed -i '/^export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL$/i\PATH=/usr/local/webserver/redis/src:\$PATH\n' /data/software/profile && \
sed -i '/^daemonize no$/c\daemonize yes' /usr/local/webserver/redis/redis.conf && \
echo -e "[Unit] \n \
Description=Redis \n \
After=network.target\n \
[Service]\n \
Type=forking\n \
ExecStart=/usr/local/webserver/redis/src/redis-server /usr/local/webserver/redis/redis.conf\n \
ExecReload=/usr/local/webserver/redis/src/redis-server -s reload\n \
ExecStop=/usr/local/webserver/redis/src/redis-server -s stop\n \
PrivateTmp=true\n \
[Install]\n \
WantedBy=multi-user.target " > /usr/lib/systemd/system/redis.service && \
systemctl enable redis.service
 
#build mongodb
RUN wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.7.tgz && \
tar zxvf mongodb-linux-x86_64-rhel70-3.6.7.tgz && mv mongodb-linux-x86_64-rhel70-3.6.7 /usr/local/webserver/mongodb && \
sed -i '/^export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL$/i\PATH=/usr/local/webserver/mongodb/bin:\$PATH\n' /data/software/profile && \
cp -pf /data/software/profile /etc/profile && source /etc/profile && mkdir -p /usr/local/webserver/mongodb/data/db && mkdir /usr/local/webserver/mongodb/logs && \
touch /usr/local/webserver/mongodb/logs/mongodb.logs && \
echo -e " dbpath = /usr/local/webserver/mongodb/data/db #数据文件存放目录  \n \
logpath = /usr/local/webserver/mongodb/logs/mongodb.logs #日志文件存放目录  \n \
port = 27017  #端口  \n \
fork = true  #以守护程序的方式启用,即在后台运行  \n " > /usr/local/webserver/mongodb/bin/mongodb.conf && \
rm -rf /data/software/mongodb-linux-x86_64-rhel70-3.6.7.tgz && \
#build systemd mongodb
echo -e " [Unit] \n \
Description=mongodb  \n \
After=network.target remote-fs.target nss-lookup.target  \n \
[Service]  \n \
Type=forking  \n \
ExecStart=/usr/local/webserver/mongodb/bin/mongod --config /usr/local/webserver/mongodb/bin/mongodb.conf  \n \
ExecReload=/bin/kill -s HUP $MAINPID  \n \
ExecStop=/usr/local/webserver/mongodb/bin/mongod --shutdown --config /usr/local/webserver/mongodb/bin/mongodb.conf  \n \
PrivateTmp=true  \n \
[Install]  \n \
WantedBy=multi-user.target" > /usr/lib/systemd/system/mongodb.service && \
systemctl enable mongodb.service && \
echo -e " #! /bin/bash \n \
source /etc/profile \n " > /run.sh && \
chmod +x /run.sh


# expose
EXPOSE 22 80
# cmd
CMD ["/usr/sbin/init"]

注意:1.由于用到了systemctl,实例化容器时请加上,--privileged=true。

2. 启动容器时,请在最后加上需要运行的脚本,/run.sh

3.数据库为5.7版本,第一次启动数据库后需要获取初始化密码,运行

grep 'temporary password' /var/log/mysqld.log

即可获取初始化密码,登陆mysql,修改密码即可

猜你喜欢

转载自blog.csdn.net/ijijni/article/details/82255094