Docker六脉神剑(四) 使用Docker-Compose进行服务编排搭建lnmp环境

2020-07-21 15:48:01 浏览数 (1)

阅读本文你将知道

  • docker-compose的配置文件编写
  • dockerfile的编写

Docker-Compose提要

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose的工程配置文件默认为docker-compose.yml,使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。 Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(projectDocker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。

Docker-Compose安装

  • ubuntu
代码语言:javascript复制
apt-get update
apt-get install docker-compose
  • mac
代码语言:javascript复制
安装图形化工具, 默认应该带的 如果没有使用brew安装
  • windows
代码语言:javascript复制
安装图形化工具, 默认应该带的

编写docker-compose.yml及容器相关dockerfile

  • 先相关创建项目目录
代码语言:javascript复制
// 创建php-fpm/nginx的配置文件 目录 用于映射
// 手动构建Dockerfile
mkdir ~/docker                  
mkdir ~/docker/aoppp
mkdir ~/docker/aoppp/nginx
touch ~/docker/aoppp/nginx/nginx.conf
mkdir ~/docker/aoppp/php-fpm
touch ~/docker/aoppp/php-fpm/Dockerfile
touch ~/docker/aoppp/php-fpm/php-ini-overrides.ini
touch ~/docker/aoppp/docker-compose.yml
  • docker-compose.yml
代码语言:javascript复制
version: "3.1"
services:
    mysql:
      image: mysql:5.7
      container_name: php-longing-mysql
      working_dir: /application
      volumes:
        - .:/application
      environment:
        - MYSQL_ROOT_PASSWORD=1234567
        - MYSQL_DATABASE=test
        - MYSQL_USER=test
        - MYSQL_PASSWORD=1234567
      ports:
        - "8086:3306"

    webserver:
      image: nginx:alpine
      container_name: php-longing-webserver
      working_dir: /application
      volumes:
          - ./www:/application
          - ./aoppp/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
       - "81:80"

    php-fpm:
      build: aoppp/php-fpm
      container_name: php-longing-php-fpm
      working_dir: /application
      volumes:
        - ./www:/application
        - ./aoppp/php-fpm/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini
  • nginx.conf
代码语言:javascript复制
server {
    listen 80;

    client_max_body_size 108M;

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

    server_name www.longing.com;

    root /application/bbs/public;
    index index.php;

    if (!-e $request_filename) {
        rewrite ^.*$ /index.php last;
    }

    location ~ .php$ {
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        include fastcgi_params;
    }
    
}
  • Dockerfile
代码语言:javascript复制
FROM phpdockerio/php72-fpm:latest
WORKDIR "/application"

# Fix debconf warnings upon build
ARG DEBIAN_FRONTEND=noninteractive

# Install selected extensions and other stuff
RUN apt-get update 
    && apt-get -y --no-install-recommends install  php-memcached php7.2-mysql php7.2-pgsql php-redis php7.2-sqlite3 php-xdebug php7.2-bz2 php7.2-gd php-igbinary php7.2-imap php-ssh2 php-yaml 
    && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*

# Install git
RUN apt-get update 
    && apt-get -y install git 
    && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*

# Install vim
RUN apt-get update 
    && apt-get -y install vim 
    && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
  • php-ini-overrides.ini
代码语言:javascript复制
upload_max_filesize = 100M
post_max_size = 108M
docker-compose操作

docker-compose.yml文件已经完成,相关端口、目录映射,Dockerfile也已经可以了。那这个时候需要使用docker-compose来启动这个项目

首先进入docker-compose.yml所在的目录,然后运行 docker-compose up启动项目

  • docker-compose相关命令
代码语言:javascript复制
docker-compose up   // 直接启动 可以看到日志输出
docker-compose up -d // 后台启动
docker-compose stop // 停止项目
docker-compose restart // 重启项目
docker-compose down  // 会停掉容器,并删除掉容器

容器已经启动成功了,然后我们安装一个laravel项目来测试

配置Laravel项目启动实现数据库查询

博主这边打算配置Laravel来进行数据库查询, 所以我这边进入容器利用composer安装。

  • composer阿里镜像
代码语言:javascript复制
# 进入容器
docker exec -it php-longing-php-fpm bash

# 配置阿里云镜像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
  • 直接创建laravel项目
代码语言:javascript复制
composer create-project --prefer-dist laravel/laravel bbs "5.6.*"
  • Laravel配置数据库连接
代码语言:javascript复制
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=test
DB_PASSWORD=1234567
  • 编写laravel路由
代码语言:javascript复制
// routers/web.php

Route::get('/test', function () {
   $res = DB::table('test')->select()->get();
   dd($res);
});

我已经利用navicattest表添加数据了, 已经?

0 人点赞