Docker使用及dnmp构建

Docker 本地镜像管理

  1. Docker 列出本地镜像

    docker images
    
    #列出所有镜像,包含中间层镜像  -a 列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层)
    docker images -a
    
    # Docker 查看虚悬镜像列表 -f 显示满足条件的镜像
    docker images -f dangling=true
    
    field 释意
    REPOSITORY 表示镜像的仓库源
    TAG 镜像的标签
    IMAGE ID 镜像ID
    CREATED 镜像创建时间
    SIZE 镜像大小

    虚悬镜像

    这个镜像原本是有镜像名和标签的,原来为 mongo:3.2 ,随着官方镜像维护,发 布了新版本后,重新 docker pull mongo:3.2 时, mongo:3.2 这个镜像名被 转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消,从而成为了 。除了 docker pull 可能导致这种情况, docker build 也同样可 以导致这种现象。由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签 均为 的镜像。这类无标签镜像也被称为 虚悬镜像(dangling image)

  2. 删除本地一个或多少镜像

    docker rmi 镜像ID
    
    # -f 强制删除
    docker rmi -f 镜像ID
    
    #删除全部
    docker rmi `docker images ‐q`
    
    #删除所有虚悬镜像
    docker rmi $(docker images -q -f dangling=true)
    
  3. 标记本地镜像,将其归入某一仓库

    docker tag ubuntu:15.10 runoob/ubuntu:v3
    
  4. 使用 Dockerfile 创建镜像

    1. Dockerfile 构建

      vi Dockerfile
      
      # Base images 基础镜像
      FROM centos
      
      #MAINTAINER 维护者信息
      MAINTAINER test 
      
      #ENV 设置环境变量
      ENV PATH /usr/local/nginx/sbin:$PATH
      
      #ADD  文件放在当前目录下,拷过去会自动解压
      ADD nginx-1.8.0.tar.gz /usr/local/  
      ADD epel-release-latest-7.noarch.rpm /usr/local/  
      
      #RUN 执行以下命令 
      RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
      RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
      RUN useradd -s /sbin/nologin -M www
      
      #WORKDIR 相当于cd
      WORKDIR /usr/local/nginx-1.8.0 
      
      RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
      #
      RUN echo "daemon off;" >> /etc/nginx.conf
      
      #EXPOSE 映射端口
      EXPOSE 80
      
      #CMD 运行以下命令
      CMD ["nginx"]
      

      CMD ["./sbin/nginx","-g","daemon off;"]
      /sbin/nginx 启动nginx服务;
      -g: 设置配置文件外的全局指令,也就是启动nginx时设置了daemon off参数,
      守护进程是指脱离终端并且在后台运行的进程。这里设置为off,也就是不让它在后台运行。为什么我们启动nginx容器时不让它在后台运行呢,docker 容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,如果docker 容器pid挂了,那么docker容器便会直接退出。

    2. 构建镜像

      #指定本地文件构建
      docker build -t test/lnmp:1.0 -f ./test/Dockerfile .
      
      field 释意
      -t 构建后的镜像名称
      -f 指定Dockerfiile文件位置
      . docker引擎镜像构建过程中的上下文环境的目录
      #使用URL构建
      docker build github.com/creack/docker-firefox
      
  5. 将指定镜像保存成 tar 归档文件

    # -o 输出到的文件
    docker save -o test.tar test/ubuntu:v1
    
  6. 导入使用 docker save 命令导出的镜像

    # -i 指定导入的文件
    docker load -i test.tar
    
  7. 从归档文件中创建镜像

    docker import test.tar test/ubuntu:v2
    
  8. 查看指定镜像的创建历史

    ocker history test/ubuntu:v2
    

镜像仓库仓库地址 docker docs

  1. 登陆/退出 命令

    1. 登陆到Docker Hub

      docker login -u 用户名 -p 密码
      
    2. 退出Docker Hub

      docker logout
      
  2. 从镜像仓库中拉取或者更新指定镜像

    docker pull ubuntu:18.04
    
  3. 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

    docker push test/ubuntu:v2
    
  4. 从Docker Hub查找

    # -s 列出收藏数不小于10的镜像
    docker search -s 10 nginx
    
    field 释意
    NAME 镜像仓库源的名称
    DESCRIPTION 镜像的描述
    OFFICIAL 是否docker官方发布

