为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
Docker

webp

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                    = 3306default-character-set   = utf8mb4

[mysqld]
user                    = mysql
port                    = 3306sql_mode                = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLESdefault-storage-engine  = InnoDBdefault-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         = 3slow-query-log-file     = /var/lib/mysql/mysql.slow.log
log-error               = /var/lib/mysql/mysql.error.logdefault-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# 安装 swooleRUN 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/路径进行挂载是可以执行的。

webp

image.png


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

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


webp

logged in

webp

swoole


结尾

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

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



作者:南瓜方糖
链接:https://www.jianshu.com/p/69701a8fa0b8


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
51
获赞与收藏
178

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消