因docker环境安装简单,本文是在已经安装好docker为环境前提下做其它操作的,
第一步:拉取docker镜像
- 拉取php7.3的镜像
docker pull bitnami/php-fpm:7.3
- 拉取nginx镜像
docker pull nginx:latest
- 拉取mysql 5.6镜像
docker pull mysql:5.6
第二步: 运行容器
网站目录结构
/home/cszp | 网站目录 |
/usr/share/nginx/html | 容器目录结构 |
1)首先运行PHP容器
docker run --name php -d --restart=always -v /home/cszp:/usr/share/nginx/html -p 8000:9000 bitnami/php-fpm:7.3
命令说明 | |
参数 | 参数说明 |
--name php | 容器命名为 php |
-d | 后台运行容器,并返回容器ID |
-p 8000:9000 | 将本地(宿主机)8000端口映射到容器内9000 |
-v /home/cszp:/usr/share/nginx/html | 宿主机/home/cszp(网站源码存放处)挂载到容器中/usr/share/nginx/html中 |
bitnami/php-fpm:7.3 | php 7.3镜像 |
2)运行nginx容器
网站路径 | |
路径 | |
/home/cszp | 网站目录(与PHP挂载目录一致) |
/www/docker/nginx/conf | Nginx主配置文件nginx.conf是一个纯文本类型的文件 |
/www/docker/nginx/conf.d | default.conf配置目录 |
/www/docker/nginx/log | 日志保护 |
2.1 新建目录
mkdir -p /www/docker/nginx/{conf,conf.d,logs}
2.2创建一个普通容器
docker run -itd --name web001 --link php nginx:latest
2.3 从容器中拷贝nginx配置文件
docker cp web001:/etc/nginx/conf.d/default.conf /www/docker/nginx/conf.d
docker cp web001:/etc/nginx/nginx.conf /www/docker/nginx/conf/
2.4 删除web001容器
docker rm -f web001
2.5 创建新的生产环境容器
docker run --name web001 -itd -v /home/cszp:/usr/share/nginx/html -v /www/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro -v /www/docker/nginx/conf.d:/etc/nginx/conf.d -v /www/docker/nginx/logs:/var/log/ngin -p 9980:80 --link php nginx:latest
2.6 修改/www/docker/nginx/conf.d/default.conf配置文件
修改后的配置文件
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
#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$ {
# root html;
fastcgi_pass php:9000; #php容器名或者php容器对应IP,容器重启后IP会变,容器名只要你不人为改变是不会变的
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; #特别说明:这里的/usr/share/nginx/html要与php容器里映射的php脚本路径一致,否则php-fpm将找不到php脚本,会报404错误
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
3) 运行mysql容器
docker run -d --restart=always --name db -p 9306:3306 \
-v /www/docker/mysql/conf:/etc/mysql \
-v /www/docker/mysql/logs:/logs \
-v /www/docker/mysql/data:/var/lib/mysql \
--link php \
-e MYSQL_ROOT_PASSWORD=fkaf323sdafsafafsIdsaf \
mysql:5.6
参数 | 参数说明 |
---|---|
--restart=always | 重启docker时,自动启动相关容器。 |
-e MYSQL_ROOT_PASSWORD=fkaf323sdafsafafsIdsaf | 配置数据库密码为fkaf323sdafsafafsIdsaf |
4)通过访问web001容器IP快速访问网站
当时在/home/cszp目录,中需要建立index.php文件
echo "<?php phpinfo(); ?>" >> /home/cszp/index.php
假定容器IP是172.17.0.3,在宿主机可以通过该IP可以直接访问也可以通过宿主机:端口号访问
比如对外IP是:150.158.100.100,可以直接通过:150.158.100.100:9980直接访问
有什么不对或者错误的地方,欢迎各位批评指正!!!