當前位置:首頁 » 編程語言 » docker搭建php

docker搭建php

發布時間: 2023-06-29 02:23:26

❶ 如何配置一個 Docker 化持續集成的 php 開發環境

首先,我們得知道什麼才是好的開發環境, 對於我而言,一個好的開發環境需要具備以下幾個特點:

可隨意使用。我必須可以隨意刪除和創建新的環境。
快速啟動。我想要用它工作時候,它立馬就能用。
易於更新。在我們行業中,事物發展變化非常快,必須能讓我很容易將我的開發環境更新到新的軟體版本。

而Docker都支持以上這些特點,甚至更多。你幾乎可以即時銷毀和重建容器,而更新環境只需要重建你當前使用的鏡像即可。

什麼是PHP開發環境
目前Web應用錯綜復雜,PHP開發環境需要很多的東西,為了保證環境的簡單性,需要做各種各樣的限制。
我們這次使用Nginx、PHP5-FPM、Mysql來運行Synmfony項目。由於在容器中運行命令行會更復雜,所以這方面的內容我會放到下一篇博客中再說。

Pet 與 Cattle
另一個我們要討論的重點是:我們要把開發環境部署在多容器還是單容器中。 兩種方式各有優點:

單容器易於分發、維護。因為它們是獨立的,所有的東西都運行在同一個容器中,這點就像是一個虛擬機。但這也意味著,當你要升級其中的某樣東西(比如PHP新版本)的時候, 需要重新構建整個容器。
多容器可以在添加組件時提供更好的模塊化。因為每個容器包含了堆棧的一部分:Web、PHP、MySQL等,這樣可以單獨擴展每個服務或者添加服務,並且不需要重建所有的東西。

因為我比較懶,加上我需要在我的筆記本上放點別的內容,所以,這里我們只介紹單個容器的方法。

初始化工程
首先要做的是初始化一個新的Symfony工程. 推薦的方法是用composer的create-project命令。本來可以在工作站上安裝composer,但是那樣太簡單了。這次我們通過Docker來使用它。
我之前發過一篇關於Docker命令的文章:make docker commands(好吧,我說謊了,我本來把它寫在這篇文章中了,然後覺得把它獨立出來會比較好)。

不管怎麼樣,你可以讀一下。接下來如果還沒有composer命令的話,你可以創建一個屬於自己的composer 別名。

$ alias composer="docker run -i -t -v \$PWD:/srv ubermuda/composer"

現在你可以初始化Symfony工程了:

$ composer create-project symfony/framwork-standard-edition SomeProject

帥呆了!下面來點實在的工作。(省略了博主自娛自樂的一堆balabla....原文:Awesome. Give yourself a high-five, get a cup of coffee or whatever is your liquid drug of choice, and get ready for the real work.)

容器
構建一個運行標准Symfony項目且自給自足的容器相當容易,只需要安裝好常用的Nginx、PHP5-FPM和MySQL-Server即可,然後把預先准備好的Nginx的虛擬主機配置文件扔進去,再復制一些配置文件進去就完事了。

本容器的源代碼在GitHub上的 ubermuda/docker-symfony倉庫中可以找到。 Dockerfile 是Docker構建鏡像要用到的配置文件,我們來看一下:

FROM debian:wheezy

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update -y

RUN apt-get install -y nginx php5-fpm php5-mysqlnd php5-cli mysql-server supervisor

RUN sed -e 's/;daemonize = yes/daemonize = no/' -i /etc/php5/fpm/php-fpm.conf

RUN sed -e 's/;listen\.owner/listen.owner/' -i /etc/php5/fpm/pool.d/www.conf

RUN sed -e 's/;listen\.group/listen.group/' -i /etc/php5/fpm/pool.d/www.conf

RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf

ADD vhost.conf /etc/nginx/sites-available/default

ADD supervisor.conf /etc/supervisor/conf.d/supervisor.conf

ADD init.sh /init.sh

EXPOSE 80 3306

VOLUME ["/srv"]

WORKDIR /srv

