2019年3月

适用于对docker有一定了解的朋友,小白请先仔细阅读官方文档!
作为应用程序,我们通常需要依赖于多种外部服务,比如数据库、缓存服务等等。
Docker-compose就是在Docker容器的基础上,提供了统一的容器编排语言,可以让你更轻松的利用Docker构建你的应用环境。

docker-compose.yml文件语法语法

image 使用的镜像
build 指定Dockerfile构建
command 启动执行命令
links 链接其他容器    
ports 端口映射
expose 暴露端口
volumes 挂载路径
volumes_from 从容器挂载
environment 环境变量
  1. 编写dockerfile(自定义镜像)
  2. 编写docker-compose.yml(可以不依赖Dockerfile 使用官方镜像)

常用命令

构建容器 docker-compose up -d
查看容器 docker-compose ps
进入容器 docker exec -it 容器名 /bin/bash
关闭所有 docker-compose  down

php-fpm Dockerfile 示例 可以自定义扩展

FROM php:7.1-fpm-alpine

# apk
RUN apk --update add \
        autoconf \
        build-base \
        linux-headers \
        libaio-dev \
        zlib-dev \
        curl \
        git \
        subversion \
        freetype-dev \
        libjpeg-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
        libtool \
        libbz2 \
        bzip2 \
        bzip2-dev \
        libstdc++ \
        libxslt-dev \
        openldap-dev \
        imagemagick-dev \
        make \
        unzip \
        wget \
        libmemcached-dev

# PHP Core Extensions
RUN docker-php-ext-install \
        bcmath \
        pdo_mysql \
        mysqli \
        pcntl \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install gd

# PECL Extensions
RUN pecl install redis-4.2.0 \
    && pecl install mongodb-1.5.3 \
    && pecl install memcached-3.1.3 \
    && pecl install swoole-4.3.1 \
    && docker-php-ext-enable redis mongodb memcached swoole

# Delete
RUN apk del build-base \
        linux-headers \
        libaio-dev \
    && rm -rf /var/cache/apk/* \
    && mkdir /data \
    && chmod -R 777 /data

VOLUME /var/www
WORKDIR /var/www

EXPOSE 9000
CMD ["php-fpm"]

docker-compose.yml示例

version: "3.0"
services:
  nginx:
    image: nginx:alpine
    ports: 
      - 80:80
      - 443:443
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ../:/var/www

  php-fpm:
    build: ./php-fpm
    ports:
        - 9000:9000
    volumes:
      - ./php-fpm/php.ini:/usr/local/etc/php/php.ini
      - ./php-fpm/www.conf:/usr/local/etc/php-fpm.d/www.conf
      - ../:/var/www

  mysql:
    image: mysql:5.7
    ports:
      - 3306:3306
    volumes:
      - ./mysql/data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=123456

  redis:
    image: redis:5.0-alpine
    ports:
      - 6379:6379
    volumes:
      - ./redis/data:/data
      #- ./redis/redis.conf:/usr/local/etc/redis/redis.conf

  mongo:
    image: mongo
    ports: 
      - 27017:27017
    volumes:
      - ./mongo/data:/data/db
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123456