Docker 容器操作

  1. 列出容器

    docker ps
    
    #列出所有容器
    docker ps -a
    
    field 释意
    CONTAINER ID 表示容器 ID
    IMAGE 表示运行的镜像,镜像和容器的关系,就像是面向对象程序设计中类和实例一样,镜像是静态的定义,容器是运行时的实体
    COMMAND 表示表示容器启动后运行的命令 注意pid=1进程是docker容器是否正在运行的依据
    CREATED 表示运行的时间
    STATUS created(已创建)restarting(重启中)running(运行中)removing(迁移中)paused(暂停)exited(停止)dead(死亡)
    PORTS 表示可以通过指定的端口号来访问
    NAMES 表示对镜像容器的描述
  2. 获取容器/镜像的元数据

    docker inspect test/ubuntu:v2
    
    //获取指定容器的ip
    docker inspect --format '{{ .NetworkSettings.IPAddress }}' 68f0d84be6ad
    
    //获取所有容器ip
    docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
    
  3. 查看容器中运行的进程信息,支持 ps 命令参数。

    docker top 容器ID
    
    #查看所有运行容器的进程信息
    for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
    
  4. 将文件系统作为一个tar归档文件导出到STDOUT。

    # 将id为a404c6c174a2的容器按日期保存为tar文件 -o 将输入内容写到文件
    docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2
    
  5. 获取容器的日志

    # 跟踪查看id为a404c6c174a2的容器的日志输出  -f 跟踪日志输出
    docker logs -f a404c6c174a2
    #查看容器id为a404c6c174a2的容器从2019年10月30日后的最新10条日志
    docker logs --since="2019-10-30" --tail=10 a404c6c174a2
    
  6. 列出指定的容器的端口映射

    docker port a404c6c174a2
    

容器生命周期管理

  1. 创建一个新的容器并运行一个命令

    # -i 以交互模式运行容器 -t 为容器重新分配一个伪输入终端 --name  为容器指定一个名称 -p 指定端口映射:主机(宿主)端口:容器端口 
    docker run -it --name mynginx -p 80:8080 nginx:latest /bin/bash
    
    # -d 后台运行容器 主机的目录/data 映射到容器的/data
    docker run -d --name mynginx -p 80:8080 -v /data:/data nginx:latest /bin/bash
    
    field 释意
    -a stdin 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项
    -d 后台运行容器,并返回容器ID
    -i 以交互模式运行容器,通常与 -t 同时使用
    -P 随机端口映射,容器内部端口随机映射到主机的高端口
    -p 指定端口映射,格式为:主机(宿主)端口:容器端口
    -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用
    --name mynginx 为容器指定一个名称
    --dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致
    --dns-search example.com 指定容器DNS搜索域名,默认和宿主一致
    -h "mars" 指定容器的hostname
    -e MYSQL_ROOT_PASSWORD=123456 设置环境变量
    --env-file=[] 从指定文件读入环境变量
    --cpuset="0-2" or --cpuset="0,1,2" 绑定容器到指定CPU运行
    -m 设置容器使用内存最大值
    --net="bridge" 指定容器的网络连接类型; host模式容器内看到的网卡ip是宿主机上的ip;container模式多个容器使用共同的网络看到的ip是一样的与宿主机不同;none模式这种模式下不会配置任何网络;bridge模式宿主机上的所有容器会在同一个网段下,相互之间是可以通信的
    --link=[] 可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,解除了容器之间通信对容器IP的依赖
    --expose=[] 开放一个端口或一组端口
    --volume , -v 绑定一个卷
    /bin/bash 这将在容器内启动bash shell
    --privileged=true 给容器特权,在挂载目录后容器可以访问目录以下的文件或者目录
  2. 创建一个新的容器但不启动它 用法同 docker run

    docker create  --name mynginx  nginx:latest
    
  3. 启动/停止/重启

    #启动已被停止的容器mynginx
    docker start mynginx
    
    #停止运行中的容器mynginx
    docker stop mynginx
    
    #重启容器mynginx
    docker restart mynginx
    
  4. 暂停/恢复 容器中所有的进程

    #暂停数据库容器db01提供服务
    docker pause db01
    
    #恢复数据库容器db01提供服务
    docker unpause db01
    
  5. 在运行的容器中执行命令

    #在容器 mynginx 中开启一个交互模式的终端
    docker exec -it  mynginx /bin/bash 
    
    #在容器 mynginx 中以交互模式执行容器内 /root/start.sh 脚本
    docker exec -it mynginx /bin/sh /root/test.sh
    
  6. 杀掉一个运行中的容器

    # -s 向容器发送一个信号
    docker kill -s KILL mynginx
    
  7. 删除一个或多少容器

    # 强制删除容器db01、db02 -f 通过SIGKILL信号强制删除一个运行中的容器
    docker rm -f db01 db02
    
    # 移除容器nginx01对容器db01的连接,连接名db
    docker rm -l db 
    
    # 删除容器nginx01,并删除容器挂载的数据卷
    docker rm -v nginx01
    

