Docker创建LNMP - 挨踢 Blog

最新文章:

首页 运维技术

Docker创建LNMP

发布时间:2017年10月27日 评论数:抢沙发 阅读数:582

    文章索引

    1、Docker基础介绍及安装

    2、Docker创建容器

    3、Docker创建镜像

    4、Docker创建仓库

    5、Docker创建Tomcat

    6、Docker创建LNMP


    1、创建Dockerfile目录

    [root@linux-node1 ~]# mkdir /opt/dockerfile/lnmp/{nginx,mysql,php7} -p

    2、编写mysql Dockerfile

    继承自官方的MySQL5.7镜像,相对独立解耦的模块,无其它额外处理

    [root@linux-node1 ~]# cd /opt/dockerfile/lnmp/mysql/
    [root@linux-node1 mysql]# cat Dockerfile 
    FROM mysql:5.7
    MAINTAINER zhangyang zhangyang1@afocus.om.cn
    
    ENV TZ "Asia/Shanghai"

    3、编写PHP7 Dockerfile

    继承自官方的centos7镜像,PHP源码按需编译安装,方便后续扩展管理或者配置。通过sed修改php.in监听所有9000端口(此处为关键!!因为提供Nignx容器访问支持PHP脚本,PHP容器对于Nginx容器不是localhost)

    [root@linux-node1 php]# cd /opt/dockerfile/lnmp/php7
    [root@linux-node1 php]# cat Dockerfile 
    FROM centos:centos7
    MAINTAINER zhangyang zhangyang1@afocus.com.cn
    
    ENV TZ "Asia/Shanghai"
    
    #Dir
    RUN mkdir -p /usr/local/nginx/html
    
    #Yum
    RUN yum -y update && \
        yum install -y gcc automake autoconf libtool make gcc-c++ vixie-cron  wget zlib  file openssl-devel && \
        yum install -y sharutils zip  bash vim cyrus-sasl-devel libmemcached libmemcached-devel libyaml libyaml-devel && \
        yum install -y unzip libvpx-devel openssl-devel ImageMagick-devel  autoconf  tar gcc libxml2-devel && \
        yum install -y gd-devel libmcrypt-devel libmcrypt mcrypt mhash libmcrypt libmcrypt-devel libxml2 libxml2-devel bzip2 bzip2-devel curl && \
        yum install -y curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel bison libtool-ltdl-devel net-tools && \
        yum clean all
    
    #Php
    #fix error: mcrypt.h not found
    RUN rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm && \
        yum install -y libmcrypt-devel 
    
    RUN cd /tmp && \
      wget http://cn2.php.net/distributions/php-7.0.12.tar.gz && \
      tar xzf php-7.0.12.tar.gz && \
      cd /tmp/php-7.0.12 && \
      ./configure \
        --prefix=/usr/local/php \
        --with-mysqli \
        --with-pdo-mysql \
        --with-iconv-dir \
        --with-freetype-dir \
        --with-jpeg-dir --with-png-dir \
        --with-zlib \
        --with-libxml-dir \
        --enable-simplexml \
        --enable-xml \
        --disable-rpath \
        --enable-bcmath \
        --enable-soap \
        --enable-zip \
        --with-curl \
        --enable-fpm \
        --with-fpm-user=nobody \
        --with-fpm-group=nobody \
        --enable-mbstring \
        --enable-sockets \
        --with-mcrypt \
        --with-gd \
        --enable-gd-native-ttf \
        --with-openssl \
        --with-mhash \
        --enable-opcache && \
        make && \
        make install
    
    #复制文件
    RUN cp /tmp/php-7.0.12/php.ini-production /usr/local/php/lib/php.ini && \
        cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
        cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
    
    
    EXPOSE 9000
    
    #配置php
    RUN sed -i -e 's/listen = 127.0.0.1:9000/listen = 9000/' /usr/local/php/etc/php-fpm.d/www.conf
    
    #启动php
    ENTRYPOINT ["/usr/local/php/sbin/php-fpm", "-F", "-c", "/usr/local/php/lib/php.ini"]

    4、编写nginx Dockerfile

    [root@linux-node1 php]# cd /opt/dockerfile/lnmp/nginx
    [root@linux-node1 nginx]# cat Dockerfile 
    FROM centos:centos7
    MAINTAINER zhangyang zhangyang1@afocus.com.cn
    
    ENV TZ "Asia/Shanghai"
    
    #Yum
    RUN yum -y update && \
        yum install -y gcc automake autoconf libtool make gcc-c++ vixie-cron  wget  && \
        yum install -y zlib  file openssl-devel sharutils zip  bash vim cyrus-sasl-devel  && \
        yum install -y libmemcached libmemcached-devel libyaml libyaml-devel unzip libvpx-devel  && \
        yum install -y openssl-devel ImageMagick-devel  autoconf  tar gcc libxml2-devel gd-devel libmcrypt-devel  && \
        yum install -y libmcrypt mcrypt mhash libmcrypt libmcrypt-devel libxml2 libxml2-devel bzip2  && \
        yum install -y bzip2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel bison libtool-ltdl-devel net-tools && \
        yum clean all
    
    #Nginx
    RUN cd /tmp && \
      wget http://nginx.org/download/nginx-1.11.5.tar.gz && \
      tar xzf nginx-1.11.5.tar.gz && \
      cd /tmp/nginx-1.11.5 && \
      ./configure \
        --prefix=/usr/local/nginx \
        --with-http_ssl_module --with-http_sub_module --with-http_dav_module --with-http_flv_module \
        --with-http_gzip_static_module --with-http_stub_status_module --with-debug && \
        make && \
        make install
    
    #配置nginx
    ENV HTTP_PHP_CONFIG \\\n\\\t#php\\\n\\\tlocation ~ \\\\.php$ {\\\n\\\t\\\troot    html;\\\n\\\t\\\tfastcgi_pass   php7:9000;\\\n\\\t\\\tfastcgi_index    index.php;\\\n\\\t\\\tfastcgi_param  SCRIPT_FILENAME    /usr/local/nginx/html\$fastcgi_script_name;\\\n\\\t\\\tinclude    fastcgi_params;\\\n\\\t}\\\n\\\n\\\t
    
    RUN sed -i -e "s@# deny access to .htaccess files, if Apache@${HTTP_PHP_CONFIG}# deny access to .htaccess files, if Apache@" /usr/local/nginx/conf/nginx.conf
    
    
    EXPOSE 80 443
    
    #启动nginx
    ENTRYPOINT ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]


    5、构建镜像

    docker build --tag youngcheng/mysql -f mysql/Dockerfile .
    docker build --tag youngcheng/php7 -f php7/Dockerfile .
    docker build --tag youngcheng/nginx -f nginx/Dockerfile .

    6、启动容器

    整个流程可以看到,Nginx、PHP、MySQL三者的关系:

    Nginx容器---->PHP容器,PHP容器---->MySQL容器。

    即容器之间是有关联的,两两容器的数据通信通过容器启动命令docker run加参数--link解决。

    docker run --name mysql -p 3306:3306 -v /root/bo/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -it youngcheung/mysql &
    docker run --name php7 -p 9000:9000 -v /var/www/html:/usr/local/nginx/html --link mysql:mysql -it youngcheung/php7 &
    docker run --name nginx -p 80:80 -v /var/www/html:/usr/local/nginx/html --link php7:php7 -it youngcheung/nginx

    7、测试PHP及数据库连通情况

    phpinfo

    vi /var/www/html/phpinfo.php
    <?php
    phpinfo();
    ?>

    Docker web应用之LNMP 云计算 第1张

    测试MySQL

    [root@linux-node1 ~]# cat /var/www/html/mysql.php 
    <?php
            $link_id=new PDO('mysql:host=mysql;port=3306;dbname=mysql;charset=utf8', 'root', '123456');
            if($link_id){
                    echo "mysql successful by YoungCheung !";
            }else{
                    echo mysql_error();
            }
    ?>

    Docker web应用之LNMP 云计算 第2张

    lnmp创建完成!

二维码加载中...
本文作者:Mr.linus      文章标题: Docker创建LNMP
本文地址:http://www.90qj.com/435  百度暂未收录本文
版权声明:若无注明,本文皆为“挨踢 Blog”原创,转载请保留文章出处。
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论