Ubuntu18.10中使用Docker搭建LNMP環(huán)境-docker-compose進階版

docker

在上一篇在中,已經完成了手工搭建的多容器 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í)行的对竣。

image.png

切到瀏覽器,登錄下試試榜配,可以看到已經能夠登錄了否纬。

然后 phpinfo 中也已經有了 swoole,那么蛋褥,大功告成烦味。


logged in
swoole

結尾

基于 docker-compose 搭建管理 lnmp 環(huán)境到此結束,接下來再用現(xiàn)在的環(huán)境搞點事情,好好研究下 laravel 和 swoole谬俄。

然后有個問題,既然在這里可以單獨運行一個容器來處理 artisan , 那么在上一篇手動搭建的版本中是不是也可以這樣處理呢弃理?

源文件放在了 [ github ]

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末溃论,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子痘昌,更是在濱河造成了極大的恐慌钥勋,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辆苔,死亡現(xiàn)場離奇詭異算灸,居然都是意外死亡,警方通過查閱死者的電腦和手機驻啤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門菲驴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人骑冗,你說我怎么就攤上這事赊瞬。” “怎么了贼涩?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵巧涧,是天一觀的道長。 經常有香客問我遥倦,道長谤绳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任袒哥,我火速辦了婚禮缩筛,結果婚禮上,老公的妹妹穿的比我還像新娘统诺。我一直安慰自己歪脏,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布粮呢。 她就那樣靜靜地躺著婿失,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啄寡。 梳的紋絲不亂的頭發(fā)上豪硅,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音挺物,去河邊找鬼懒浮。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的砚著。 我是一名探鬼主播次伶,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稽穆!你這毒婦竟也來了冠王?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤舌镶,失蹤者是張志新(化名)和其女友劉穎柱彻,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體餐胀,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡哟楷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了否灾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卖擅。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坟冲,靈堂內的尸體忽然破棺而出磨镶,到底是詐尸還是另有隱情,我是刑警寧澤健提,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布琳猫,位于F島的核電站,受9級特大地震影響私痹,放射性物質發(fā)生泄漏脐嫂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一紊遵、第九天 我趴在偏房一處隱蔽的房頂上張望账千。 院中可真熱鬧,春花似錦暗膜、人聲如沸匀奏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞄沙。三九已至荠锭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霹粥。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工躏率, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赊淑,地道東北人初嘹。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親焕阿。 傳聞我的和親對象是個殘疾皇子咪啡,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容