• 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                       # 停止并删除容器,网络,图像和挂载卷
    
  • 相关阅读:
    Git的安装
    报错Invalid character found in method name. HTTP method names must be tokens|the HTTP protoco
    Spring Cloud(二)—— Eureka注册与发现
    spring-boot swagger2 设置全局token,说明页面接口无法带入token
    c# 结构体中包含结构体数组的使用
    百度地图api热力图时报错Cannot read property 'y' of undefined
    springboot使用freemaker导出word文档
    c# 同时运行两个相同的程序
    idea maven的pom文件已导入依赖,但是无法引入该包中class
    bootstrap Table 导出时时间格式显示秒 科学计数法显示
  • 原文地址:https://www.cnblogs.com/fuqian/p/11814296.html
Copyright © 2020-2023  润新知