CMD ["/usr/bin/supervisord"]

我們通過擴展 debian:wheezy 這個基礎鏡像開始,然後通過一系列的sed命令來配置Nginx和PHP5-FPM。

RUN sed -e 's/;daemonize = yes/daemonize = no/' -i /etc/php5/fpm/php-fpm.conf

RUN sed -e 's/;listen\.owner/listen.owner/' -i /etc/php5/fpm/pool.d/www.conf

RUN sed -e 's/;listen\.group/listen.group/' -i /etc/php5/fpm/pool.d/www.conf

RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf

這里我們要做兩件事。 首先配置PHP5-FPM和Nginx讓他們在前台運行以便supervisord可以追蹤到他們。
然後,配置PHP5-FPM以指定的用戶運行Web-Server,並處理好文件許可權。

接下來需要安裝一組配置文件,首先是Nginx的虛擬主機配置文件vhost.conf:

server {

listen 80;

server_name _;

access_log /var/log/nginx/access.log;

error_log /var/log/nginx/error.log;

root /srv/web;

index app_dev.php;

location / {

try_files $uri $uri/ /app_dev.php?$query_string;

}

location ~ [^/]\.php(/|$) {

fastcgi_pass unix:/var/run/php5-fpm.sock;

include fastcgi_params;

}

}

因為我們不需要域名,所以把server_name設成了_(有點像perl的$_佔位符變數), 並配置根目錄(document root)為/svr/web, 我們會把應用程序部署在/srv下,剩下的就是標準的Mginx + PHP5-FPM配置.

因為一個容器每次只能運行一個程序, 我們需要supervisord(或者任何別的進程管理器,不過我比較中意supervisord)。幸運的是, 這個進程管理器會產生我們需要的所有進程!下面是一小段supervisord的配置:

[supervisord]

nodaemon=true

[program:nginx]

command=/usr/sbin/nginx

[program:php5-fpm]

command=/usr/sbin/php5-fpm

[program:mysql]

command=/usr/bin/mysqld_safe

[program:init]

command=/init.sh

autorestart=false

redirect_stderr=true

redirect_stdout=/srv/app/logs/init.log

這里我們需要做的是定義所有的服務, 加上一個特殊的program:init進程,它不是一個實際的服務,而是一個獨創的運行啟動腳本的方式。

這個啟動腳本的問題在於,它通常需要先啟動某些服務。比如,你可能要初始化一些資料庫表,但前提是你得先把MySQL跑起來,一個可能的解決辦法是,在啟動腳本中啟動MySQL,然後初始化表,然後為了防止影響到supervisord的進程管理,需要停掉MySQL,最後再啟動supervisord。

這樣的腳本看起來類似下面這樣:

/etc/init.d/mysql start

app/console doctrine:schema:update --force

/etc/init.d/mysql stop

exec /usr/bin/supervisord

看起來丑爆了有木有,咱換種方式,讓supervisor來運行它並且永不重啟。
實際的init.sh腳本如下:

#!/bin/bash

RET=1

while [[ RET -ne 0 ]]; do

sleep 1;

mysql -e 'exit' > /dev/null 2>&1; RET=$?

done

DB_NAME=${DB_NAME:-symfony}

mysqladmin -u root create $DB_NAME

if [ -n "$INIT" ]; then

/srv/$INIT

fi

腳本先等待MySQL啟動,然後根據環境變數DB_NAME創建DB,默認為symfony, 然後在INIT環境變數中查找要運行的腳本,並嘗試運行它。本文的結尾有說明如何使用這些環境變數。

構建並運行鏡像
萬事俱備只欠東風。我們還要構建Symfony Docker鏡像, 使用docker build命令:

$ cd docker-symfony

$ docker build -t symfony .

現在,可以使用它來運行你的Symfony工程了:

$ cd SomeProject

$ docker run -i -t -P -v $PWD:/srv symfony

我們來看看這一連串的選項分別是幹嘛的:

