MySQL
从 Dockerhub拉取 MySQL
镜像:
$ docker pull mysql
实例容器,启动数据库
$ docker run -p 3306:3306 --name mysql -v ~/data/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d --privileged=true mysql
### 命令说明:
-p 3306:3306:将容器的3306端口映射到主机的3306端口
-v ~/data/mysql/:/var/lib/mysql:将主机当前用户目录下的mysql文件夹挂载到容器的/var/lib/mysql 下,在mysql容器中产生的数据就会保存在本机mysql目录下
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
-d 后台运行容器
--name 给容器指定别名
--privileged=true 可能会碰到权限问题,需要加参数
PHP-FPM
从 Dockerhub拉取 PHP-FPM
镜像:
$ docker pull php:5.6-fpm
实例容器,启动php:5.6-fpm
$ docker run --name php-fpm -p 9000:9000 -d php:5.6-fpm
把配置文件复制到本地:
$ cd ~/data/conf/php
$ docker cp php-fpm:/usr/local/etc/php-fpm.d/www.conf www.conf
$ docker cp php-fpm:/usr/src/php/php.ini-production php.ini
这里要特别注意一下,php:5.6-fpm:/usr/src/php/php.ini-production
,在实例出的容器中,不一定是路径src/php
,拉取的php:5.6-fpm
版本镜像不同,php.ini
路径不同。
可以这样查看php.ini
路径
# 先进入容器
$ docker exec -it php-fpm bash
$ cd /usr/src/ && ls
# 有以下两个文件
php.tar.xz php.tar.xz.asc
# 这里我们需要解压php.tar.xz文件,因为php.ini-production就在其中
//先解压xz
xz -d php.tar.xz
//再解压tar
# tar -xvf php.tar
解压完毕后, php.ini-production
便出现了,我当时的路径是/usr/src/php-5.6/php.ini-production
。
即,前文中的
$ docker cp php-fpm:/usr/src/php/php.ini-production php.ini
改为
$ docker cp php-fpm:/usr/src/php-5.6/php.ini-production php.ini
在本地服务器修改 php.ini
的内容,设置cgi.fix_pathinfo=1
(要先删除前面的;注释符)。
前面关于php-fpm的一系列操作主要是为了获得配置文件,并没有挂载本地目录到容器中,所以接下来需要删除容器,重新实例一个容器出来
$ docker stop php-fpm
$ docker rm php-fpm
$ docker run --name php-fpm -p 9000:9000 --link mysql:mysql -v ~/data/www/html:/var/www/html -v /data/www/80sy:/var/www/80sy -v ~/data/conf/php/www.conf:/usr/local/etc/php-fpm.d/www.conf -v ~/data/conf/php/php.ini:/usr/local/etc/php/php.ini -d php:5.6-fpm
Nginx
从 Dockerhub拉取 Nginx
镜像:
$ docker pull nginx
映射HTML路径
默认情况下,Docker nginx
服务器的HTML
路径(网站根目录)在容器/usr/share/nginx/html
目录下,现在需要把这个目录映射到本地服务器的~/data/www/html
目录。
配置 Nginx
Nginx
的强大很大部分体现在配置文件上,对于一些高级的应用来说,自定义Nginx
非常重要。所以,我们需要把Nginx
的配置文件复制到本地服务器目录:
server
{
listen 80;
#listen [::]:80;
server_name www.80sy.com;
index index.html index.htm index.php default.html default.htm default.php;
root /var/www/80sy;
#error_page 404 /404.html;
location ~ [^/]\.php(/|$)
{
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
access_log off;
}
server
{
listen 80;
#listen [::]:80;
server_name _;
index index.html index.htm index.php default.html default.htm default.php;
root /var/www/default;
#error_page 404 /404.html;
location ~ [^/]\.php(/|$)
{
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
access_log off;
}
实例容器,启动Nginx
docker run –name nginx -p 80:80 –link php-fpm -v /data/www/html:/var/www/html -v /data/www/default:/var/www/default -v /data/conf/nginx:/etc/nginx/conf.d -d nginx
访问http://www.80sy.com 即可对应到本地/data/www/80sy目录下的网站
访问http://IP 即可对应到本地/data/www/default 目录下的网站。
即可实现一个Docker创建多个站点。
文章转载请说明出处:八零岁月 » docker搭建nginx+php+mysql开发环境
评论前必须登录!