搭建基于ubuntu的基础环境:
参考: http://open.daocloud.io/ru-he-kai-fa-yi-ge-php-mysql-de-docker-hua-ying-yong/
https://github.com/nicescale/docker-training/tree/master/first
Dockerfile:
1 #在ubuntu:trusty 基础上 安装 服务器必须环境信息 ,为后续 安装 php nginx 做准备 2 3 FROM ubuntu:14.04 4 5 MAINTAINER lxd 6 7 # 设置时间环境变量 8 ENV TZ "Asia/Shanghai" 9 10 #使用 阿里云 ubuntu 源 11 RUN cp /etc/apt/sources.list /etc/apt/sources.list_back 12 ADD sources.list /etc/apt/sources.list 13 14 # 刷新 源 15 RUN apt-get update 16 17 #安装 软件 18 RUN apt-get install -y curl wget tar bzip2 unzip vim passwd sudo hostname net-tools rsync man && 19 apt-get install -y gcc git make automake cmake patch logrotate && 20 apt-get install -y supervisor openssh-server && 21 apt-get clean && 22 apt-get autoclean 23 24 #写入 supervisord 配置信息 25 ADD supervisord.conf /etc/supervisord.conf 26 27 #创建必须的文件夹 28 RUN mkdir -p /etc/supervisor.conf.d && 29 mkdir -p /var/log/supervisor 30 31 #暴露 22 端口,sshd 32 EXPOSE 22 33 34 #执行动作 35 ENTRYPOINT ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]
sources.list
1 deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse 2 deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse 3 deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse 4 deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse 5 deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse 6 deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse 7 deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse 8 deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse 9 deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse 10 deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
supervisord.conf
1 [unix_http_server] 2 file=/var/run/supervisor.sock ; (the path to the socket file) 3 chmod=0700 ; socket file mode (default 0700) 4 5 [supervisord] 6 logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log) 7 logfile_maxbytes=50MB 8 logfile_backup=10 9 loglevel=info 10 pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) 11 nodaemon=true ; (Start in foreground if true; default false) 12 minfds=1024 ; (min. avail startup file descriptors;default 1024) 13 minprocs=200 ; (min. avail process descriptors;default 200) 14 15 [rpcinterface:supervisor] 16 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface 17 18 [supervisorctl] 19 serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket 20 21 [include] 22 files = /etc/supervisor.conf.d/*.conf
在ubuntu基础环境上搭建 nginx + php
将上面的 docker build 命名为:lxd/ubuntu:base
Dockerfile
1 #在 ubuntu 基础环境上 ,搭建 php nginx 2 3 #这个是 自己安装的 基础环境 镜像, 在 ~/docker/r_back/ubuntu_base 里面的Dockerfile 安装的 4 FROM lxd/ubuntu:base 5 6 MAINTAINER lxd 7 8 # 文件存放目录 9 ENV APP_DIR /app 10 ENV TERM xterm 11 12 #升级 13 RUN apt-get update 14 15 #安装 nginx php5-fpm 等软件 php5-dev 是要安装的,装扩展就依赖它的phpize,php-config 16 RUN apt-get install -y 17 php5-fpm php5-dev php5-cli php5-mysql php5-gd php5-curl php-pear php-apc 18 nginx && 19 apt-get clean && 20 apt-get autoclean && 21 rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 22 23 #安装 composer 24 RUN curl -sS https://getcomposer.org/installer 25 | php -- --install-dir=/usr/local/bin --filename=composer 26 27 #更新nginx 配置文件信息 28 ADD nginx_nginx.conf /etc/nginx/nginx.conf 29 ADD nginx_default.conf /etc/nginx/conf.d/default.conf 30 31 #更新 php-fpm 配置 32 ADD php_www.conf /etc/php5/fpm/pool.d/www.conf 33 34 RUN sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php5/fpm/php.ini 35 36 #写入phpinfo.php 配置文件 37 RUN mkdir -p /app && echo "<?php phpinfo(); ?>" > ${APP_DIR}/phpinfo.php 38 #RUN chmod 0777 /app 39 40 #暴露端口 80 443 41 EXPOSE 80 443 42 43 #新增 supervisor 配置信息 44 ADD supervisor_nginx.conf /etc/supervisor.conf.d/nginx.conf 45 ADD supervisor_php5-fpm.conf /etc/supervisor.conf.d/php5-fpm.conf
nginx_default.conf
1 server { 2 listen 80 default_server; 3 server_name localhost; 4 5 #charset koi8-r; 6 7 location / { 8 root /app; 9 index index.php index.html index.htm; 10 } 11 12 # redirect server error pages to the static page /50x.html 13 # 14 error_page 500 502 503 504 /50x.html; 15 location = /50x.html { 16 root /app; 17 } 18 19 # Disable nginx log write favicon.ico 20 location = /favicon.ico { 21 log_not_found off; 22 access_log off; 23 } 24 25 # pass the PHP scripts to FastCGI server listening on port 9000 26 # 27 location ~ .php$ { 28 root /app; 29 fastcgi_pass 127.0.0.1:9000; 30 #fastcgi_pass unix:/tmp/php-fpm.sock; 31 fastcgi_index index.php; 32 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 33 include fastcgi_params; 34 } 35 }
nginx_nginx.conf
1 user www-data www-data; 2 worker_processes 1; 3 daemon off; 4 5 error_log /var/log/nginx/error.log warn; 6 pid /var/run/nginx.pid; 7 8 events { 9 worker_connections 1024; 10 } 11 12 http { 13 include /etc/nginx/mime.types; 14 default_type application/octet-stream; 15 16 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 17 '$status $body_bytes_sent "$http_referer" ' 18 '"$http_user_agent" "$http_x_forwarded_for"'; 19 20 access_log /var/log/nginx/access.log main; 21 22 sendfile on; 23 tcp_nopush on; 24 tcp_nodelay on; 25 keepalive_timeout 65; 26 types_hash_max_size 2048; 27 28 gzip on; 29 gzip_disable "msie6"; 30 gzip_vary on; 31 gzip_proxied any; 32 gzip_comp_level 6; 33 gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 34 35 autoindex on;# 显示目录 36 autoindex_exact_size on;# 显示文件大小 37 autoindex_localtime on;# 显示文件时间 38 39 include /etc/nginx/conf.d/*.conf; 40 }
php_www.conf ( 更新 command=/usr/sbin/php5-fpm --nodaemonize)
1 ; Start a new pool named 'www'. 2 [www] 3 4 ; The address on which to accept FastCGI requests. 5 ; Valid syntaxes are: 6 ; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on 7 ; a specific port; 8 ; 'port' - to listen on a TCP socket to all addresses on a 9 ; specific port; 10 ; '/path/to/unix/socket' - to listen on a unix socket. 11 ; Note: This value is mandatory. 12 listen = 127.0.0.1:9000 13 14 ; Set listen(2) backlog. A value of '-1' means unlimited. 15 ; Default Value: -1 16 ;listen.backlog = -1 17 18 ; List of ipv4 addresses of FastCGI clients which are allowed to connect. 19 ; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original 20 ; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address 21 ; must be separated by a comma. If this value is left blank, connections will be 22 ; accepted from any ip address. 23 ; Default Value: any 24 listen.allowed_clients = 127.0.0.1 25 26 ; Set permissions for unix socket, if one is used. In Linux, read/write 27 ; permissions must be set in order to allow connections from a web server. Many 28 ; BSD-derived systems allow connections regardless of permissions. 29 ; Default Values: user and group are set as the running user 30 ; mode is set to 0666 31 ;listen.owner = nobody 32 ;listen.group = nobody 33 ;listen.mode = 0666 34 35 ; Unix user/group of processes 36 ; Note: The user is mandatory. If the group is not set, the default user's group 37 ; will be used. 38 ; RPM: apache Choosed to be able to access some dir as httpd 39 user = www-data 40 ; RPM: Keep a group allowed to write in log dir. 41 group = www-data 42 43 ; Choose how the process manager will control the number of child processes. 44 ; Possible Values: 45 ; static - a fixed number (pm.max_children) of child processes; 46 ; dynamic - the number of child processes are set dynamically based on the 47 ; following directives: 48 ; pm.max_children - the maximum number of children that can 49 ; be alive at the same time. 50 ; pm.start_servers - the number of children created on startup. 51 ; pm.min_spare_servers - the minimum number of children in 'idle' 52 ; state (waiting to process). If the number 53 ; of 'idle' processes is less than this 54 ; number then some children will be created. 55 ; pm.max_spare_servers - the maximum number of children in 'idle' 56 ; state (waiting to process). If the number 57 ; of 'idle' processes is greater than this 58 ; number then some children will be killed. 59 ; Note: This value is mandatory. 60 pm = dynamic 61 62 ; The number of child processes to be created when pm is set to 'static' and the 63 ; maximum number of child processes to be created when pm is set to 'dynamic'. 64 ; This value sets the limit on the number of simultaneous requests that will be 65 ; served. Equivalent to the ApacheMaxClients directive with mpm_prefork. 66 ; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP 67 ; CGI. 68 ; Note: Used when pm is set to either 'static' or 'dynamic' 69 ; Note: This value is mandatory. 70 pm.max_children = 50 71 72 ; The number of child processes created on startup. 73 ; Note: Used only when pm is set to 'dynamic' 74 ; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2 75 pm.start_servers = 5 76 77 ; The desired minimum number of idle server processes. 78 ; Note: Used only when pm is set to 'dynamic' 79 ; Note: Mandatory when pm is set to 'dynamic' 80 pm.min_spare_servers = 5 81 82 ; The desired maximum number of idle server processes. 83 ; Note: Used only when pm is set to 'dynamic' 84 ; Note: Mandatory when pm is set to 'dynamic' 85 pm.max_spare_servers = 35 86 87 ; The number of requests each child process should execute before respawning. 88 ; This can be useful to work around memory leaks in 3rd party libraries. For 89 ; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS. 90 ; Default Value: 0 91 ;pm.max_requests = 500 92 93 ; The URI to view the FPM status page. If this value is not set, no URI will be 94 ; recognized as a status page. By default, the status page shows the following 95 ; information: 96 ; accepted conn - the number of request accepted by the pool; 97 ; pool - the name of the pool; 98 ; process manager - static or dynamic; 99 ; idle processes - the number of idle processes; 100 ; active processes - the number of active processes; 101 ; total processes - the number of idle + active processes. 102 ; The values of 'idle processes', 'active processes' and 'total processes' are 103 ; updated each second. The value of 'accepted conn' is updated in real time. 104 ; Example output: 105 ; accepted conn: 12073 106 ; pool: www 107 ; process manager: static 108 ; idle processes: 35 109 ; active processes: 65 110 ; total processes: 100 111 ; By default the status page output is formatted as text/plain. Passing either 112 ; 'html' or 'json' as a query string will return the corresponding output 113 ; syntax. Example: 114 ; http://www.foo.bar/status 115 ; http://www.foo.bar/status?json 116 ; http://www.foo.bar/status?html 117 ; Note: The value must start with a leading slash (/). The value can be 118 ; anything, but it may not be a good idea to use the .php extension or it 119 ; may conflict with a real PHP file. 120 ; Default Value: not set 121 ;pm.status_path = /status 122 123 ; The ping URI to call the monitoring page of FPM. If this value is not set, no 124 ; URI will be recognized as a ping page. This could be used to test from outside 125 ; that FPM is alive and responding, or to 126 ; - create a graph of FPM availability (rrd or such); 127 ; - remove a server from a group if it is not responding (load balancing); 128 ; - trigger alerts for the operating team (24/7). 129 ; Note: The value must start with a leading slash (/). The value can be 130 ; anything, but it may not be a good idea to use the .php extension or it 131 ; may conflict with a real PHP file. 132 ; Default Value: not set 133 ;ping.path = /ping 134 135 ; This directive may be used to customize the response of a ping request. The 136 ; response is formatted as text/plain with a 200 response code. 137 ; Default Value: pong 138 ;ping.response = pong 139 140 ; The timeout for serving a single request after which the worker process will 141 ; be killed. This option should be used when the 'max_execution_time' ini option 142 ; does not stop script execution for some reason. A value of '0' means 'off'. 143 ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) 144 ; Default Value: 0 145 ;request_terminate_timeout = 0 146 147 ; The timeout for serving a single request after which a PHP backtrace will be 148 ; dumped to the 'slowlog' file. A value of '0s' means 'off'. 149 ; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) 150 ; Default Value: 0 151 ;request_slowlog_timeout = 0 152 153 ; The log file for slow requests 154 ; Default Value: not set 155 ; Note: slowlog is mandatory if request_slowlog_timeout is set 156 slowlog = /var/log/php-fpm/www-slow.log 157 158 ; Set open file descriptor rlimit. 159 ; Default Value: system defined value 160 ;rlimit_files = 1024 161 162 ; Set max core size rlimit. 163 ; Possible Values: 'unlimited' or an integer greater or equal to 0 164 ; Default Value: system defined value 165 ;rlimit_core = 0 166 167 ; Chroot to this directory at the start. This value must be defined as an 168 ; absolute path. When this value is not set, chroot is not used. 169 ; Note: chrooting is a great security feature and should be used whenever 170 ; possible. However, all PHP paths will be relative to the chroot 171 ; (error_log, sessions.save_path, ...). 172 ; Default Value: not set 173 ;chroot = 174 175 ; Chdir to this directory at the start. This value must be an absolute path. 176 ; Default Value: current directory or / when chroot 177 ;chdir = /var/www 178 179 ; Redirect worker stdout and stderr into main error log. If not set, stdout and 180 ; stderr will be redirected to /dev/null according to FastCGI specs. 181 ; Default Value: no 182 ;catch_workers_output = yes 183 184 ; Limits the extensions of the main script FPM will allow to parse. This can 185 ; prevent configuration mistakes on the web server side. You should only limit 186 ; FPM to .php extensions to prevent malicious users to use other extensions to 187 ; exectute php code. 188 ; Note: set an empty value to allow all extensions. 189 ; Default Value: .php 190 ;security.limit_extensions = .php .php3 .php4 .php5 191 192 ; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from 193 ; the current environment. 194 ; Default Value: clean env 195 ;env[HOSTNAME] = $HOSTNAME 196 ;env[PATH] = /usr/local/bin:/usr/bin:/bin 197 ;env[TMP] = /tmp 198 ;env[TMPDIR] = /tmp 199 ;env[TEMP] = /tmp 200 201 ; Additional php.ini defines, specific to this pool of workers. These settings 202 ; overwrite the values previously defined in the php.ini. The directives are the 203 ; same as the PHP SAPI: 204 ; php_value/php_flag - you can set classic ini defines which can 205 ; be overwritten from PHP call 'ini_set'. 206 ; php_admin_value/php_admin_flag - these directives won't be overwritten by 207 ; PHP call 'ini_set' 208 ; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no. 209 210 ; Defining 'extension' will load the corresponding shared extension from 211 ; extension_dir. Defining 'disable_functions' or 'disable_classes' will not 212 ; overwrite previously defined php.ini values, but will append the new value 213 ; instead. 214 215 ; Default Value: nothing is defined by default except the values in php.ini and 216 ; specified at startup with the -d argument 217 ;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com 218 ;php_flag[display_errors] = off 219 php_admin_value[error_log] = /var/log/php-fpm/www-error.log 220 php_admin_flag[log_errors] = on 221 ;php_admin_value[memory_limit] = 128M 222 223 ; Set session path to a directory owned by process user 224 php_value[session.save_handler] = files 225 php_value[session.save_path] = /var/lib/php/session
supervisor_nginx.conf
1 [program:nginx] 2 directory=/ 3 command=/usr/sbin/nginx -c /etc/nginx/nginx.conf 4 user=root 5 autostart=true 6 autorestart=true 7 stdout_logfile=/var/log/supervisor/%(program_name)s.log 8 stderr_logfile=/var/log/supervisor/%(program_name)s.log
supervisor_php5-fpm.conf
1 [program:php-fpm] 2 directory=/ 3 command=/usr/sbin/php5-fpm 4 user=root 5 autostart=true 6 autorestart=true 7 stdout_logfile=/var/log/supervisor/%(program_name)s.log 8 stderr_logfile=/var/log/supervisor/%(program_name)s.log
在ubuntu基础环境上搭建 mysql
Dockerfile
1 #安装 mysql 服务器 2 FROM lxd/ubuntu:base 3 4 MAINTAINER lxd 5 6 #升级 7 RUN apt-get update 8 9 #安装 mysql 10 RUN apt-get install -y mysql-server-5.6 && 11 apt-get clean && 12 apt-get autoclean && 13 rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 14 15 #更新my.cnf 16 RUN cp /etc/mysql/my.cnf /etc/mysql/my.cnf.back 17 ADD my.cnf /etc/mysql/my.cnf 18 19 #暴露3306端口 20 EXPOSE 3306 21 22 #复制 supervisor 配置信息 23 ADD supervisor_mysql.conf /etc/supervisor.conf.d/mysql5.6.conf
my.cnf
1 # 2 # The MySQL database server configuration file. 3 # 4 # You can copy this to one of: 5 # - "/etc/mysql/my.cnf" to set global options, 6 # - "~/.my.cnf" to set user-specific options. 7 # 8 # One can use all long options that the program supports. 9 # Run program with --help to get a list of available options and with 10 # --print-defaults to see which it would actually understand and use. 11 # 12 # For explanations see 13 # http://dev.mysql.com/doc/mysql/en/server-system-variables.html 14 15 # This will be passed to all mysql clients 16 # It has been reported that passwords should be enclosed with ticks/quotes 17 # escpecially if they contain "#" chars... 18 # Remember to edit /etc/mysql/debian.cnf when changing the socket location. 19 skip-locking 20 [client] 21 port = 3306 22 socket = /var/run/mysqld/mysqld.sock 23 24 # Here is entries for some specific programs 25 # The following values assume you have at least 32M ram 26 27 # This was formally known as [safe_mysqld]. Both versions are currently parsed. 28 [mysqld_safe] 29 socket = /var/run/mysqld/mysqld.sock 30 nice = 0 31 32 [mysqld] 33 # 34 # * Basic Settings 35 # 36 user = mysql 37 pid-file = /var/run/mysqld/mysqld.pid 38 socket = /var/run/mysqld/mysqld.sock 39 port = 3306 40 basedir = /var/lib 41 datadir = /var/lib/mysql 42 tmpdir = /tmp 43 lc-messages-dir = /usr/share/mysql 44 skip-external-locking 45 # 46 # Instead of skip-networking the default is now to listen only on 47 # localhost which is more compatible and is not less secure. 48 #bind-address = 127.0.0.1 49 # 50 # * Fine Tuning 51 # 52 key_buffer = 16M 53 max_allowed_packet = 16M 54 thread_stack = 192K 55 thread_cache_size = 8 56 # This replaces the startup script and checks MyISAM tables if needed 57 # the first time they are touched 58 myisam-recover = BACKUP 59 #max_connections = 100 60 #table_cache = 64 61 #thread_concurrency = 10 62 # 63 # * Query Cache Configuration 64 # 65 query_cache_limit = 1M 66 query_cache_size = 16M 67 # 68 # * Logging and Replication 69 # 70 # Both location gets rotated by the cronjob. 71 # Be aware that this log type is a performance killer. 72 # As of 5.1 you can enable the log at runtime! 73 #general_log_file = /var/log/mysql/mysql.log 74 #general_log = 1 75 # 76 # Error log - should be very few entries. 77 # 78 log_error = /var/log/mysql/error.log 79 # 80 # Here you can see queries with especially long duration 81 #log_slow_queries = /var/log/mysql/mysql-slow.log 82 #long_query_time = 2 83 #log-queries-not-using-indexes 84 # 85 # The following can be used as easy to replay backup logs or for replication. 86 # note: if you are setting up a replication slave, see README.Debian about 87 # other settings you may need to change. 88 #server-id = 1 89 #log_bin = /var/log/mysql/mysql-bin.log 90 expire_logs_days = 10 91 max_binlog_size = 100M 92 #binlog_do_db = include_database_name 93 #binlog_ignore_db = include_database_name 94 # 95 # * InnoDB 96 # 97 # InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. 98 # Read the manual for more InnoDB related options. There are many! 99 # 100 # * Security Features 101 # 102 # Read the manual, too, if you want chroot! 103 # chroot = /var/lib/mysql/ 104 # 105 # For generating SSL certificates I recommend the OpenSSL GUI "tinyca". 106 # 107 # ssl-ca=/etc/mysql/cacert.pem 108 # ssl-cert=/etc/mysql/server-cert.pem 109 # ssl-key=/etc/mysql/server-key.pem 110 111 112 113 [mysqldump] 114 quick 115 quote-names 116 max_allowed_packet = 16M 117 118 [mysql] 119 #no-auto-rehash # faster start of mysql but no tab completition 120 121 [isamchk] 122 key_buffer = 16M 123 124 # 125 # * IMPORTANT: Additional settings that can override those from this file! 126 # The files must end with '.cnf', otherwise they'll be ignored. 127 # 128 !includedir /etc/mysql/conf.d/
supervisor_mysql.conf
1 [program:mysql5.6] 2 directory=/ 3 command=/usr/sbin/mysqld --defaults-file=/etc/mysql/my.cnf 4 user=root 5 autostart=true 6 autorestart=true 7 stdout_logfile=/var/log/supervisor/%(program_name)s.log 8 stderr_logfile=/var/log/supervisor/%(program_name)s.log