Ubuntu18.10中使用Docker搭建LNMP环境-docker-compose进阶版

docker

在上一篇在中,已经完成了手工搭建的多容器 LNMP 开发环境,但是在实际使用起来还是存在一些问题。例如:composer 命令太长;无法使用 laravel 框架的 artisan 功能以及环境迁移非常不便等。

为了解决这些麻烦,这次就学习下使用 docker-compose 来定制和管理自己的环境。
[ 点我跳转上一篇 ]

注意事项:

  • dockerfile 写不对的话,执行docker-compose up经常有启动后容器挂掉的情况,然后又看不到具体报错,这个时候可以去执行下 docker build -t php-fpm:v1.0 .单独构建环境,如果出错了就可以快速查找。

  • php.ini 修改后需要重启容器,否则不生效,在容器内也查看不到新增的修改。


简介

dockerfile :

用来构建镜像的工具,记录和包含安装运行的环境和程序代码等。docker 官方的镜像也是基于 dockerfile 文件构建的。详情可见 [ docker-library ]

docker-compose :

是 docker 多容器管理器,可以把已有容器编排为服务并提供更便捷的操作方式。

有了这两个工具后,我们就可以对环境实现快速重置或迁移了。


准备工作

创建一下结构的文件夹,当然也可以根据自己的喜好来。
这里把 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 的配置文件可以从之前的环境中复制出来,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 文件夹下执行 docker-compose up 即可,该命令不会在后台执行,当命令行中断或终端关闭的时候,服务也就停了,后台执行可以使用 -d 后缀。

另外也可以用 docker-compose stop 来停止,docker-compose down 停止并删除。

运行 docker-compose run --rm composer -v 查看 composer 版本,虽然命令还是有点长,但比之前简洁了很多。

docker-compose run --rm composer create-project laravel/laravel laravel 创建一个新的 laravel 项目。

然后就是和上一篇一样的流程,new db -> make:auth -> migrate -> make:seeder -> dump-autoload -> db:seed。
执行 dump-autoload 时,需要指定一下路径 -v $pwd/www/laravel composer dump-autoload

ps:这里在后期使用时发现还有点问题,于是在 windows 下又折腾了一把,通过 $pwd/路径进行挂载是可以执行的。

image.png

切到浏览器,登录下试试,可以看到已经能够登录了。

然后 phpinfo 中也已经有了 swoole,那么,大功告成。


logged in
swoole

结尾

基于 docker-compose 搭建管理 lnmp 环境到此结束,接下来再用现在的环境搞点事情,好好研究下 laravel 和 swoole。

然后有个问题,既然在这里可以单独运行一个容器来处理 artisan , 那么在上一篇手动搭建的版本中是不是也可以这样处理呢?

源文件放在了 [ github ]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容