-i 啟動交互(interactive)模式, 也就是說,STDIO(標准輸入輸出)連接到了你當前的終端上。當你要接收日誌或者給進程發送信號時,它很有用。
-t 為容器創建一個虛擬TTY, 它跟-i是好基友,通常一起使用。
-P 告訴Docker守護進程發布所有指定的埠, 本例中為80埠。
-v $PWD:/srv 把當前目錄掛載到容器的/srv目錄。掛載一個目錄使得目錄內容對目標掛載點可用。

現在你還記得之前提到的DB_NAME和INIT環境變數了吧,幹嘛用的呢:用於自定義你的環境。 基本上你可以通過 docker run的-e選項在容器中設置環境變數,啟動腳本會拿到環境變數,因此,如果你的DB名為some_project_dev, 你就可以這么運行容器:

$ docker run -i -t -P -v $PWD:/srv -e DB_NAME=some_project_dev symfony

INIT 環境變數就更強大了,它允許你啟動時運行指定的腳本。比如, 你有一個bin/setup腳本運行composer install命令並且設置資料庫schema:

#!/bin/bash

composer install

app/console doctrine:schema:update --force

用-e來運行它:

$ docker run -i -t -P \

-v $PWD:/srv \

-e DB_NAME=some_project_dev \

-e INIT=bin/setup

注意,-e選項可以在docer run中多次使用,看起來相當酷。另外,你的啟動腳本需要可執行許可權(chmod +x)。

現在我們通過curl發送請求到容器,來檢查一下是否所有的東西都像預期一樣工作。首先,我們需要取到Docker映射到容器的80埠的公共埠,用docker port命令:

$ docker port $(docker ps -aql 1) 80

0.0.0.0:49153

docker ps -aql 1 是個好用的命令,可以方便的檢索到最後一個容器的id, 在我們的例子中,Docker 把容器的80埠映射到了49153埠。我們 curl 一下看看。

$ curl http://localhost:49153

You are not allowed to access this file. Check app_dev.php for more information.

當我們不從localhost(譯者註:容器的localhost)訪問dev controller時,得到了Symfony的默認錯誤消息,這再正常不過了, 因為我們不是從容器內部發送 curl 請求的, 所以,可以安全的從前端控制器web/app_dev.php中移除這些行。

// This check prevents access to debug front controllers that are deployed by accident to proction servers.

// Feel free to remove this, extend it, or make something more sophisticated.

if (isset($_SERVER['HTTP_CLIENT_IP'])

|| isset($_SERVER['HTTP_X_FORWARDED_FOR'])

|| !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server')

) {

header('HTTP/1.0 403 Forbidden');

exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');

}

這些行阻止了任何從localhost以外的地方訪問dev controller。
現在再curl的時候就可以正常工作了,或者用瀏覽器訪問 http://localhost:49153/:

很容易吧! 現在我們可以快速的啟動、更新環境了,但還是有很多地方需要改進。

❷ docker 部署nginx、php-fpm錯誤記錄

最近要使用docker部署nginx和php-fpm服務,因為以前部署過無數次的nginx+php-fpm,本以為輕車熟路,很快搞定,但是在這個最熟的環節卻出了問題,耗費了小半天的時間,特把解決問題的過程記錄如下:(使用docker 部署 nginx,php-fpm的具體步驟網上較多,不再此進行詳述了)

問題:docker 部署完成 nginx,php-fpm後,運行服務,出現:recv() failed (104: Connection reset by peer) while reading response header from upstream

多次修改修改無果後,開始自己查找此錯誤:

證明php-fpm服務已經啟動了,但是未知原因php-fpm把鏈接中斷了。懷疑是底層tcp鏈接問題,使用netstat -s | grep reject,未發現異常鏈接。想不出啥原因,查看php-fpm error.log未發現有用信息

❸ Docker PHP 安裝擴展匯總

FROM php:7.2-fpm

Core, ctype, curl
date, dom
fileinfo, filter, ftp
hash
iconv
json
libxml
mbstring, mysqlnd
openssl
pcre, PDO, pdo_sqlite, Phar, posix
readline, Reflection, session, SimpleXML, sodium, SPL, sqlite3, standard
tokenizer
xml, xmlreader, xmlwriter
zlib

