国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

wangbjun / 2949人閱讀

摘要:安裝關(guān)于上安裝網(wǎng)上有很多文章介紹,這里我就不在做描述了,順便提一句,建議使用阿里云或提供的加速器。我主要是通過來配置服務(wù)。一般配置文件名為。

安裝docker

關(guān)于MAC上安裝docker網(wǎng)上有很多文章介紹,這里我就不在做描述了,順便提一句,建議使用阿里云或Daocloud提供的加速器。
本文推薦參看這篇文章:https://blog.csdn.net/jiang_x...
這篇文章相當(dāng)于官方文檔的中文版翻譯

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

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

什么是docker-compose

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

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

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

MySQL

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

volumes:
 mysql:
   driver: local

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

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

在 mysql 服務(wù)上我用了 volumes 為它指定了一個(gè) MySQL 數(shù)據(jù)卷,掛載的位置是容器的 /var/lib/mysql ,這是存儲(chǔ)數(shù)據(jù)庫的默認(rèn)的地方。因?yàn)槲冶緳C(jī)安裝了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"
測(cè)試

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

docker-compose up

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

docker-compose exec mysql bash

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

mysql -uroot -p
show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| app                |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.03 sec)

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

php

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

volumes 下面是服務(wù)用的數(shù)據(jù)卷,我把 compose 文件所在目錄下的 app 這個(gè)目錄,掛載到了容器的 /www/html/app 這個(gè)位置上了。這樣我可以直接修改項(xiàng)目的代碼,然后立即看到結(jié)果;同時(shí)由于本機(jī)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è)置了一下這個(gè)鏡像要基于哪個(gè)鏡像去創(chuàng)建,我用了 php:7.1-fpm 這個(gè)官方提供的鏡像。RUN 了幾行命令,主要是去安裝一些軟件包,比如一些額外的 php 擴(kuò)展。在安裝這些擴(kuò)展之前 ,你需要先安裝擴(kuò)展依賴的一些其它的軟件包,這里的 libpng12-dev,libjpeg-dev,就是 gd 這個(gè) php 擴(kuò)展需要的軟件包。然后我又 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這個(gè)鏡像中軟件是使用的Debian的源,因?yàn)楸娝苤木壒蕰?huì)導(dǎo)致鏡像安裝不成功,如圖所示:


這個(gè)時(shí)候我們就需要更換源了,第一次換成了中科大的源,然后發(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 配置放到這個(gè)文件里,重新 build 鏡像,然后再次啟動(dòng) php 服務(wù)的時(shí)候會(huì)用新的鏡像重新創(chuàng)建容器,這樣配置就會(huì)生效了。

memory_limit = 256M
post_max_size = 100M
upload_max_filesize = 100M
Nginx

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

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

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,這是一個(gè)最基本的 nginx 配置文件,設(shè)置了應(yīng)用的 root 是在 /www/html/app 這里,我們已經(jīng)把主機(jī)上的 app 目錄掛載到了容器里的 /www/html/app 這個(gè)地方。

注意這條指令:fastcgi_pass php:9000; 這里的 php 是我們定義的 php 這個(gè)服務(wù)的名字,在 compose 文件里定義的服務(wù),它們之間可以使用服務(wù)的名字相互進(jìn)行溝通,因?yàn)?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) {

                        ###一級(jí)目錄下
                        rewrite ^/(.*)$ /index.php/$1 last;

                        ###域名下的二級(jí)目錄
                        #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;
}
啟動(dòng)

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


進(jìn)入到項(xiàng)目下面,執(zhí)行:

docker-compose up

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

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

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


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


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

總結(jié)

至此,我們對(duì)PHP基本開發(fā)環(huán)境已經(jīng)安裝好了,如果需要安裝比如Redis或memcache等服務(wù)的話,可以自行度娘,自己動(dòng)手。
下面是我這個(gè)項(xiàng)目的源碼,希望可以幫助到你,git地址:https://github.com/xiaodingch...

原文鏈接:https://www.xiaodingchen.cn/2...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28644.html

相關(guān)文章

  • Mac通過docker配置PHP開發(fā)環(huán)境

    摘要:安裝關(guān)于上安裝網(wǎng)上有很多文章介紹,這里我就不在做描述了,順便提一句,建議使用阿里云或提供的加速器。我主要是通過來配置服務(wù)。一般配置文件名為。 安裝docker 關(guān)于MAC上安裝docker網(wǎng)上有很多文章介紹,這里我就不在做描述了,順便提一句,建議使用阿里云或Daocloud提供的加速器。本文推薦參看這篇文章:https://blog.csdn.net/jiang_x...這篇文章相當(dāng)于...

    Rocture 評(píng)論0 收藏0
  • Mac使用dinghy和laradock搭建php運(yùn)行環(huán)境

    摘要:配置例如文件的目錄關(guān)系如下打開文件,修改的值為項(xiàng)目文件的相對(duì)路徑,這個(gè)路徑會(huì)映射到容器的目錄上,注意任何修改配置文件都需要執(zhí)行容器名字重新構(gòu)建相關(guān)容器。 背景 每次更換一個(gè)工作用的電腦,都需要很長(zhǎng)的時(shí)間來搭建本地的運(yùn)行環(huán)境。有時(shí)候,為了安裝一個(gè)擴(kuò)展會(huì)折騰半天,而且可能需要安裝多個(gè)版本的 php。有人說,集成運(yùn)行環(huán)境不是很好嘛,一次搞定所有的要求。是的,對(duì)于新手來說,使用集成包就足夠了。...

    ZoomQuiet 評(píng)論0 收藏0
  • mac利用docker搭建lnmp開發(fā)環(huán)境

    摘要:因?yàn)檎军c(diǎn)的采用自簽名方式,所以瀏覽器有安全提示,繼續(xù)訪問就可以了,自己的站點(diǎn)用第三方認(rèn)證證書替換即可。這是因?yàn)榇a是在容器中,容器啟動(dòng)時(shí)會(huì)自動(dòng)在中加上就是說,自動(dòng)指向了容器動(dòng)態(tài)生成的。則是跨容器訪問,參數(shù)用指定的名稱,端口用。 項(xiàng)目地址https://github.com/shmilylbel... 安裝docker 新版的docker for mac 下載地址docker-ce-de...

    Doyle 評(píng)論0 收藏0
  • mac利用docker搭建lnmp開發(fā)環(huán)境

    摘要:因?yàn)檎军c(diǎn)的采用自簽名方式,所以瀏覽器有安全提示,繼續(xù)訪問就可以了,自己的站點(diǎn)用第三方認(rèn)證證書替換即可。這是因?yàn)榇a是在容器中,容器啟動(dòng)時(shí)會(huì)自動(dòng)在中加上就是說,自動(dòng)指向了容器動(dòng)態(tài)生成的。則是跨容器訪問,參數(shù)用指定的名稱,端口用。 項(xiàng)目地址https://github.com/shmilylbel... 安裝docker 新版的docker for mac 下載地址docker-ce-de...

    vincent_xyb 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<