【docker】docker 安裝配置 nginx+php+composer

楊成功發表於2019-01-19

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目錄

1. 安裝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.*

安裝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

如果需要遠端連線,還需要跑兩條sql

use mysql;
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "mypassword";
flush privileges;

完成!

相關文章