在上一篇在中,已經完成了手工搭建的多容器 LNMP 開發(fā)環(huán)境伴找,但是在實際使用起來還是存在一些問題。例如:composer 命令太長;無法使用 laravel 框架的 artisan 功能以及環(huán)境遷移非常不便等镐侯。
為了解決這些麻煩,這次就學習下使用 docker-compose
來定制和管理自己的環(huán)境驶冒。
[ 點我跳轉上一篇 ]
注意事項:
dockerfile 寫不對的話苟翻,執(zhí)行
docker-compose up
經常有啟動后容器掛掉的情況,然后又看不到具體報錯骗污,這個時候可以去執(zhí)行下docker build -t php-fpm:v1.0 .
單獨構建環(huán)境崇猫,如果出錯了就可以快速查找。php.ini 修改后需要重啟容器需忿,否則不生效诅炉,在容器內也查看不到新增的修改。
簡介
dockerfile :
用來構建鏡像的工具屋厘,記錄和包含安裝運行的環(huán)境和程序代碼等涕烧。docker 官方的鏡像也是基于 dockerfile 文件構建的。詳情可見 [ docker-library ] 汗洒。
docker-compose :
是 docker 多容器管理器议纯,可以把已有容器編排為服務并提供更便捷的操作方式。
有了這兩個工具后溢谤,我們就可以對環(huán)境實現(xiàn)快速重置或遷移了瞻凤。
準備工作
創(chuàng)建一下結構的文件夾憨攒,當然也可以根據(jù)自己的喜好來。
這里把 php 換成了 7.2 版本阀参,然后 mysql 也換成了 8.0肝集,然后本地的配置文件修改后,需要重啟服務才能生效蛛壳。
docker-compose-lnmp/
├── docker-compose.yml #docker-compose 文件
├── service #存放相關容器的配置
│ ├── mysql
│ │ ├── config
│ │ │ └── mysqld.cnf
│ │ ├── data
│ │ └── log
│ ├── nginx
│ │ ├── config
│ │ │ └── default.conf
│ │ └── log
│ ├── php7.2
│ │ ├── config
│ │ │ └── php7.2
│ │ │ ├── php-fpm.d
│ │ │ │ └── www.conf
│ │ │ ├── php.ini
│ │ └── log
│ │ └── Dockerfile
└── www
└── index.php
php 和 nginx 的配置文件可以從之前的環(huán)境中復制出來杏瞻,mysql 的配置文件內容如下:
[client]
port = 3306
default-character-set = utf8mb4
[mysqld]
user = mysql
port = 3306
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
default-storage-engine = InnoDB
default-authentication-plugin = mysql_native_password
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
disable-log-bin
skip-character-set-client-handshake
explicit_defaults_for_timestamp
slow_query_log
long_query_time = 3
slow-query-log-file = /var/lib/mysql/mysql.slow.log
log-error = /var/lib/mysql/mysql.error.log
default-time-zone = '+8:00'
[mysql]
default-character-set = utf8mb4
Dockerfile 文件編寫
這里就先只有 php 用了dockerfile,而且只安裝了 pdo_mysql 和 swoole炕吸,如果需要 redis 或其他擴展再加上去就可以了伐憾。
FROM php:7.2-fpm
MAINTAINER yf-wu@qq.com
RUN apt-get update && apt-get install -y wget libfreetype6 libfreetype6-dev libmcrypt-dev libmcrypt4 libcurl3-dev \
&& apt install -y build-essential libprotobuf-dev libboost-dev openssl protobuf-compiler \
&& docker-php-ext-install pdo pdo_mysql
# 安裝 swoole
RUN wget https://github.com/swoole/swoole-src/archive/v4.2.2.tar.gz -O swoole.tar.gz \
&& mkdir -p swoole \
&& tar -xf swoole.tar.gz -C swoole --strip-components=1 \
&& rm swoole.tar.gz \
&& cd swoole \
&& phpize \
&& ./configure \
&& make -j$(nproc) \
&& make install \
&& cd .. \
&& rm -r swoole \
&& docker-php-ext-enable swoole
docker-compose 文件編寫
version說明
這個東西其實挺容易看明白的,有哪些定義看不懂也比較容易查到資料赫模,可以參考這里
[ 點我 ]
version: '3.7'
services:
mysql:
image: mysql:8.0
volumes:
- ./service/mysql/config/mysqld.cnf:/etc/mysql/conf.d/mysql.cnf:ro
- ./service/mysql/data:/var/lib/mysql/:rw
- ./service/mysql/log/:/var/log/mysql/:rw
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
php-fpm-7-2:
#image: php:7.2-fpm
build: ./service/php7.2/
volumes:
- ./www/:/var/www/html/
- ./service/php7.2/config/php.ini:/usr/local/etc/php/php.ini:rw
- ./service/php7.2/php-fpm.d/www.conf:/usr/local/etc/php-fpm.d/www.conf:rw
environment:
- TZ=Asia/Shanghai
depends_on:
- mysql
links:
- mysql:mysql
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./www/:/usr/share/nginx/html/:rw
- ./service/nginx/config:/etc/nginx/conf.d/
- ./service/nginx/log/:/var/log/nginx/:rw
depends_on:
- php-fpm-7-2
links:
- php-fpm-7-2:php-fpm-7-2
composer:
image: composer
volumes:
- ./www:/app
depends_on:
- php-fpm-7-2
啟動服務
文件編寫完成后树肃,在 docker-compose-lnmp 文件夾下執(zhí)行 docker-compose up
即可,該命令不會在后臺執(zhí)行瀑罗,當命令行中斷或終端關閉的時候胸嘴,服務也就停了,后臺執(zhí)行可以使用 -d
后綴斩祭。
另外也可以用 docker-compose stop
來停止劣像,docker-compose down
停止并刪除。
運行 docker-compose run --rm composer -v
查看 composer 版本摧玫,雖然命令還是有點長耳奕,但比之前簡潔了很多。
docker-compose run --rm composer create-project laravel/laravel laravel
創(chuàng)建一個新的 laravel 項目诬像。
然后就是和上一篇一樣的流程屋群,new db -> make:auth -> migrate -> make:seeder -> dump-autoload -> db:seed。
執(zhí)行 dump-autoload
時坏挠,需要指定一下路徑 -v $pwd/www/laravel composer dump-autoload
芍躏。
ps:
這里在后期使用時發(fā)現(xiàn)還有點問題,于是在 windows 下又折騰了一把降狠,通過 $pwd/路徑
進行掛載是可以執(zhí)行的对竣。
切到瀏覽器,登錄下試試榜配,可以看到已經能夠登錄了否纬。
然后 phpinfo 中也已經有了 swoole,那么蛋褥,大功告成烦味。
結尾
基于 docker-compose 搭建管理 lnmp 環(huán)境到此結束,接下來再用現(xiàn)在的環(huán)境搞點事情,好好研究下 laravel 和 swoole谬俄。
然后有個問題,既然在這里可以單獨運行一個容器來處理 artisan , 那么在上一篇手動搭建的版本中是不是也可以這樣處理呢弃理?
源文件放在了 [ github ]