国产三级农村妇女在线,国产精品毛片a∨一区二区三区,国产乱子伦视频大全,国产精品色拉拉,国产欧美日韩一区二区三区,

首頁 > 技術(shù) > IOS開發(fā)

如何在Mac上通過docker配置PHP開發(fā)環(huán)境

IOS開發(fā) 2023-02-16 22:18:57
目錄
  • 使用docker-compose配置開發(fā)環(huán)境
  • 什么是docker-compose
  • 目錄結(jié)構(gòu)
  • MySQL
  • 測試
  • php
    • Dockerfile
    • php服務(wù)中遇到的坑
    • php.ini
  • Nginx
    • app.conf
  • 啟動
    • 連接數(shù)據(jù)庫
      • 總結(jié)

        使用docker-compose配置開發(fā)環(huán)境

        一般一個基本的PHP開發(fā)環(huán)境包括PHP、PHP-FPM、WEB服務(wù)器、MySQL數(shù)據(jù)庫,另外還會有Redis或memcache等相關(guān)NoSQL服務(wù)。我主要是通過docker-compose來配置服務(wù)。

        什么是docker-compose

        docker-compose是一個通過YAML文件來定義項目,項目中包含單個或多個容器服務(wù)。一般配置文件名為:docker-compose.yml。

        目錄結(jié)構(gòu)

        你可以按自己的喜好組織項目,下面是我用的方法,app 目錄放的是應(yīng)用的代碼,services 下面是創(chuàng)建服務(wù)需要用的東西,有些服務(wù)需要我們自己去創(chuàng)建鏡像,在一個 Dockerfile 文件里說明一下你想要的鏡像是什么樣的。在創(chuàng)建自定義鏡像的時候也可能需要用到一些額外的文件,比如一些配置文件,一般在創(chuàng)建鏡像的時候會把這些配置文件復(fù)制到鏡像里。

        如何在Mac上通過docker配置PHP開發(fā)環(huán)境(圖1)

        MySQL

        mysql是數(shù)據(jù)服務(wù),先去給這個服務(wù)添加一個數(shù)據(jù)卷,然后在這個服務(wù)里使用一下這個數(shù)據(jù)卷,把數(shù)據(jù)庫生成的數(shù)據(jù)放到這里,這樣即使我們刪除容器,數(shù)據(jù)服務(wù)里的數(shù)據(jù)也會保留在主機上,下回創(chuàng)建容器的時候,可以繼續(xù)使用已有的數(shù)據(jù)。在 volumes 下面,添加一個名字是 mysql 的數(shù)據(jù)卷:

        volumes: mysql: driver: local

        然后再去添加一個名字是 MySQL的服務(wù),指定一下服務(wù)使用的鏡像,這個鏡像我們也可以用自己創(chuàng)建的 Dockerfile 去創(chuàng)建一下,或者你不打算定制鏡像,也可以直接使用現(xiàn)成的,這里我用了 mysql:5.7 這個鏡像。注意最好設(shè)置具體要使用的版本。

        這個鏡像里有一些環(huán)境變量,我們可以在定義服務(wù)的時候去設(shè)置一下它們的值,這里我設(shè)置了 root 用戶的密碼,要創(chuàng)建的數(shù)據(jù)庫,用戶名,還有密碼,你可以 根據(jù)自己的需求去修改這些變量的值。

        在 mysql 服務(wù)上我用了 volumes 為它指定了一個 MySQL 數(shù)據(jù)卷,掛載的位置是容器的 /var/lib/mysql ,這是存儲數(shù)據(jù)庫的默認(rèn)的地方。因為我本機安裝了MySQL服務(wù),3306端口被占用了,所以指定6306端口映射到容器的3306

        version: "3"services: mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: "root" MYSQL_DATABASE: "app" MYSQL_USER: "app" MYSQL_PASSWORD: "123456" volumes: - ./services/mysql/data:/var/lib/mysql ports: - "6306:3306"

        測試

        在我們的 compose 文件里現(xiàn)在已經(jīng)有了一個叫 mysql 的服務(wù),在命令行工具下,進入到項目所在的目錄,執(zhí)行:

        docker-compose up

        然后你就會在終端上看到安裝鏡像和啟動容器的過程,然后另開一個命令終端,執(zhí)行:

        docker-compose execmysql bash

        進入mysql容器中,然后進入數(shù)據(jù)庫檢查一下:

        mysql -uroot -pshow databases;

        +--------------------+| Database           |

        +--------------------+| information_schema |

        | app                |

        | mysql              |

        | performance_schema || sys                |

        +--------------------+5 rows in set (0.03 sec)

        這個時候我們發(fā)現(xiàn)mysql容器已經(jīng)可用了

        php

        定義一個解釋 php 的服務(wù),我打算自己創(chuàng)建這個服務(wù)用的鏡像,所以用了 build,而不是 image 。我告訴了 docker 自己要創(chuàng)建的這個鏡像要使用的那個 Dockerfile 文件的位置(./services/php/Dockerfile)。

        volumes 下面是服務(wù)用的數(shù)據(jù)卷,我把 compose 文件所在目錄下的 app 這個目錄,掛載到了容器的 /www/html/app 這個位置上了。這樣我可以直接修改項目的代碼,然后立即看到結(jié)果;同時由于本機9000端口被占用,指定9090端口映射到容器的9000端口

        php: build: context: ./services/php dockerfile: Dockerfile volumes: - ./app:/www/html/app ports: - "9090:9000"

        Dockerfile

        構(gòu)建 php 服務(wù)的鏡像用的 Dockerfile 是 ./services/php/Dockerfile。FROM,設(shè)置了一下這個鏡像要基于哪個鏡像去創(chuàng)建,我用了 php:7.1-fpm 這個官方提供的鏡像。RUN 了幾行命令,主要是去安裝一些軟件包,比如一些額外的 php 擴展。在安裝這些擴展之前 ,你需要先安裝擴展依賴的一些其它的軟件包,這里的 libpng12-dev,libjpeg-dev,就是 gd 這個 php 擴展需要的軟件包。然后我又 COPY 了配置文件到鏡像里面。

        FROM php:7.1-fpm

        RUN apt-get update && apt-get install -y libpng12-dev libjpeg-dev

          && rm -rf /var/lib/apt/lists/*

          && docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr

          && docker-php-ext-install gd mysqli pdo_mysql zip opcache

        COPY ./config/php.ini /usr/local/etc/php/conf.d/php.ini

        php服務(wù)中遇到的坑

        PHP這個鏡像中軟件是使用的Debian的源,因為眾所周知的緣故會導(dǎo)致鏡像安裝不成功,如圖所示:

        如何在Mac上通過docker配置PHP開發(fā)環(huán)境(圖2)

        這個時候我們就需要更換源了,第一次換成了中科大的源,然后發(fā)現(xiàn)不行,第二次更換成了阿里云的源,完美完成鏡像安裝,修改過后的Dockerfile如下:

        FROM php:7.1-fpm

        RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list

          && apt-get update && apt-get install -y libpng12-dev libjpeg-dev

          && rm -rf /var/lib/apt/lists/*

          && docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr

          && docker-php-ext-install gd mysqli pdo_mysql zip opcache

        COPY ./config/php.ini /usr/local/etc/php/conf.d/php.ini

        使用sed命令搜索軟件源文件,把Debian域名修改為阿里云域名

        php.ini

        自定義的 php 配置。把你想要的 php 配置放到這個文件里,重新 build 鏡像,然后再次啟動 php 服務(wù)的時候會用新的鏡像重新創(chuàng)建容器,這樣配置就會生效了。

        memory_limit = 256Mpost_max_size = 100Mupload_max_filesize = 100M

        Nginx

        用 image 指定了要使用的鏡像,ports 設(shè)置了發(fā)布的端口號,讓主機上的 8000 對應(yīng)容器的 80 。depends_on 可以設(shè)置服務(wù)的依賴,我讓 nginx 服務(wù)依賴之前定義的 php ,這樣會先啟動 php ,然后再啟動 nginx 。

        另外我又用了 volumes 自己設(shè)置了一個數(shù)據(jù)卷,讓主機上包含 nginx 配置文件的目錄,對應(yīng)容器里的 nginx 服務(wù)的配置文件目錄,這樣我就可以直接在本機上修改 nginx 的配置文件,然后重新啟動一下 nginx 服務(wù),配置就可以生效了。這種方法適用在開發(fā)環(huán)境上,因為修改了配置不需要重新 build 鏡像,在生產(chǎn)環(huán)境中,你需要自己 build 這個 nginx 鏡像,把想要的配置直接復(fù)制到鏡像里去。在開發(fā)階段有的時候我們需要查看nginx的日志,然后我配置了日志目錄映射到容器,最后一個地址是代碼目錄

        nginx:    image: nginx:1.12.2    ports:

              - "8000:80"    depends_on:

              - php    volumes:

              - ./services/nginx/config:/etc/nginx/conf.d

              - ./services/nginx/logs:/etc/nginx/logs/

              - ./app:/www/html/app

        app.conf

        ./services/nginx/config/app.conf,這是一個最基本的 nginx 配置文件,設(shè)置了應(yīng)用的 root 是在 /www/html/app 這里,我們已經(jīng)把主機上的 app 目錄掛載到了容器里的 /www/html/app 這個地方。

        注意這條指令:fastcgi_pass php:9000; 這里的 php 是我們定義的 php 這個服務(wù)的名字,在 compose 文件里定義的服務(wù),它們之間可以使用服務(wù)的名字相互進行溝通,因為 docker 內(nèi)置了 DNS 功能。

        server {   
        listen       80; 
        server_name  localhost; 
        root         /www/html/app;
        # access_log  /etc/nginx/logs/app.access.log  main;
        location / {        
        	index  index.html index.htm index.php; 
        	autoindex   on;
        	#  include    /usr/local/etc/nginx/conf.d/php-fpm;
        	#  # include  /usr/local/etc/nginx/conf.d/pathinfo.conf;
        	if (!-e $request_filename) { 
        	###一級目錄下
        	rewrite ^/(.*)$ /index.php/$1 last; ###域名下的二級目錄
        	#rewrite ^/html/(.*)$ /uuabc_home/index.php/$1 last;
        	}   
        }
        location = /info { 
        	allow   127.0.0.1; 
        	deny    all;
        }   
        location ~ .php(.*)$  { 
        	# comment try_files $uri =404; to enable pathinfo
        	# try_files $uri =404;
        	fastcgi_pass                php:9000; 
        	fastcgi_index               index.php; 
        	fastcgi_split_path_info ^((?U).+.php)(/?.+)$;   
        	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;   
        	fastcgi_param PATH_INFO $fastcgi_path_info;  
        	fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; 
        	include /etc/nginx/fastcgi_params;
        }   
        # error_page  404     /404.html;
        # error_page  403     /403.html;}

        啟動

        經(jīng)過上面幾個步驟,我們已經(jīng)把PHP開發(fā)最基本的搞好了,下面我們準(zhǔn)備看下成果。
        在 app 目錄下創(chuàng)建一個 index.php ,內(nèi)容是:

        <?php phpinfo();

        進入到項目下面,執(zhí)行:

        docker-compose up

        打開瀏覽器訪問http://localhost:8000/,結(jié)果如圖所示:

        如何在Mac上通過docker配置PHP開發(fā)環(huán)境(圖3)

        連接數(shù)據(jù)庫

        在app目錄有一個adminer.php文件,這個文件是一個類似于PHPmyadmin的數(shù)據(jù)庫管理工具,比較輕量級,訪問http://localhost:8000/adminer.php,如圖所示:

        如何在Mac上通過docker配置PHP開發(fā)環(huán)境(圖4)

        在表單服務(wù)器選項中填寫mysql,用戶名root,密碼填寫安裝MySQL服務(wù)時的root密碼,然后登陸進去,如圖所示:

        如何在Mac上通過docker配置PHP開發(fā)環(huán)境(圖5)

        然后我們就可以愉快的管理數(shù)據(jù)庫了。

        總結(jié)

        至此,我們對PHP基本開發(fā)環(huán)境已經(jīng)安裝好了,如果需要安裝比如Redis或memcache等服務(wù)的話,可以自行度娘,自己動手。

        以上就是如何在Mac上通過docker配置PHP開發(fā)環(huán)境的詳細(xì)內(nèi)容,更多關(guān)于在Mac上通過docker配置PHP開發(fā)環(huán)境的資料請關(guān)注腳本之家其它相關(guān)文章!

        TAg

        加載中~

        本網(wǎng)站LOGO受版權(quán)及商標(biāo)保護,版權(quán)登記號:國作登字-2022-F-10126915,未經(jīng)湖南木星科技官方許可,嚴(yán)禁使用。
        Copyright ? 2012-2022 湖南木星科技有限公司(木星網(wǎng))版權(quán)所有
        轉(zhuǎn)載內(nèi)容版權(quán)歸作者及來源網(wǎng)站所有,本站原創(chuàng)內(nèi)容轉(zhuǎn)載請注明來源,商業(yè)媒體及紙媒請先聯(lián)系:aishangyiwan@126.com

        工信部備案號:湘ICP備19012813號-5