1. 安装php7
安装docker就不赘述了。现在要在docker中安装php7,先拉镜像:
docker pull php:7.1-fpm
这个镜像是把php和php-fpm整合到一起,可以看做是php-fpm,要配合nginx使用。先运行起来:
docker run -p 9000:9000 --name php7 -v /docker/www:/www --privileged=true -d php:7.1-fpm
/docker/www:/www
表示将容器中的www目录映射到宿主环境的/docker/www目录,此时容器的www目录就是我们的网站根目录,这个很关键。之后的配置解析就要解析到这个www
目录下
2. 安装nginx1.12
docker pull nginx:1.12
运行之前,我们要创建nginx的配置目录和日志目录
mkdir /docker/nginx/conf.d
mkdir /docker/nginx/logs
然后在conf.d目录下新建default.conf配置文件
server {
listen 80;
# 这个www目录是nginx容器中的www目录
root /www;
server_name localhost;
location / {
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
#这个www目录是php-fpm容器中的www目录
fastcgi_param SCRIPT_FILENAME /www/$fastcgi_script_name;
include fastcgi_params;
}
}
最后运行
docker run -p 80:80 --name nginx -v /docker/www:/www -v /docker/nginx/conf.d:/etc/nginx/conf.d -v /docker/nginx/logs:/wwwlogs --link php7:php --privileged=true -d nginx:1.12
注意一点,nginx和php-fpm两个容器需要挂载宿主环境中的同一个目录才能正确解析,即/docker/www
目录
3. 安装composer
有时候需要使用composer来安装PHP包,比如laravel,但是php-fpm镜像中并没有composer。所以我们再装一个composer镜像
docker pull composer
运行composer容器和运行php或者nginx容器不同,它不需要后台运行,而是使用命令行交互模式,即不使用-d
,使用-it
。同时composer是在PHP项目跟目录运行,所以也需要挂载/docker/www
目录
docker run -it --name composer -v /docker/www:/app --privileged=true composer <要执行的composer命令>
比如新建laravel项目
docker run -it --name composer -v /docker/www:/app --privileged=true composer composer create-project --prefer-dist laravel/laravel ./ 5.5.*
4. 安装mysql5.6
docker pull mysql:5.6
创建mysql的配置目录,数据目录,日志目录
mkdir /docker/mysql/conf
mkdir /docker/mysql/data
mkdir /docker/mysql/logs
在/docker/mysql/conf目录下新建my.cnf配置文件,如下
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
bind-address = 0.0.0.0
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
#skip-grant-tables
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
最后运行容器:
docker run -p 3306:3306 --name mysql -v /docker/mysql/conf/my.cnf:/etc/mysql/conf.d/mysql.cnf -v /docker/mysql/logs:/logs -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=mypass --privileged=true -d mysql:5.6
注意:这里的-e MYSQL_ROOT_PASSWORD=mypass
参数,设置 root 用户的密码为mypass
。
如果要修改密码,首先登陆 mysql 镜像:
docker exec -it e6b1137ba220 /bin/bash
进入镜像后,用 root 用户进入数据库
mysql -u root -p
查看当前 mysql 密码可以这样:
tr '0' 'n' </proc/1/environ
如果需要远程连接,还需要跑两条sql
use mysql;
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "mypassword";
flush privileges;
完成!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。