Docker 实践搭建php环境
docker 安装
- 使用官方提供的安装脚本,安装最新版的Docker
curl -sSL https://get.docker.com/ | sh bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
- 安装完成后,通过如下命令启动Docker的守护进程,并让它随系统启动自动加载
sudo service docker start sudo chkconfig docker on ## 或者 sudo systemctl start docker sudo systemctl enable docker
- 添加用户(jerry)到Docker组
sudo groupadd docker sudo usermod -aG docker $USER sudo gpasswd -a $USER docker newgrp docker
命令笔记(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;
}
}
调试
- 查看具体端口占用:sudo lsof -i -P -n | grep 80
- 查看docker端口映射:sudo iptables -t nat -nL
参考链接
- docker 菜鸟教程
- docker安装
- Compose 模板文件
- Docker命令详解(run篇)
- 2233466866/lnmp
- yeszao/dnmp
- eample vhost conf
- Nginx配置Web服务器
- Nginx error log
- Nginx域名访问的白名单配置
- Nginx时区设置
- Nginx目录遍历功能时间相差8小时
- docker已运行容器里的时区修改
- nginx日志按天生成&定期删除日志
- Linux useradd命令
- 使用Docker快速搭建PHP开发环境
- fix docker: Got permission
- mysql的配置utf8mb4
- php修改文件上传限制
- 出现 Request Entity Too Large问题的解决方法
- docker给已存在的容器添加或修改端口映射
- 如何在 Ubuntu 18.04 中切换多个PHP版本
- Ubuntu下apache的安装与配置
- CentOS8安装Docker出现package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3
- centos7下安装redis6.0以上版本,出现gcc低版本导致报错
- 使用docker搭建PHP开发环境
- 如何在docker-compose.yml中重建docker容器
- docker 权限问题 Got permission denied
- laradock
- Secure Nginx with Let's Encrypt Guide
- Docker Php Extension Installer
- laradock 如何添加 redis 配置
- libv8-archived
- http://ppa.launchpad.net/ubuntu
- https://www.php.net/releases/
- laradock 切换php版本,laradock 使用 php-worker 配置 superviso
- 修改Laradock环境下的php.ini文件以修改上传文件的大小
- 为什么用localhost连不上mysql,用127.0.0.1却可以
- Linux 如何查看端口占用、开放情况
- Nginx服务器下面配置php多版本共存
- php版本更换,php怎么切换版本
- Docker app server ip address 127.0.0.1 difference of 0.0.0.0 ip
- nuxtjs如何更改应用的主机和端口配置
- npm和yarn的区别
- linux安装nodejs
- 外部访问容器
- Docker容器如何暴露端口
- dnmp
- 换源
正因为来之不易,所以才有了后来的倍加珍惜。