5 Oct 2019

docker-5-容器化应用

定义服务

db - 定义数据库服务

version: '2'
services:
 db:
  image: mariadb:10.1
  environment:
   MYSQL_ROOT_PASSWORD: "root"
   MYSQL_DATABASE: "app"
   MYSQL_USER: "app"
   MYSQL_PASSWORD: "123123"
  volumes:
   - db:/var/lib/mysql
volumes:
 db:
  driver: local

db - 测试数据库服务

我们在db 服务里面创建一个test数据库,然后删除该服务,然后再启动该服务,发现还有test数据,说明就是夹在数据卷造成的。

php - 定义 php 服务

 php:
  image: php:7.0-fpm
  volumes: 
   - ./app:/mnt/app

web - 定义 nginx 服务

version: '2'
services:
 web:
  image: nginx:1.11.1
  ports:
   - "8080:80"
  depends_on:
   - php
  volumes_from:
   - php
  volumes:
   - ./images/nginx/config:/etc/nginx/conf.d
 php:
  image: php:7.0-fpm
  volumes: 
   - ./app:/mnt/app
 db:
  image: mariadb:10.1
  environment:
   MYSQL_ROOT_PASSWORD: "root"
   MYSQL_DATABASE: "app"
   MYSQL_USER: "app"
   MYSQL_PASSWORD: "123123"
  volumes:
   - db:/var/lib/mysql
volumes:
 db:
  driver: local

nginx配置文件为 /images/nginx/config/default.conf

server{
 listen 80;
 server_name localhost;
 root /mnt/app;
 index index.php index.html index.htm;
 location / {
  index index.php index.html index.htm;
  try_files $uri $uri/ /index.php?$query_string;
 }
 location ~ \.php$ {
  fastcgi_pass php:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
 }
}

php文件为 /app/phpinfo.php

<?php phpinfo(); ?>

Build

创建自己的服务

以上我们再compose里面都是用的现成的镜像,但是大多时候我们需要定制自己的镜像。

我们先创建一个基于php自定义配置的镜像,放在 /images/php/Dockerfile

version: '2'
services:
 web:
  image: nginx:1.11.1
  ports:
   - "8080:80"
  depends_on:
   - php
  volumes_from:
   - php
  volumes:
   - ./images/nginx/config:/etc/nginx/conf.d
 php:
  build:
   context: ./images/php
   dockerfile: Dockerfile
  volumes: 
   - ./app:/mnt/app
 db:
  image: mariadb:10.1
  environment:
   MYSQL_ROOT_PASSWORD: "root"
   MYSQL_DATABASE: "app"
   MYSQL_USER: "app"
   MYSQL_PASSWORD: "123123"
  volumes:
   - db:/var/lib/mysql
volumes:
 db:
  driver: local

php自定义配置文件放在 /images/php/config/php.ini

memory_limt = 256M
post_max_size = 100M
upload_max_filesize = 100M

Dockerfile放在 /images/php/Dockerfile

FROM php:7.0-fpm
MAINTAINER andy <auden.sh@163.com>

COPY ./config/php.ini /usr/local/etc/php/conf.d/

先docker-compose build ,再 docker-compose up -d

安装php 模块

我们修改Dockerfile文件内容如下

FROM php:7.0-fpm
MAINTAINER andy <auden.sh@163.com>

RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev \ 
  && rm -rf /var/lib/apt/lists/* \
  && docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
  && docker-php-ext-install gd pdo_mysql zip opcache

COPY ./config/php.ini /usr/local/etc/php/conf.d/
COPY ./config/opcache-recommended.ini /usr/local/etc/php/conf.d/

我们修改配置文件 opcache-recommended.ini 如下

opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

工具容器

创建工具包容器

在开发应用的时候,我们可能会遇到一些工具,比如说php的包管理工具composer,管理nodejs的工具npm,这些工具我们可以单独的放在一个容器里面,要使用他们的时候我们可以进入到带这些工具的容器里面,然后执行一些任务。

我们修改根目录下的docker-compose.yml文件内容,增加console服务

version: '2'
services:
 console:
  build:
   context: ./images/console
   dockerfile: Dockerfile
  volumes_from:
   - php 
  tty: true
 web:
  image: nginx:1.11.1
  ports:
   - "8080:80"
  depends_on:
   - php
  volumes_from:
   - php
  volumes:
   - ./images/nginx/config:/etc/nginx/conf.d
 php:
  build:
   context: ./images/php
   dockerfile: Dockerfile
  volumes: 
   - ./app:/mnt/app
 db:
  image: mariadb:10.1
  environment:
   MYSQL_ROOT_PASSWORD: "root"
   MYSQL_DATABASE: "app"
   MYSQL_USER: "app"
   MYSQL_PASSWORD: "123123"
  volumes:
   - db:/var/lib/mysql
volumes:
 db:
  driver: local

console服务的dockerfile放在/images/console目录下

安装配置git,composer

RUN apt-get update && apt-get install -y git curl libfreetype-dev \
  && rm -rf /var/lib/apt/lists/* \
  && pecl install zip \ 
  && docker-php-ext-enable zip
  
剩余的不再描述

docker会按照console再dockerfile里面的配置生成新的镜像,在这个镜像里面可以安装并且配置我们需要使用的工具

运行

安装运行Laravel项目

没啥好介绍的


Tags:
Stats:
0 comments