加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 经验 > 正文

docker部署nginx php mysql环境实践

发布时间:2017-02-16 03:42:00 所属栏目:经验 来源:朱茂海的网站
导读:下面我们学习使用docker来部署目前非常流行的博客系统wordpress的运行环境nginxphpmysql(作者wordpress博客www.centos.bz正是运行在docker容器中)。那么docker部署wordpress的运行环境与我们传统上直接在主机配置环境有什么区别?我们从开发和运维人员角度

    下面我们学习使用docker来部署目前非常流行的博客系统wordpress的运行环境nginx php mysql(作者wordpress博客www.centos.bz正是运行在docker容器中)。那么docker部署wordpress的运行环境与我们传统上直接在主机配置环境有什么区别?我们从开发和运维人员角度来说明。运维使用docker制作好wordpress容器,分发给开发人员,开发人员随即只需一个命令就可以部署好完全一样的运行环境,从此只需要关注代码本身,而不再需要把时间浪费在配置环境上。而同时,docker容器确保了开发环境与生产环境的一致性,极大减少由于开发环境与生产环境不一致出现的各种问题。而由于docker容器可以快速部署的特点,运维人员可以很轻松的对服务进行伸缩和扩展。

    准备工作

    到https://code.aliyun.com/创建一个项目,如Dockerfile。之后我们把wordpress环境的所有相关Dockerfile及配置文件放置到centosbz目录。

    阿里云docker镜像仓库地址为https://cr.console.aliyun.com,用来存放docker镜像,可以在本地push镜像上去,也可以从Kelude拉取Dockerfile自动构建镜像。我们先登录,然后新建一个namespace,如centos-bz,之后所有的nginx,php,mysql镜像将存放在这个namespace下。

    需要在运行docker容器的主机上安装docker-compose,可以参照官方文档手动安装,也可以使用ezhttp的一键安装工具(推荐)安装。如:
        之后会弹出一个菜单,输入2选择Some Useful Tools,然后输入18选择安装docker和compose。

            clone以上在阿里云Kelude创建的Dockerfile镜像到本地,在此项目中创建centos.bz,然后在centos.bz目录分别创建mysql,nginx,php目录,用于存放它们各自Dockerfile及配置文件。
