安裝docker就不贅述了。如今要在docker中安裝php7,先拉鏡像:php
docker pull php:7.1-fpm
這個鏡像是把php和php-fpm整合到一塊兒,能夠看作是php-fpm,要配合nginx使用。先運行起來:html
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
目錄下mysql
docker pull nginx:1.12
運行以前,咱們要建立nginx的配置目錄和日誌目錄nginx
mkdir /docker/nginx/conf.d mkdir /docker/nginx/logs
而後在conf.d目錄下新建default.conf配置文件laravel
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; } }
最後運行sql
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
目錄docker
有時候須要使用composer來安裝PHP包,好比laravel,可是php-fpm鏡像中並無composer。因此咱們再裝一個composer鏡像php7
docker pull composer
運行composer容器和運行php或者nginx容器不一樣,它不須要後臺運行,而是使用命令行交互模式,即不使用-d
,使用-it
。同時composer是在PHP項目跟目錄運行,因此也須要掛載/docker/www
目錄app
docker run -it --name composer -v /docker/www:/app --privileged=true composer <要執行的composer命令>
好比新建laravel項目composer
docker run -it --name composer -v /docker/www:/app --privileged=true composer composer create-project --prefer-dist laravel/laravel ./ 5.5.*
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
若是須要遠程鏈接,還須要跑兩條sql
use mysql; GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "mypassword"; flush privileges;
完成!