RUN docker-php-ext-install -j$(nproc) bcmath calendar exif gettext
sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm

RUN apt-get update &&
apt-get install -y --no-install-recommends libbz2-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-install -j$(nproc) bz2

RUN apt-get update &&
apt-get install -y --no-install-recommends libenchant-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-install -j$(nproc) enchant

RUN apt-get update &&
apt-get install -y --no-install-recommends libfreetype6-dev libjpeg62-turbo-dev libpng-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ &&
docker-php-ext-install -j$(nproc) gd

RUN apt-get update &&
apt-get install -y --no-install-recommends libgmp-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-install -j$(nproc) gmp

RUN apt-get update &&
apt-get install -y --no-install-recommends libxml2-dev libtidy-dev libxslt1-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-install -j$(nproc) soap wddx xmlrpc tidy xsl

RUN apt-get update &&
apt-get install -y --no-install-recommends libzip-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-install -j$(nproc) zip

RUN apt-get update &&
apt-get install -y --no-install-recommends libsnmp-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-install -j$(nproc) snmp

RUN apt-get update &&
apt-get install -y --no-install-recommends libpq-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-install -j$(nproc) pgsql pdo_pgsql

RUN apt-get update &&
apt-get install -y --no-install-recommends libpspell-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-install -j$(nproc) pspell

RUN apt-get update &&
apt-get install -y --no-install-recommends librecode-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-install -j$(nproc) recode

RUN apt-get update &&
apt-get install -y --no-install-recommends firebird-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-install -j$(nproc) pdo_firebird

RUN apt-get update &&
apt-get install -y --no-install-recommends freetds-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-configure pdo_dblib --with-libdir=lib/x86_64-linux-gnu &&
docker-php-ext-install -j$(nproc) pdo_dblib

RUN apt-get update &&
apt-get install -y --no-install-recommends libldap2-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu &&
docker-php-ext-install -j$(nproc) ldap

RUN apt-get update &&
apt-get install -y --no-install-recommends libc-client-dev libkrb5-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-configure imap --with-kerberos --with-imap-ssl &&
docker-php-ext-install -j$(nproc) imap

RUN apt-get update &&
apt-get install -y --no-install-recommends firebird-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-install -j$(nproc) interbase