这里我们还约定以下目录:
  •                     /home/docker/nginx/www/centos.bz: 存放www.centos.bz网站的文件
  •                     /home/docker/mysql:mysql data目录
  •                     在nginx目录创建Dockerfile文件,写入如下内容:
                            对于conf目录下的nginx配置文件,需要把日志,网站目录更改为以下约定的目录位置。

                                创建Dockerfile/centos.bz/php-fpm目录,在此目录下创建Dockerfile文件,内容如下: <div class="hl-surround" style="background-color:#F9FBFC;border:1px solid #C3CED9;margin:0px 0px 5px;font-family:Fixedsys, " color:#444444;font-size:15px;"="">
    1.                                     FROM debian:jessie
    2.                                     LABEL maintainer "admin@centos.bz"
    3.                                     # 定义软件版本,编译工具,依赖等变量
    4.                                     ENV PHP_VERSION 5.6.30
    5.                                     ENV BUILD_TOOLS m4
    6.                                     autoconf
    7.                                     autoconf2.13
    8.                                     openssl
    9.                                     wget
    10.                                     gcc
    11.                                     make
    12.                                     ENV BUILD_DEPS libcurl4-gnutls-dev
    13.                                     libxml2-dev
    14.                                     zlib1g-dev
    15.                                     libpcre3-dev
    16.                                     libjpeg-dev
    17.                                     libpng12-dev
    18.                                     libfreetype6-dev
    19.                                     libmhash-dev
    20.                                     libmcrypt-dev
    21.                                     libssl-dev
    22.                                     libtool
    23.                                     ENV PHP_LOCATION /usr/local/php
    24.                                     ENV BUILD_ARG   --prefix=${PHP_LOCATION}
    25.                                     --with-config-file-path=${PHP_LOCATION}/etc
    26.                                     --enable-fpm
    27.                                     --enable-bcmath
    28.                                     --with-pdo_sqlite
    29.                                     --with-gettext
    30.                                     --with-iconv
    31.                                     --enable-ftp
    32.                                     --with-sqlite3
    33.                                     --enable-mbstring
    34.                                     --enable-sockets
    35.                                     --enable-zip
    36.                                     --enable-soap
    37.                                     --with-openssl
    38.                                     --with-zlib
    39.                                     --with-curl
    40.                                     --with-gd
    41.                                     --with-jpeg-dir
    42.                                     --with-png-dir
    43.                                     --with-freetype-dir
    44.                                     --with-mcrypt
    45.                                     --with-mhash
    46.                                     --with-mysql=mysqlnd
    47.                                     --with-mysqli=mysqlnd
    48.                                     --with-pdo-mysql=mysqlnd
    49.                                     --without-pear
    50.                                     --with-libdir=lib64
    51.                                     --enable-opcache
    52.                                     --disable-cgi
    53.                                     ENV SRC_DIR /opt/php
    54.                                     WORKDIR ${SRC_DIR}
    55.                                     # 开始编译安装php
    56.                                     RUN apt-get update
    57.                                     && apt-get -y --no-install-recommends install ${BUILD_DEPS} ${BUILD_TOOLS}
    58.                                     && wget http://php.net/distributions/php-${PHP_VERSION}.tar.gz
    59.                                     && tar xf php-${PHP_VERSION}.tar.gz
    60.                                     && cd php-${PHP_VERSION}
    61.                                     && ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib/libssl.so
    62.                                     && ln -s /usr/lib /usr/lib64
    63.                                     && ./configure ${BUILD_ARG}
    64.                                     && make -j$(nproc)
    65.                                     && make install
    66.                                     && cp php.ini-production ${PHP_LOCATION}/etc/php.ini
    67.                                     && cp ${PHP_LOCATION}/etc/php-fpm.conf.default ${PHP_LOCATION}/etc/php-fpm.conf
    68.                                     && rm -rf ${SRC_DIR}
    69.                                     && apt-get purge -y --auto-remove ${BUILD_TOOLS}
    70.                                     && rm -rf /var/lib/apt/lists/*
    71.                                     WORKDIR ${PHP_LOCATION}/etc/
    72.                                     # 配置php-fpm,即使用sed工具编辑php-fpm.conf和php.ini文件,这里的php-fpm相关配置命令不与上面的编译命令合在一起来减小层数是因为
    73.                                     # 配置文件可能会改动比较多,这样分开当配置文件更改时可以直接使用缓存跳过编译步骤,加快构建速度。
    74.                                     RUN set_php_variable(){
    75.                                     local key=$1;
    76.                                     local value=$2;
    77.                                     if grep -q -E "^$keys*=" php.ini;then
    78.                                     sed -i -r "s#^$keys*=.*#$key=$value#" php.ini;
    79.                                     else
    80.                                     sed -i -r "s#;s*$keys*=.*#$key=$value#" php.ini;
    81.                                     fi;
    82.                                     if ! grep -q -E "^$keys*=" php.ini;then
    83.                                     echo "$key=$value" >> php.ini;
    84.                                     fi;
    85.                                     }
    86.                                     && BASE_DIR=/home/docker/php
    87.                                     && set_php_variable disable_functions "dl,eval,assert,exec,popen,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open"
    88.                                     && set_php_variable expose_php Off
    89.                                     && set_php_variable error_log ${BASE_DIR}/php_errors.log
    90.                                     && set_php_variable request_order  "CGP"
    91.                                     && set_php_variable cgi.fix_pathinfo 0
    92.                                     && set_php_variable short_open_tag on
    93.                                     && set_php_variable date.timezone Asia/Chongqing
    94.                                     && sed -i 's/^user =.*/user = www-data/' php-fpm.conf
    95.                                     && sed -i 's/^group =.*/group = www-data/' php-fpm.conf
    96.                                     && sed -i "s#;slowlog = log/$pool.log.slow#slowlog = ${BASE_DIR}/$pool.log.slow#" php-fpm.conf
    97.                                     && sed -i 's/;request_slowlog_timeout = 0/request_slowlog_timeout = 5/' php-fpm.conf
    98.                                     && sed -i 's/^pm.max_children.*/pm.max_children =20/' php-fpm.conf
    99.                                     && sed -i 's/^pm.start_servers.*/pm.start_servers =5/' php-fpm.conf
    100.                                     && sed -i 's/^pm.min_spare_servers.*/pm.min_spare_servers =3/' php-fpm.conf
    101.                                     && sed -i 's/^pm.max_spare_servers.*/pm.max_spare_servers =8/' php-fpm.conf
    102.                                     && sed -i '/[global]/adaemonize =no' php-fpm.conf
    103.                                     && sed -i 's/^listen.*/listen =0.0.0.0:9000/' php-fpm.conf
    104.                                     && echo "[opcache]n
    105.                                     zend_extension=opcache.son
    106.                                     opcache.memory_consumption=128n
    107.                                     opcache.interned_strings_buffer=8n
    108.                                     opcache.max_accelerated_files=4000n
    109.                                     opcache.revalidate_freq=60n
    110.                                     opcache.fast_shutdown=1 n" >> php.ini
    111.                                     ENTRYPOINT ["/usr/local/php/sbin/php-fpm"]
    112.                                     EXPOSE 9000

    (编辑:源码网)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读