• docker创建lnmp镜像


      docker是一个轻量级的虚拟化技术,而lnmp是一个强大、开源的web运行环境,这里我们就演示用Docker来构建一个lnmp镜像。

      PS:为了保持轻量化和可伸缩,Docker鼓励我们 “one process per container”,也就是不要在一个镜像中集成太多的功能,我们这里主要是为了学习研究,所以违背了这个准则,更好的方案是Nginx、Mysql、PHP各自创建镜像,在单独的容器里运行,然后通过容器间的互联实现通信。

    1、拉取官方的 centos:6.9 作为基础镜像,安装好基础环境

    [root@localhost ~]# docker pull centos:6.9
    6.9: Pulling from centos
    055b9989266a: Pull complete 
    f1070d829305: Pull complete 
    e071bce628ba: Pull complete 
    Digest: sha256:e7bdc458659b6e644ae85694f2baaf3727c06ad82186fca80f4e3a8e88907cc3
    Status: Downloaded newer image for centos:6.9
    [root@localhost ~]# 
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    httpd               2.4.29              91199e851c7a        4 weeks ago         177.3 MB
    centos              6.9                 e071bce628ba        4 weeks ago         194.7 MB
    ubuntu              14.04               b44ce450cb60        11 weeks ago        188 MB
    [root@localhost ~]# 
    [root@localhost ~]# docker run -it centos:6.9 /bin/bash
    [root@df040eea8088 /]# ls          
    bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  sbin  selinux  srv  sys  tmp  usr  var
    [root@localhost ~]#
    [root@df040eea8088 /]# yum install -y epel-release
    .......

    2、安装PHP

    [root@df040eea8088 /]# yum install -y php php-fpm php-mysql
    .........
    .........
    [root@df040eea8088 /]# php -v
    PHP 5.3.3 (cli) (built: Mar 22 2017 12:27:09) 
    Copyright (c) 1997-2010 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    [root@df040eea8088 /]# php-fpm -v
    PHP 5.3.3 (fpm-fcgi) (built: Mar 22 2017 12:28:05)
    Copyright (c) 1997-2012 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    [root@df040eea8088 /]# 
    [root@df040eea8088 /]# php -m
    [PHP Modules]
    bz2
    calendar
    Core
    ctype
    curl
    date
    ereg
    exif
    fileinfo
    filter
    ftp
    gettext
    gmp
    hash
    iconv
    json
    libxml
    mysql
    mysqli
    openssl
    pcntl
    pcre
    PDO
    pdo_mysql
    pdo_sqlite
    Phar
    readline
    Reflection
    session
    shmop
    SimpleXML
    sockets
    SPL
    sqlite3
    standard
    tokenizer
    xml
    zip
    zlib
     
    [Zend Modules]

    3、安装Nginx并配置PHP fastcgi

    [root@df040eea8088 /]# yum install -y nginx
    .......

    配置Nginx以支持PHP,修改 /etc/nginx/conf.d/default.conf 如下:

    #
    # The default server
    #
     
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /www;   #change document_root to /www
     
        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;
     
        location / {
        }
     
        #support php access
        location ~ .*.php$ {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
     
        error_page 404 /404.html;
            location = /40x.html {
        }
     
        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
     
    }

    创建 /www 目录,并且修改用户和用户组为 apache (php-fpm默认运行用户和组为apache)

    [root@df040eea8088 /]# mkdir /www
    [root@df040eea8088 /]# chown apache:apache /www 
     
    [root@df040eea8088 /]# ll / | grep www
    drwxr-xr-x.   2 apache apache  4096 Dec  4 08:21 www

    4、安装mysql

    [root@df040eea8088 /]# yum install -y mysql mysql-server
    ......
    ......
     
    [root@df040eea8088 /]# /etc/init.d/mysqld start
    Starting mysqld:                                           [  OK  ]
     
    [root@df040eea8088 /]# /usr/bin/mysqladmin -u root password '123456'
     
    [root@df040eea8088 /]# /etc/init.d/mysqld stop
    Stopping mysqld:                                           [  OK  ]

    5、编写启动命令

    [root@df040eea8088 /]# touch /bin/startup.sh
    [root@df040eea8088 /]# chmod +x /bin/startup.sh

    然后向startup.sh写入如下内容:

    #!/bin/sh
     
    /etc/init.d/mysqld start
    /etc/init.d/php-fpm start
    /etc/init.d/nginx start
     
     
    #dead loop
    while ((1))
    do
            sleep 1h
    done

    6、清理不再需要的数据以缩减镜像的尺寸,然后docker commit生成新镜像

    [root@df040eea8088 /]# yum remove -y epel-release
    [root@df040eea8088 /]# yum clean all
    Loaded plugins: fastestmirror, ovl
    Cleaning repos: base extras updates
    Cleaning up Everything
    Cleaning up list of fastest mirrors
     
    [root@df040eea8088 /]# exit
    exit
     
    [root@localhost ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
    df040eea8088        centos:6.9          "/bin/bash"         2 hours ago         Exited (0) 31 seconds ago                       sleepy_yalow        
    [root@localhost ~]# docker commit df0 centos:lnmp
    efa371fe9b0ede828fe1999e7831491d1dd24cda26f1a27092a9565f4c781e06
     
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    centos              lnmp                efa371fe9b0e        57 seconds ago      453.4 MB
    httpd               2.4.29              91199e851c7a        4 weeks ago         177.3 MB
    centos              6.9                 e071bce628ba        4 weeks ago         194.7 MB
    ubuntu              14.04               b44ce450cb60        11 weeks ago        188 MB

    7、测试镜像,启动容器

    [root@localhost ~]# docker run -d -p 8848:80 -v /www:/www centos:lnmp /bin/startup.sh
    [root@localhost www]# cd /www
    [root@localhost www]# echo "<?php echo time() . PHP_EOL;" > index.php
    [root@localhost www]# cat index.php 
    <?php echo time() . PHP_EOL;
    [root@localhost www]# curl '127.0.0.1:8848/index.php'
    1512380042

    再测试mysql是否正常

    [root@localhost www]# touch /www/db.php

    代码内容:

    <?php
     
    $db = new mysqli('127.0.0.1', 'root', '123456', 'mysql');
     
    if ($db->connect_errno)
    {
        die("连接数据库失败". $db->connect_error);
    }
     
    echo "连接成功";
     
    $db->close();

    访问 127.0.0.1:8848/db.php

    [root@localhost www]# curl '127.0.0.1:8848/db.php'
    连接成功[root@localhost www]#
  • 相关阅读:
    .NET[C#]使用LINQ从List<T>集合中获取最后N条数据记录的方法有哪些?
    这个匿名对象没有实现IComparable接口
    c/c++中define用法详解及代码示例
    几个常用Json组件的性能测试
    通过jQuery Ajax使用FormData对象上传文件
    《631962 揭秘Java虚拟机-JVM设计原理与实现.pdf【第8章】》 ——类方法解析
    《631962 揭秘Java虚拟机-JVM设计原理与实现.pdf【第7章】》 ——Java栈桢
    《OOP-Klass》
    《631962 揭秘Java虚拟机-JVM设计原理与实现.pdf【第6章】》——类变量解析
    《631962 揭秘Java虚拟机-JVM设计原理与实现.pdf【第5章】》——常量池解析
  • 原文地址:https://www.cnblogs.com/is-possible/p/12373378.html
Copyright © 2020-2023  润新知