1. 程式人生 > >docker 搭建php開發環境

docker 搭建php開發環境

本地環境: ubuntu15.10 +docker  

關於安裝docker ,網上有很多文章,官網也有教程,這裡不再講述.

這裡需要用到的映象有

php:5.6-fpm

mysql:latest

mongo:latest

nginx:1.9.6

redis:latest

下載映象 

sudo docker pull  映象名稱

比如  sudo docker pull php:5.6-fpm 

檢視映象

sudo docker images

我們需要在php:5.6-fpm  中安裝一些擴充套件,比如mongodb ,redis 等等
1. 把容器後臺執行起來

docker run -it -d  container_id  

2 鑽進容器,安裝擴充套件

docker exec -it  container_id  /bin/bash
pecl intall  mongodb  

pecl install  redis

3 在php.ini檔案中加上 extension (php.ini 檔案可以在phpinfo()中查詢)

4 退出容器  exit

5 把更改的容器提交為新的映象
  docker commit container_id alex/xxxx-xxxx

最關鍵的是寫docker-compose.yml 檔案,裡面是具體埠對映,實體地址對映,各種服務的連結

nginx-dev:
  image: nginx:1.9.6
  ports:
    - "8080:8080"
    - "8081:8081"
  volumes:
    - /srv/docker3/web1:/usr/share/nginx/html/web1
    - /srv/docker3/web2:/usr/share/nginx/html/web2
    - /srv/docker3/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
  #  - /srv/docker3/nginx/cert:/etc/nginx/cert:ro
    - /srv/docker3/nginx/fastcgi_params_pathinfo:
/etc/nginx/fastcgi_params_pathinfo:ro
links: - php-fpm-dev:php-fpm-dev php-fpm-dev: image: alex/php-fpm-5.6 expose: - "9000" volumes: - /srv/docker3/web1:/usr/share/nginx/html/web1:ro - /srv/docker3/web2:/usr/share/nginx/html/web2:ro links: - mysql-dev:mysql-dev - memcached-dev:memcached-dev - redis-dev:redis-dev - mongo-dev:mongo-dev mysql-dev: image: mysql:5.7 expose: - "3306" volumes: - /srv/docker3/mysql/mysqldata:/var/lib/mysql - /srv/docker3/mysql/mysqlconf:/etc/mysql/conf.d environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_DATABASE=dev002 - MYSQL_USER=office - MYSQL_PASSWORD=office - MYSQL_ALLOW_EMPTY_PASSWORD=yes memcached-dev: image: memcached:1.4 command: memcached -m 32 expose: - "11211" redis-dev: image: redis:3.0.5 command: redis-server expose: - "6379" mongo-dev: image: mongo:latest expose: - "27017" volumes: - /srv/docker3/mongo/mongodata:/data/db ~ ~

在/srv/docker3 分別新建如下目錄 mongo mysql nginx web1 web2

在nginx 目錄下 有這兩個檔案  fastcgi_params_pathinfo nginx.conf

現在來看具體的nginx 設定,一個虛擬主機可以這麼寫,同理另外一個可以參照這個寫,把名字和具體裡目錄更改下就行了

server {
        listen       8080;
        server_name  web1;


        location / {
            root   /usr/share/nginx/html/web1;
            index  index.php index.html index.htm;

            if (!-e $request_filename) {
                rewrite ^/(.*)$ /index.php/$1 last;
            }
            autoindex on;
        }
        location ^~ /.git {
            deny  all;
        }
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php {
            root           /usr/share/nginx/html/web1;
            fastcgi_pass   php-fpm-dev:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            send_timeout 60;
            include        fastcgi_params_pathinfo;
            autoindex on;
        }
    }

這些都準備就緒後,可以試一試 切換到docker-compose 所在目錄下

docker-compose  up -d 

如果有錯誤 請仔細檢視 docker-compose config  或者具體檢視某個容器的日誌

檢視日誌方法  docker ps -a 列出了所有容器(包括退出的)

然後 docker logs container_id  可以檢視具體的容器的日誌

根據日誌分析配置哪裡出錯