美文网首页Docker容器#Centos 折腾之路#Docker
Docker安装PHP、NGNIX、MYSQL,并LINK

Docker安装PHP、NGNIX、MYSQL,并LINK

作者: kx叔 | 来源:发表于2018-10-20 01:00 被阅读40次

    centos环境下,先确认是否安装docker,如未安装,使用 yum install docker 或者yum -y install docker-io进行安装

    一、安装PHP


    查看镜像

    docker images
    

    在镜像列表里可以确认 镜像名版本,如果需要

    查看container

    docker ps
    

    可以用来查看当前已经运行的docker容器

    查找

    docker search php
    

    下载

    docker pull php:7.2-fpm
    

    * 注意:不要直接docker pull php,官方php镜像里没有安装fpm相关

    运行PHP镜像

    docker run --restart=always -p 9000:9000 --name php -v /data/www:/www -idt php:7.2-fpm
    

    注解:

    • run --restart=always : 保证docker重启的时候container会跟随自动运行
    • -p 9000:9000 : 宿主端口9000映射容器端口9000
    • --name php : 容器命名php
    • -v /data/www:/www : 目录映射,宿主目录/data/www映射到容器目录/www
    • -i : 以交互模式运行容器,通常与 -t 同时使用
    • -t : 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    • -d : 后台运行容器,并返回容器ID;

    进入PHP容器

    docker exec -it php /bin/bash
    

    容器内查看PHP信息

    php --ini
    

    得到类似如下信息:

    Configuration File (php.ini) Path: /usr/local/etc/php
    Loaded Configuration File:         /usr/local/etc/php/php.ini
    Scan for additional .ini files in: /usr/local/etc/php/conf.d
    Additional .ini files parsed:      /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini
    

    这样就能看到关键文件php.ini的位置
    也可以直接使用:

    php -i|grep php.ini
    

    得到类似如下信息:

    Configuration File (php.ini) Path => /usr/local/etc/php
    Loaded Configuration File => /usr/local/etc/php/php.ini
    

    常规配置文件结构如下:

    /usr/local/etc  
    |-- log
    |   `-- php-fpm
    |       `-- xdebug.log
    |-- pear.conf
    |-- php
    |   |-- conf.d
    |   |   |-- docker-php-ext-gd.ini
    |   |   |-- docker-php-ext-mysqli.ini
    |   |   |-- docker-php-ext-opcache.ini
    |   |   |-- docker-php-ext-pdo_mysql.ini
    |   |   |-- docker-php-ext-redis.ini
    |   |   |-- docker-php-ext-sodium.ini
    |   |   |-- docker-php-ext-xdebug.ini
    |   |   |-- docker-php-ext-yaf.ini
    |   |   `-- docker-php-ext-zip.ini
    |   `-- php.ini
    |-- php-fpm.conf
    |-- php-fpm.conf.default
    `-- php-fpm.d
        |-- docker.conf
        |-- www.conf
        |-- www.conf.default
        `-- zz-docker.conf
    

    二、安装MYSQL


    查找

    docker search mysql
    

    下载

    docker pull mysql
    

    * 注意:

    运行MYSQL镜像

    docker run --restart=always --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
    

    注解:

    • -e MYSQL_ROOT_PASSWORD : 配置信息,此处配置mysqlroot用户的登陆密码

    三、安装NGNIX


    查找

    docker search ngnix
    

    下载

    docker pull ngnix
    

    运行NGNIX镜像并Link

    docker run --restart=always --name lnmp -p 8080:80 \
    --link mysql:mysql --link php:php \
    -v /www:/www -v /etc/nginx:/etc/nginx:ro \
    --volumes-from php \
    -idt nginx
    

    注解:

    • --link mysql:mysql : --link <name or id>:alias原容器名或者ID映射到自定义别名
    • -v /www:/www : 将宿主的/www目录映射到容器的www目录
      注意:php的文件目录和nginx必须保持一致,避免一些意外情况
    • -v /etc/nginx:/etc/nginx:ro : 将宿主的/etc/nginx配置文件目录映射到容器的/etc/nginx配置文件目录,且ro : 只读
    • --volumes-from php : 将php容器挂载的卷也挂载到了nginx容器上

    Docker提供了多个容器直接访问的方法,最简单的方式是直接使用端口映射-p参数指定映射的端口或者-P映射所有端口,多个容器直接通过网络端口进行访问。
    但网络端口映射方式并不是Docker中连接多个容器的唯一方式,还可以使用Docker的连接系统(--link)连接多个容器,当容器连接到一起时,接受者容器就可以看到源容器的信息。

    default.conf配置信息:

    server {
        listen       80;
        server_name  localhost #域名或者IP;
    
        #charset koi8-r;
        #access_log  /var/log/nginx/host.access.log  main;
    
        location / {
            root   /www #容器文件目录;
            index  index.html index.htm index.php;
        }
    
        #error_page  404              /404.html;
    
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
    
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            fastcgi_pass   php:9000; #因为用了link,所以直接用link后的容器别名
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /www$fastcgi_script_name; # 容器文件目录
            include        fastcgi_params;
        }
    
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    
    

    到这里,就基本配置完成了。

    四、其它


    环境变量

    docker在连接容器的时候,会根据--link提供的参数自动的在接收者容器中创建一些环境变量,包括源容器的Dockerfile中使用ENV命令设置的环境变量和源容器启动时(docker run),使用-e或者--env--env-file参数指定的环境变量。

    我们使用以下方式:

    docker exec lnmp env
    

    得到类似如下信息:

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    HOSTNAME=313b081ac042
    MYSQL_PORT=tcp://172.17.0.4:3306
    MYSQL_PORT_3306_TCP=tcp://172.17.0.4:3306
    MYSQL_PORT_3306_TCP_ADDR=172.17.0.4
    MYSQL_PORT_3306_TCP_PORT=3306
    MYSQL_PORT_3306_TCP_PROTO=tcp
    MYSQL_NAME=/lnmp/mysql
    MYSQL_ENV_MYSQL_ROOT_PASSWORD=123456
    MYSQL_ENV_GOSU_VERSION=1.7
    MYSQL_ENV_MYSQL_MAJOR=8.0
    MYSQL_ENV_MYSQL_VERSION=8.0.11-1debian9
    PHP_PORT=tcp://172.17.0.3:9000
    PHP_PORT_9000_TCP=tcp://172.17.0.3:9000
    PHP_PORT_9000_TCP_ADDR=172.17.0.3
    PHP_PORT_9000_TCP_PORT=9000
    PHP_PORT_9000_TCP_PROTO=tcp
    PHP_NAME=/lnmp/php
    PHP_ENV_PHPIZE_DEPS=autoconf            dpkg-dev                file            g++             gcc             libc-dev                make            pkg-config              re2c
    PHP_ENV_PHP_INI_DIR=/usr/local/etc/php
    PHP_ENV_PHP_EXTRA_CONFIGURE_ARGS=--enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi
    PHP_ENV_PHP_CFLAGS=-fstack-protector-strong -fpic -fpie -O2
    PHP_ENV_PHP_CPPFLAGS=-fstack-protector-strong -fpic -fpie -O2
    PHP_ENV_PHP_LDFLAGS=-Wl,-O1 -Wl,--hash-style=both -pie
    PHP_ENV_GPG_KEYS=1729F83938DA44E27BA0F4D3DBDB397470D12172 B1B44D8F021E4E2D6021E995DC9FF8D3EE5AF27F
    PHP_ENV_PHP_VERSION=7.2.11
    PHP_ENV_PHP_URL=https://secure.php.net/get/php-7.2.11.tar.xz/from/this/mirror
    PHP_ENV_PHP_ASC_URL=https://secure.php.net/get/php-7.2.11.tar.xz.asc/from/this/mirror
    PHP_ENV_PHP_SHA256=da1a705c0bc46410e330fc6baa967666c8cd2985378fb9707c01a8e33b01d985
    PHP_ENV_PHP_MD5=
    NGINX_VERSION=1.13.12-1~stretch
    NJS_VERSION=1.13.12.0.2.0-1~stretch
    HOME=/root
    
    

    上述例子中,指定了容器的别名,因此所有环境变量都是以别名开头。

    注意的是,如果源容器重启,接收容器中的环境变量信息并不会自动更新,因此,如果要使用源容器的IP地址,请使用/etc/hosts中配置的主机信息。

    /etc/hosts文件

    除了环境变量之外,docker也在接收容器的/etc/hosts文件中更新了hosts信息。

    docker exec -it lnmp cat /etc/hosts
    

    可以看到类似如下信息:

    127.0.0.1       localhost
    ::1     localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    172.17.0.4      mysql da857bbf0bc2
    172.17.0.3      php f56712241b85
    172.17.0.5      313b081ac042
    

    从上可以看出,在接收容器的hosts文件中增加了额外的信息,本机IP和别名以及源容器的IP和别名。

    与环境变量不同的是,如果源容器重启了,接收容器中/etc/hosts中的信息会自动更新。


    参考:

    相关文章

      网友评论

        本文标题:Docker安装PHP、NGNIX、MYSQL,并LINK

        本文链接:https://www.haomeiwen.com/subject/mtjezftx.html