容器rootfs命令

  1. 从容器创建一个新的镜像

    # -a 提交的镜像作者;-m 提交时的说明文字;-c 使用Dockerfile指令来创建镜像;-p 在commit时,将容器暂停。
    docker commit -a "youname" -m "test" a404c6c174a2  mynginx:v1 
    
  2. 容器与主机之间的数据拷贝

    # 将主机/www/test /www目录下
    docker cp /www/test 96f7f14e99ab:/www/
    
    # 将主机/www/test目录拷贝到容器96f7f14e99ab中,目录重命名为www
    docker cp /www/test 96f7f14e99ab:/www
    
    # 将容器96f7f14e99ab的/www目录拷贝到主机的/test目录中
    docker cp  96f7f14e99ab:/www /root/test/
    
  3. 检查容器里文件结构的更改

    docker diff mynginx
    

mysql redis php nginx 分别安装

目录 
dnmp   根目录执行docker run
    reids
        data
        conf
            redis.conf
    mysql
        data
        conf.d
            my.cnf
    php
        www
        php
            php.ini
    nginx
        conf.d
        nginx.conf
        
    logs
        mysql
        php-fpm

  1. Docker 安装redis

    #使用 docker search 命令搜索存放在 Docker Hub 中的镜像
    docker search redis
    
    #选定需要pull到系统中的官方 redis 镜像
    docker pull redis:4.0
    
    #启动容器
    docker run \
    # 端口映射 宿主机:容器
    -p 6379:6379 \ 
    # 映射数据目录 rw 为读写
    -v $PWD/redis/data:/data:rw \ 
    # 挂载配置文件 ro 为readonly
    -v $PWD/redis/conf/redis.conf:/etc/redis/redis.conf:ro \ 
    # 给与一些权限
    --privileged=true \ 
    # 给容器起个名字
    --name myredis \ 
    # deamon 运行 服务使用指定的配置文件
    -d redis:4.0 redis-server /etc/redis/redis.conf 
    
  2. Docker 安装mysql

    #使用 docker search 命令搜索存放在 Docker Hub 中的镜像
    docker search mysql
    
    #选定需要pull到系统中的官方 mysql 镜像
    docker pull mysql:5.7
    
    #启动容器
    docker run \
    --name mydb \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -v $PWD/mysql/data:/var/lib/mysql:rw \
    -v $PWD/logs/mysql:/var/lib/mysql-logs:rw \
    -v $PWD/mysql/conf.d:/etc/mysql/conf.d:ro \
    -d mysql:5.7
    
  3. Docker 安装php

    #使用 docker search 命令搜索存放在 Docker Hub 中的镜像
    docker search php
    
    #选定需要pull到系统中的官方 php 镜像
    docker pull php:7.2-fpm
    
    #启动容器
    docker run \
    -d -p 9000:9000 \
    --name myphp \
    -v $PWD/php/www:/var/www/html:rw \
    -v $PWD/php/php/php.ini:/usr/local/etc/php/php.ini:ro \
    # 报错,先把php-fpm.conf文件复制过来,不然报错
    -v $PWD/php/php/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro \
    -v $PWD/logs/php-fpm:/var/log/php-fpm:rw \
    --link mydb:mydb \
    --link myredis:myredis \
    --privileged=true \
    php:7.2-fpm
    
    # redis 扩展没有安装  要下载安装并php.ini中添加配置
    # 扩展安装
    docker exec -it myphp /bin/bash
    
    apt-get update && apt-get install -y \
    git \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng-dev \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install zip \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install opcache \
    && docker-php-ext-install mysqli \
    && rm -r /var/lib/apt/lists/*
    
    
  4. Docker 安装nginx

    #使用 docker search 命令搜索存放在 Docker Hub 中的镜像
    docker search nginx
    
    #选定需要pull到系统中的官方 nginx 镜像
    docker pull nginx
    
    #启动容器
    docker run \
    --name mynginx \
    -d -p 80:80 \
    -v $PWD/php/www:/usr/share/nginx/html:ro \
    -v $PWD/nginx/conf.d:/etc/nginx/conf.d:ro \
    -v $PWD/nginx/nginx.conf:/etc/nginx/nginx.conf:ro \
    -v $PWD/logs/nginx:/var/log/nginx \
    --link myphp:myphp \
    -d nginx
    
    # 配置nginx  dump -> nginx -> conf.d
    server {
        listen   80 default;
        index index.html index.htm;
        server_name localhost docker;
    
        root /var/www/html;
        index index.php index.html index.htm;
        location / {
            try_files $uri $uri/ /index.html;
        }
    
        location ~ \.php {
            include fastcgi_params;
            fastcgi_pass   myphp:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
        }
    }
    
    

dnmp Dockerfile自动化 MAC下安装 执行目录为dnmp best

目录 
dnmp
    data
        mysql
        redis
    logs
        mysql
        nginx
        php
    services
        mysql
            my.cnf
            Dockerfile
        nginx
            conf.d
                localhost.conf
                www.test.com.conf
            Dockerfile
            nginx.conf
        php
            Dockerfile
            php.ini
            php-fpm.conf
        redis
            Dockerfile
            redis.conf
        www
            localhost
                index.php
            www.test.com
                index.php
    docker-compose.yml

Redis Dockerfile

  1. 下载redis的配置文件
curl http://download.redis.io/redis-stable/redis.conf > $PWD/redis/conf/redis.conf
  1. 编写Dockerfile文件
FROM redis:4.0
MAINTAINER you "you@qq.com"

ENV TIME_ZOME=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TIME_ZOME /etc/localtime && echo $TIME_ZOME > /etc/timezone

Mysql Dockerfile

FROM mysql:5.7
MAINTAINER you "you@qq.com"

ENV TIME_ZOME=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TIME_ZOME /etc/localtime && echo $TIME_ZOME > /etc/timezone
my.cnf
[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

Nginx Dockerfile

FROM nginx:1.12
MAINTAINER you "you@qq.com"

ENV TIME_ZOME=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TIME_ZOME /etc/localtime && echo $TIME_ZOME > /etc/timezone

WORKDIR /www
nginx.conf

user  nginx;
worker_processes  1;

pid        /var/run/nginx.pid;
error_log  /var/log/nginx/nginx.error.log warn;

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /dev/null;
    #access_log  /var/log/dnmp/nginx.access.log  main;

    # hide verson string
    server_tokens  off;
    sendfile        on;
    #tcp_nopush     on;
    client_max_body_size 100M;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

localhost.conf
server {
    listen   80 default;
    server_name localhost;

    root /var/www/html;
    index index.php index.html index.htm;
    location / {
        try_files $uri $uri/ /index.html;
    }

    location ~ \.php {
        include fastcgi_params;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/localhost/$fastcgi_script_name;
    }
}


www.test.com.conf
server {
    listen   80;
    server_name www.test.com;

    root /var/www/html;
    index index.php index.html index.htm;
    location / {
        try_files $uri $uri/ /index.html;
    }

    location ~ \.php {
        include fastcgi_params;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/test/$fastcgi_script_name;
    }
}

Php Dockerfile

FROM php:7.2-fpm
MAINTAINER you "you@qq.com"

# 设置时区
ENV TIME_ZOME=Asia/Shanghai
ENV COMPOSER_HOME=/tmp/composer
RUN ln -snf /usr/share/zoneinfo/$TIME_ZOME /etc/localtime && echo $TIME_ZOME > /etc/timezone && \
    export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" && \
    apt-get update && apt-get install -y --no-install-recommends \
    libbz2-dev \
    libenchant-dev \
    libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
    libgmp-dev \
    libxml2-dev libtidy-dev libxslt1-dev \
    libzip-dev \
    libsnmp-dev \
    libpq-dev \
    libpspell-dev \
    librecode-dev \
    firebird-dev \
    freetds-dev \
    libldap2-dev \
    libc-client-dev libkrb5-dev \
    firebird-dev \
    libicu-dev \
    libmcrypt-dev \
    libmagickwand-dev \
    zlib1g-dev libmemcached-dev && \

    rm -r /var/lib/apt/lists/* && \

    docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm && \
    docker-php-ext-install -j$(nproc) bz2 && \
    docker-php-ext-install -j$(nproc) enchant && \
    docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && docker-php-ext-install -j$(nproc) gd && \
    docker-php-ext-install -j$(nproc) gmp && \
    docker-php-ext-install -j$(nproc) soap wddx xmlrpc tidy xsl && \
    docker-php-ext-install -j$(nproc) zip && \
    docker-php-ext-install -j$(nproc) snmp && \
    docker-php-ext-install -j$(nproc) pgsql pdo_pgsql && \
    docker-php-ext-install -j$(nproc) pspell && \
    docker-php-ext-install -j$(nproc) recode && \
    docker-php-ext-install -j$(nproc) pdo_firebird && \
    docker-php-ext-configure pdo_dblib --with-libdir=lib/x86_64-linux-gnu && docker-php-ext-install -j$(nproc) pdo_dblib && \
    docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu && docker-php-ext-install -j$(nproc) ldap && \
    docker-php-ext-configure imap --with-kerberos --with-imap-ssl && docker-php-ext-install -j$(nproc) imap && \
    docker-php-ext-install -j$(nproc) interbase && \
    docker-php-ext-install -j$(nproc) intl && \
    pecl install mcrypt-1.0.1 && docker-php-ext-enable mcrypt && \
    pecl install imagick-3.4.3 && docker-php-ext-enable imagick && \
    pecl install memcached && docker-php-ext-enable memcached && \
    pecl install redis-4.0.1 && docker-php-ext-enable redis && \
    docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache && \
    curl -o /usr/bin/composer https://mirrors.aliyun.com/composer/composer.phar && chmod +x /usr/bin/composer && \
    usermod -u 1000 www-data && groupmod -g 1000 www-data

WORKDIR /www

单独扩展安装
# bz2 扩展的安装, 读写 bzip2(.bz2)压缩文件
apt-get update && \
apt-get install -y --no-install-recommends libbz2-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) bz2

# enchant 扩展的安装, 拼写检查库
apt-get update && \
apt-get install -y --no-install-recommends libenchant-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) enchant

# gd 扩展的安装. 图像处理
apt-get update && \
apt-get install -y --no-install-recommends libfreetype6-dev libjpeg62-turbo-dev libpng-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ && \
docker-php-ext-install -j$(nproc) gd

# gmp 扩展的安装, GMP
apt-get update && \
apt-get install -y --no-install-recommends libgmp-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) gmp

# soap wddx xmlrpc tidy xsl 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends libxml2-dev libtidy-dev libxslt1-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) soap wddx xmlrpc tidy xsl

# zip 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends libzip-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) zip

# snmp 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends libsnmp-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) snmp

# pgsql, pdo_pgsql 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends libpq-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) pgsql pdo_pgsql

# pspell 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends libpspell-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) pspell

# recode 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends librecode-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) recode

# pdo_firebird 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends firebird-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) pdo_firebird

# pdo_dblib 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends freetds-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-configure pdo_dblib --with-libdir=lib/x86_64-linux-gnu && \
docker-php-ext-install -j$(nproc) pdo_dblib

# ldap 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends libldap2-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu && \
docker-php-ext-install -j$(nproc) ldap

# imap 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends libc-client-dev libkrb5-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \
docker-php-ext-install -j$(nproc) imap

# interbase 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends firebird-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) interbase

# intl 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends libicu-dev && \
rm -r /var/lib/apt/lists/* && \
docker-php-ext-install -j$(nproc) intl

# mcrypt 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends libmcrypt-dev && \
rm -r /var/lib/apt/lists/* && \
pecl install mcrypt-1.0.1 && \
docker-php-ext-enable mcrypt

# imagick 扩展的安装
export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" && \
apt-get update && \
apt-get install -y --no-install-recommends libmagickwand-dev && \
rm -rf /var/lib/apt/lists/* && \
pecl install imagick-3.4.3 && \
docker-php-ext-enable imagick

# memcached 扩展的安装
apt-get update && \
apt-get install -y --no-install-recommends zlib1g-dev libmemcached-dev && \
rm -r /var/lib/apt/lists/* && \
pecl install memcached && \
docker-php-ext-enable memcached

# redis 扩展的安装
pecl install redis-4.0.1 && docker-php-ext-enable redis

# opcache 扩展的安装
docker-php-ext-configure opcache --enable-opcache && docker-php-ext-install opcache

docker-compose.yml

version: '3'
services:
  php:
    build: ./services/php
    container_name: php
    ports:
      - "9000:9000"
    links:
      - mysql:mysql
      - redis:redis
    volumes:
      - ./www:/var/www/html:rw
      - ./services/php/php.ini:/usr/local/etc/php/php.ini:ro
      - ./services/php/php-fpm.conf:/usr/local/etc/php-fpm.conf:ro
      - ./logs/php:/var/log/php-fpm:rw
    restart: always
    command: php-fpm

  nginx:
    build: ./services/nginx
    container_name: nginx
    volumes:
      - ./www:/usr/share/nginx/html:rw
      - ./services/nginx/conf.d:/etc/nginx/conf.d:ro
      - ./services/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./logs/nginx:/var/log/nginx
    ports:
      - "80:80"
      - "443:443"
    links:
      - php:php
    restart: always
    command: nginx -g 'daemon off;'

  mysql:
    build: ./services/mysql
    container_name: mysql
    ports:
      - "3306:3306"
    volumes:
      - ./data/mysql:/var/lib/mysql:rw
      - ./logs/mysql:/var/lib/mysql-logs:rw
      - ./services/mysql/my.cnf:/etc/mysql/my.cnf:ro
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    restart: always
    command: "--character-set-server=utf8mb4"

  redis:
    build: ./services/redis
    container_name: redis
    ports:
      - "6379:6379"
    volumes:
      - ./data/redis:/data
      - ./services/redis/redis.conf:/usr/local/etc/redis/redis.conf
    restart: always

服务器启动和构建命令

docker-compose up                         # 创建并且启动所有容器
docker-compose up -d                      # 创建并且后台运行方式启动所有容器
docker-compose up nginx php mysql         # 创建并且启动nginx、php、mysql的多个容器
docker-compose up -d nginx php  mysql     # 创建并且已后台运行的方式启动nginx、php、mysql容器


docker-compose start php                  # 启动服务
docker-compose stop php                   # 停止服务
docker-compose restart php                # 重启服务
docker-compose build php                  # 构建或者重新构建服务

docker-compose rm php                     # 删除并且停止php容器
docker-compose down                       # 停止并删除容器,网络,图像和挂载卷

posted on 2019-11-07 19:01  何苦->  阅读(380)  评论(0编辑  收藏  举报

导航