RUN apt-get update &&
apt-get install -y --no-install-recommends libicu-dev &&
rm -r /var/lib/apt/lists/* &&
docker-php-ext-install -j$(nproc) intl

RUN apt-get update && \
apt-get install -y --no-install-recommends libmcrypt-dev &&
rm -r /var/lib/apt/lists/* &&
pecl install mcrypt-1.0.1 &&
docker-php-ext-enable mcrypt

RUN export CFLAGS=" PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" &&
apt-get update &&
apt-get install -y --no-install-recommends libmagickwand-dev &&
rm -rf /var/lib/apt/lists/* &&
pecl install imagick-3.4.3 &&
docker-php-ext-enable imagick

RUN apt-get update && \
apt-get install -y --no-install-recommends zlib1g-dev libmemcached-dev &&
rm -r /var/lib/apt/lists/* &&
pecl install memcached &&
docker-php-ext-enable memcached

RUN pecl install redis-4.0.1 && docker-php-ext-enable redis

RUN docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache

RUN set -ex;
docker-php-source extract;
{
echo '# https://github.com/docker-library/php/issues/103#issuecomment-271413933' ;
echo 'AC_DEFUN([PHP_ALWAYS_SHARED],[])dnl';
echo;
cat /usr/src/php/ext/odbc/config.m4;
} > temp.m4;
mv temp.m4 /usr/src/php/ext/odbc/config.m4;
apt-get update;
apt-get install -y --no-install-recommends unixodbc-dev;
rm -rf /var/lib/apt/lists/*;
docker-php-ext-configure odbc --with-unixODBC=shared,/usr;
docker-php-ext-configure pdo_odbc --with-pdo-odbc=unixODBC,/usr;
docker-php-ext-install odbc pdo_odbc;
docker-php-source delete

LABEL Author="Leo"
LABEL Version="1.0.25-fpm"
LABEL Description="PHP FPM 7.2 鏡像. All extensions."

❹ Docker php安裝擴展步驟詳解

Docker 中的PHP容器安裝擴展的方式有
1、通過pecl方式安裝
2、通過php 容器中自帶的幾個特殊命令來安裝,這些特殊命令可以在Dockerfile中的RUN命令中進行使用。

docker-php-source extract | delete
參數說明:

案例:

命令格式:
docker-php-ext-install 「源碼包目錄名」

注意點:

案例:

❺ Docker PHP 入門實踐(三)


在本教程的其餘部分,我們將基於 ThinkPHP 框架完成一個天氣查詢的應用。使用 天氣查詢-API文檔-開發指南-Web服務 API | 高德地圖API 的介面來實現我們的功能。把查詢數據緩存到 MySql 中,這樣就不用每次頻繁的請求第三方的介面了(有請求次數限制)


選擇高德開放平台-天氣查詢 API 主要是因為它是免費的。當然你也可以使用其他的第三方天氣查詢介面,看個人喜好。
該應用是一個非常簡單的 REST API 應用,主要實現兩個介面。



在我們進行應用編碼之前,首先使用 Docker 安裝並運行 ThinkPHP



ThinkPHP 是一個免費開源的,快速、簡單的面向對象的 輕量級PHP開發框架 ,是為了敏捷WEB應用開發和簡化企業應用開發而誕生的。ThinkPHP從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡代碼的同時,更注重易用性。遵循 Apache2 開源許可協議發布,意味著你可以免費使用ThinkPHP,甚至允許把你基於ThinkPHP開發的應用開源或商業產品發布/銷售 。

這就是為什麼我選擇它作為本教程的教學框架。我不想讓你因為一個框架而放棄,但我也不想從頭開始建立所有的東西,因為該教程的重點是Docker,而不是我們的PHP應用。


用Docker 創建 ThinkPHP 應用 實際上比用本地配置PHP環境所需的操作少。並且為我們還需要使用 Composer,多虧了Docker,我們甚至不需要在主機上安裝它。


首先打開你的終端,創建一個項目目錄。



並進入到該目錄中



現在使用[官方Composer Docker鏡像](https://hub.docker.com/_/composer/)安裝 ThinkPHP 。



如果你查看weather-app/目錄,你會看到 ThinkPHP 6 的項目目錄,如下所示:




我們的 docker 運行命令與第二章中的命令相似,但我們使用了不同的鏡像。我們沒有使用運行hello.php 腳本的 PHP 鏡像,而是使用了一個 Composer 鏡像。讓我們來看看有什麼變化。




項目創建完成後,我們需要添加幾個路由 URL 和 Controller 文件 。讓我們打開 weather-app 目錄下的 app/controller , 然後新建 Weather.php 文件,內容如下:



然後打開 weather-app 目錄下的 app/route , 在 app.php 文件中追加如下內容:




現在我們可以在 Docker 容器中運行我們的應用程序,只是為了驗證我們的程序是否運行正常,因為我們只添加了兩個路由 URL。打開命令行,運行。


現在,在瀏覽器中打開 http://localhost:38000/weather-app/public/index.php/weather/1,你應該看到一個空頁面,上面有以下文字:


那麼恭喜你,你剛剛已經成功地在 Docker 中運行了你的第一個 ThinkPHP 應用程序。


這次我們使用的docker run命令與我們用來運行 hello.php 腳本 和composer create-project ...的兩個命令不同。原因是這次我們想獲得包含 Apache 的最新版本的PHP,這樣我們就可以為我們的 Web 應用提供服務。讓我們更詳細地了解新增的命令部分。




你可以通過向終端發送一個 "中斷 "信號來停止和退出終端。在 windows 上,這可以通過按 Ctrl 和按c來實現。




運行你的新網路應用程序的另一個選擇是在 "Detached"模式中運行容器。這意味著你在終端將不會看到來自你的容器的輸出。這可以通過在我們之前的命令中添加-d標志來實現。




在分離模式下啟動容器後,你的終端將顯示新容器的完整ID--類似於a70d25c2a7cedae673f8ab...如果你想停止這個容器,你可以使用docker stop命令,用容器的ID告訴Docker。比如說



因為輸入整個ID是很麻煩的,如果你願意,Docker允許你只輸入前三個或更多的字元。




最後,我建議為你的容器命名。我們在本書後面的許多例子中都會這樣做,因為用名字來記住一個容器比用隨機分配的ID要容易得多,再加上ID是隨機的,所以每次你運行一個新版本的容器時,它都會得到一個新的ID。只要不是已經有一個同名的容器,名字就可以多次發出來。為了給我們的新應用容器命名,我們可以用傳入的--name標志重新創建它。



在使用docker run命令時,還有許多可用的選項,所以你可能想更詳細地閱讀文檔。在我們開發其餘的應用程序時,我們會涉及其中的一些選項。


現在我們要引入高德的天氣 SDK ,在使用該 SDK 之前你需要閱讀高德開放平台-天氣查詢的技術文檔,再添加 SDK 之前我們首先要確保所有現有的容器都停止了。



這個命令將列出所有正在運行的容器。你也可以通過添加-a標志來查看停止的容器。
如果有任何容器正在運行,那麼在我們繼續前進之前,使用docker stop 來停止它們。



該命令將在你的項目中裝新的軟體包。在這個過程中,你應該在終端看到一些類似這樣的輸出。



現在 SDK 已經安裝完畢,可以使用了。


我們將使用剛剛添加的高德天氣 SDK 來完善我們的業務邏輯,打開 controller 目錄下的 Weather.php 添加以下內容:




我們做了一些更新--主要是對引入天氣 API 初始化天氣類



我們的應用程序已經初步完成了向API傳遞一個真實的位置ID並返回一些數據。首先,使用這個高德位置查詢找到一個位置ID。我使用的是上海的ID進行測試。310000,當然你直接傳 上海 也是可以的。ok,讓我們再次運行Docker容器。



並在你的瀏覽器中訪問正在運行的應用程序,地址是http://localhost:38000/weather-app/public/index.php/weather/310000。你應該可以看到一個JSON數據,看起來像這樣。



你的 Docker 化的 PHP 應用程序現在正從外部數據源返回真實數據,並在Apache中提供服務,但你可能會注意到,它的速度並不快(我的頁面載入時間為1.92秒!)。
高德天氣 API 是一個免費的服務,其他國家可能無法訪問。為了解決這個問題,我們將把查詢的數據保存在我們自己的 MySQL 資料庫中,可以再下次訪問的時候可以快速地響應。這將極大地提高性能,下個章節我們將學習如何用 Docker 將 MySql 與 PHP 應用程序相結合。

❻ 怎麼使用Docker搭建PHP開發環境

在Docker流行之前,要搭建開發環境通常有兩種選擇:一種是使用wamp、xampp、mamp等集成開發環境安裝包,另外一種就是使用普通虛擬機來安裝linux伺服器,然後通過下載一鍵安裝包(如:lnmp)或者逐個安裝做需要的軟體。前者雖然簡單,但太不靈活,想要安裝額外的軟體或者版本會很麻煩或者乾脆不知道如何下手;後者除了費時費力,佔用本機資源過多,可能會導致系統運行緩慢,而且如果你忘了及時生成快照,一旦失誤,追悔莫及。
幸好,Docker來了!它簡單易用,靈活多變,方便迅捷,掃除了以上種種弊端。如果你想稍微詳細的認識下這位虛擬化界的明星,傳送門( 快速理解Docker )。
安裝Docker
平時開發的環境一般都是Mac或者windows,Linux暫時沒有研究,所以接下來只針對前兩者寫下步驟,這兩個平台,官方都推薦了兩種安裝方式:app和工具包(toolbox)。註:app方式對系統版本和配置會有一定要求,而且Windows需要你安裝微軟虛擬化產品Hyper-V,具體見app鏈接頁面。
APP
https://docs.docker.com/docke...
https://docs.docker.com/docke...
工具包
https://www.docker.com/proc...
以上方式本質上都會在你的系統中安裝docker-engine、docker-machine、docker-compose和VirtualBox(除了Windows的app方式)。因為docker高度依賴linux內核提供的cgroup,namespace 等特性和介面,所以mac和windows平台需要使用docker-machine和虛擬機在後台創建運行一個linux內核。
而我的安裝方式就是直接在 Mac 上使用brew,如果你未曾安裝brew,則在終端執行以下代碼:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安裝docker所需要的包:
brew install docker docker-machine docker-compose virtualbox
創建一個docker-machine:
docker-machine create -d virtualbox default
註:-d 指定使用virtualbox來創建default 為machine名稱
告訴主機如何找到docker-machine:
echo $(docker-machine env ) >> .zshrc
註:這里的.zshrc是我的用戶配置文件,如果你用bash,可以改為.bash_profile。
啟動docker-machine:
docker-machine start default Compose你的應用
docker-compose是用於定義和運行復雜Docker應用的工具。你可以在docker-compose.yml文件中定義一個多容器的應用,然後使用一條命令來啟動,然後所有預先定義好的操作都會被自動完成。
為了不重復造輪子,直接使用github上的第三方包。當然你也可以親自構建每一個你所需要的容器鏡像,然後用docker-compose.yml將所有容器組織起來運行,但這需要你具備一定的linux基礎和docker的運行機制和相關語法。
本人正在學習 laradock 這個基於Docker的開發環境包,然後根據自己的需要刪除了一些我認為不常用的部分、修改了部分配置以及增加了Elasticsearch容器,最終新開了自己的倉庫 DevDock 。當然,也推薦使用laradock。
我的倉庫目前支持的容器組合:
nginx , php-fpm , mysql , redis , mongo , apache2 , memcached , elasticsearch , workspace .
註:workspace和php-fpm一般會被其他容器所依賴,所以會自動運行,啟動時不必指定。
進入到你的應用的上級目錄:
git clone https://github.com/RystLee/DevDock.git
修改hosts
如果直接安裝啟動,是可以通過Docker IP : 192.168.99.100,就能直接訪問nginx的,但一般而言為了方便記憶,我們會去修改hosts文件,增加一條:
192.168.99.100 laravel.dev
修改你的nginx中的站點配置文件:
在DevDock目錄下找到nginx,修改sites目錄下的站點配置文件,通過修改本地的hosts來自定義域名,並在nginx容器中的sites文件夾下,修改相應的域名映射。
server_name laravel.dev
安裝啟動應用
cd DevDock docker-compose up -d nginx mysql ... # 後面跟上你想使用的容器即可
然後,耐心地等待開發環境自動搭建完成即可,如果中途出現錯誤,一般是因為GFW,網路會不太通暢,重新執行一兩次就好,完成之後,打開瀏覽器,訪問: http://laravel.dev 即可。

熱點內容
安卓數據線公頭是哪個 發布:2025-02-11 20:45:42 瀏覽:811
網址原始密碼是什麼 發布:2025-02-11 20:33:52 瀏覽:71
怎麼創建伺服器我的世界網易 發布:2025-02-11 20:18:36 瀏覽:466
伺服器電腦與客戶端的連接 發布:2025-02-11 20:18:32 瀏覽:35
安卓哪個系統最流暢好用 發布:2025-02-11 20:17:44 瀏覽:878
蘋果平板安卓模擬器哪個好用 發布:2025-02-11 20:17:01 瀏覽:833
手機谷歌伺服器怎麼樣 發布:2025-02-11 20:08:37 瀏覽:220
編譯簡單游戲 發布:2025-02-11 20:02:10 瀏覽:865
php測評系統 發布:2025-02-11 19:42:58 瀏覽:293
github不能上傳 發布:2025-02-11 19:26:44 瀏覽:348