Docker 实践搭建php环境

docker 安装

  • 使用官方提供的安装脚本,安装最新版的Docker
    curl -sSL https://get.docker.com/ | sh
    
  • 安装完成后,通过如下命令启动Docker的守护进程,并让它随系统启动自动加载
    sudo service docker start
    sudo chkconfig docker on
    ## 或者
    sudo systemctl start docker
    sudo systemctl enable docker
    
  • 添加用户(jerry)到Docker组
    sudo usermod -aG docker jerry
    

命令笔记(centos),基于docker镜像2233466866/lnmp

下载镜像

docker pull 2233466866/lnmp

创建基本目录

mkdir -p /app/lnmp/default /docker/lnmp/data/mysql /docker/lnmp/conf/vhost /docker/lnmp/logs /docker/lnmp/temp /docker/lnmp/backup

下载容器配置文件到本地相应目录

docker run -itd -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged=true --name=lnmp 2233466866/lnmp
docker exec -it lnmp /bin/bash
docker cp lnmp:/etc/my.cnf /docker/lnmp/conf/my.cnf
docker cp lnmp:/usr/local/nginx/conf/nginx.conf /docker/lnmp/conf/nginx.conf
cp /docker/lnmp/conf/my.cnf /docker/lnmp/backup/my.cnf
cp /docker/lnmp/conf/nginx.conf /docker/lnmp/backup/nginx.conf

查看或修改基本配置(代码目录,日志保存目录及vhost目录配置添加)

my.cnf

[mysqld]
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

nginx.conf

user                    www;
worker_processes        auto;
worker_cpu_affinity     auto;


worker_cpu_affinity     auto;
pid                     logs/nginx.pid;

events {
    worker_connections  102400;
}

http {
    charset             utf-8;
    server_tokens       off;

    log_format  main    '$remote_addr - $remote_user [$time_iso8601] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';

    include             mime.types;
    default_type        application/octet-stream;

    client_max_body_size 20M;

    sendfile            on;
    keepalive_timeout   20;

    gzip                on;
    gzip_vary           on;
    gzip_comp_level     1;
    gzip_types          text/css application/javascript application/json image/png image/webp image/apng image/jpeg image/x-icon;

    autoindex_localtime on

    error_log           /logs/z_error.log;
    access_log          /logs/z_$host.log main;

    server {
        listen      80 default;
        root        /www/default;
        return 500;
    }
    include vhost/*.conf;
}

停止并删除测试容器

docker stop lnmp
docker rm lnmp

重新创建容器

docker run -dit 
-p 80:80 
-p 443:443 
-p 3306:3306 
-p 9000:9000 
-e TC="Asia/Shanghai" 
-v /sys/fs/cgroup:/sys/fs/cgroup:ro 
-v /app/lnmp:/www 
-v /docker/lnmp/data/mysql:/data/mysql 
-v /docker/lnmp/conf/my.cnf:/etc/my.cnf 
-v /docker/lnmp/conf/nginx.conf:/usr/local/nginx/conf/nginx.conf 
-v /docker/lnmp/conf/vhost:/usr/local/nginx/conf/vhost 
-v /docker/lnmp/logs:/logs 
--privileged=true 
--name=lnmp 
2233466866/lnmp

mysql 数据库配置(/etc/my.cnf)

/bin/mysql_secure_installation
cat /var/log/mysqld.log|grep 'A temporary password'
SET PASSWORD = PASSWORD('123456');

php.ini 配置(/usr/local/php7/lib/php.ini)

mysqli.default_socket = /var/lib/mysql/mysql.sock

linux 相关设置修改

添加不能登陆的用户www

groupadd www
useradd -M -g www -s /usr/sbin/nologin www

修改时区(/etc/profile)

TZ='Asia/Shanghai'; export TZ
cp /usr/share/zoneinfo/Asia/Shanghai    /etc/localtime

多站点配置

www.test.test.conf

server {
    listen      80;
    server_name test.test;

    rewrite ^(.*)$ $scheme://www.test.test$1 permanent;
}
server {
    listen      80;
    server_name www.test.test;

    if ($time_iso8601 ~ "^(d{4}-d{2}-d{2})") {
        set $ttt $1;
    }
    access_log          /logs/$host-$ttt-access.log main;

    root        /www/test;

    location / {
        index   index.php index.html index.htm;
    }

    location ~* .php {
        include                 fastcgi_params;
        fastcgi_index           index.php;
        fastcgi_pass            127.0.0.1:9000;
        fastcgi_split_path_info ^(.+.php)(.*)$;
        fastcgi_param           PATH_INFO       $fastcgi_path_info;
        fastcgi_param           SCRIPT_NAME     $fastcgi_script_name;
        fastcgi_param           SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

}

参考链接

原文地址:https://www.cnblogs.com/jjxhp/p/12934295.html