Docker使用及dnmp構建

Docker 本地鏡像管理

  1. Docker 列出本地鏡像php

    docker images
    
    #列出全部鏡像,包含中間層鏡像  -a 列出本地全部的鏡像(含中間映像層,默認狀況下,過濾掉中間映像層)
    docker images -a
    
    # Docker 查看虛懸鏡像列表 -f 顯示知足條件的鏡像
    docker images -f dangling=true
    field 釋意
    REPOSITORY 表示鏡像的倉庫源
    TAG 鏡像的標籤
    IMAGE ID 鏡像ID
    CREATED 鏡像建立時間
    SIZE 鏡像大小

    虛懸鏡像html

    這個鏡像本來是有鏡像名和標籤的,原來爲 mongo:3.2 ,隨着官方鏡像維護,發 布了新版本後,從新 docker pull mongo:3.2 時, mongo:3.2 這個鏡像名被 轉移到了新下載的鏡像身上,而舊的鏡像上的這個名稱則被取消,從而成爲了 。除了 docker pull 可能致使這種狀況, docker build 也一樣可 以致使這種現象。因爲新舊鏡像同名,舊鏡像名稱被取消,從而出現倉庫名、標籤 均爲 的鏡像。這類無標籤鏡像也被稱爲 虛懸鏡像(dangling image)mysql

  2. 刪除本地一個或多少鏡像linux

    docker rmi 鏡像ID
    
    # -f 強制刪除
    docker rmi -f 鏡像ID
    
    #刪除所有
    docker rmi `docker images ‐q`
    
    #刪除全部虛懸鏡像
    docker rmi $(docker images -q -f dangling=true)
  3. 標記本地鏡像,將其納入某一倉庫nginx

    docker tag ubuntu:15.10 runoob/ubuntu:v3
  4. 使用 Dockerfile 建立鏡像c++

    1. Dockerfile 構建git

      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"]

      github

      CMD ["./sbin/nginx","-g","daemon off;"]
      /sbin/nginx 啓動nginx服務;
      -g: 設置配置文件外的全局指令,也就是啓動nginx時設置了daemon off參數,
      守護進程是指脫離終端而且在後臺運行的進程。這裏設置爲off,也就是不讓它在後臺運行。爲何咱們啓動nginx容器時不讓它在後臺運行呢,docker 容器默認會把容器內部第一個進程,也就是pid=1的程序做爲docker容器是否正在運行的依據,若是docker 容器pid掛了,那麼docker容器便會直接退出。redis

    2. 構建鏡像sql

      #指定本地文件構建
      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. 刪除一個或多少容器

    # 強制刪除容器db0一、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                       # 中止並刪除容器,網絡,圖像和掛載卷
相關文章
相關標籤/搜索