Docker部署web環境之Lanmp

1. 案例一 整套項目多容器分離經過docker-compose部署lanmp環境

中方文檔參考網址: docker/kubernets網址
http://www.dockerinfo.net/documentphp

docker網絡關係

  • 同一網段之間容器互通,不一樣網絡之間容器相互隔離,好比,docker0網段和docker1網段內的容器;
  • 不一樣網段內的容器若是想要互通,能夠經過映射到物理網卡上的端口來進行通訊,也是能夠的;

1.1 介紹

compose 是一個定義和管理多容器的工具,使用python語言編寫。使用compose配置文件描述多個容器應用的架構,好比使用什麼鏡像,數據卷,網絡,映射端口等;而後一條命令管理全部服務,好比啓動,中止,重啓等。html

1.2 安裝docker環境

參考網址
https://docs.docker.com/install/linux/docker-ce/centos/node

參考網址
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager    --add-repo   https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
systemctl start docker
systemctl enable docker

docker tab鍵自動補全
yum install -y bash-completion
source /usr/share/bash-completion/completions/docker
source /usr/share/bash-completion/bash_completion

注意:
a)修改docker默認的安裝路徑
# vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd  --graph /app/docker

b)修改默認的網絡地址段
# vim /etc/docker/daemon.json
{"bip":"192.168.10.1/24"}
{"icc": false}
注: docker的版本從2017年3月份開始,以年月份來展現版本,而且分爲企業版和社區版

1.3 安裝docker-compose

下載網址
https://github.com/docker/compose/releasespython

安裝步驟:mysql

curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose   
chmod +x /usr/local/bin/docker-compose

1.4 目錄路徑的案例

[root@test compose_lanmp]# pwd
/home/yangjw/compose_lanmp
[root@test compose_lanmp]# ll
總用量 28
drwxr-xr-x 7 root root 4096 11月 11 17:44 apache_php
-rw-r--r-- 1 root root 1613 11月 11 17:44 docker-compose-lamp.yml
-rw-r--r-- 1 root root 2689 11月 11 17:42 docker-compose-lnmp.yml
drwxr-xr-x 4 root root 4096 11月 11 17:42 mysql
drwxr-xr-x 6 root root 4096 11月 11 17:44 nginx
drwxr-xr-x 4 root root 4096 11月 11 17:42 php
-rwxr-xr-x 1 root root 1541 11月 11 17:42 README

1.5 nginx 的Dockerfile文件的編寫

進入到nginx的目錄
將下載好的nignx源碼包,放入到nginx目錄下面linux

cat Dockerfilenginx

FROM       centos:7
MAINTAINER Mr.JingWen
RUN        yum install -y wget telnet vim iproute  iputils  gcc gcc-c++ make openssl-devel pcre pcre-devel
RUN        useradd  -s  /sbin/nologin -u 3000  nginx
ENV        TZ="Asia/Shanghai"  nginx_v="1.14.2"  soft_sign="PXJY_WebSer"  nginx_dir="/usr/local/nginx"
ADD        source_file/nginx-${nginx_v}.tar.gz /usr/local/src/
# 隱藏服務和版本號
#注意: 若nginx的版本不是 1.14.2 ,須要修改 nginx.h 裏面的版本號,使其對應
COPY       source_file/nginx.h                         /usr/local/src/nginx-${nginx_v}/src/core/
COPY       source_file/ngx_http_header_filter_module.c /usr/local/src/nginx-${nginx_v}/src/http/
COPY       source_file/ngx_http_special_response.c     /usr/local/src/nginx-${nginx_v}/src/http/

RUN        cd  /usr/local/src/nginx-${nginx_v} \
           &&  ./configure --prefix=${nginx_dir}  --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module \
           --with-http_gzip_static_module --with-pcre     \
           && make -j 4 && make install
RUN        rm -rf /usr/local/src/nginx-${nginx_v}* && yum clean all
RUN        chown  -R nginx ${nginx_dir}  &&  rm -rf /usr/local/src/nginx-${nginx_v}
WORKDIR    ${nginx_dir}
EXPOSE     80
CMD        ["./sbin/nginx", "-g", "daemon off;"]

備註:此處啓動用本身建立的普通用戶啓動,可是考慮到和宿主機的用戶避免衝突,因此指定了uid,受權的時候須要注意下,建議最好用uid號進行受權。
     經過此編譯文件編譯後可直接啓動,根據本身需求掛載配置文件。

cat nginx.confc++

user  nginx;
worker_processes  auto; 
error_log  logs/error.log  info;
pid        logs/nginx.pid;
worker_rlimit_nofile  65535;    
events {
    use epoll;
    worker_connections  3072;
}   
http {

    include       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 logs/access.log main;
    sendfile        on;
    keepalive_timeout  65;
    tcp_nodelay     on;
    server_tokens   off;

    #proxy_buffer_size 64k;
    #proxy_buffers 4 256k;
    #proxy_busy_buffers_size 256k;
    #client_header_buffer_size 64k;
    #large_client_header_buffers 4 64k;
    #fastcgi_connect_timeout 60;
    #fastcgi_send_timeout 180;

    fastcgi_read_timeout 600;
    proxy_connect_timeout     600;
    proxy_read_timeout        600;
    proxy_send_timeout        600;
    client_body_buffer_size   20M;
    client_max_body_size      20M;      #設置容許客戶端請求的最大的單個文件字節數
    client_header_buffer_size 20M;      #指定來自客戶端請求頭的headebuffer大小
    include  conf.d/*.conf;
}

cat conf.d/project.confgit

server {
    listen       80;
    server_name  localhost;
    access_log   /applog/app1.access.log  main;
    error_log    /applog/app2.error.log;
    root         /webroot/app1/;    
    location / {
        index  index.php index.html index.htm;
        if ( !-e $request_filename) {
            rewrite ^(.*)$ /index.php?info=/$1 last;
            break;
        }
    }   
    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }   
    location ~ \.php$ {
        fastcgi_pass   compose-php7.2:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
        fastcgi_param  PHP_VALUE  "open_basedir=/webroot/app1:/tmp/";
    }
}

1.6 php的Dockerfile文件的編寫

進入到php目錄github

cat Dockerfile

FROM   centos:7
MAINTAINER  Mr.JingWen
RUN    yum install -y wget telnet vim iproute  iputils gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel \
       libpng-devel openssl-devel
RUN    useradd  -s /sbin/nologin  -u 3000  nginx

#環境變量參數
ENV    TZ="Asia/Shanghai" mhash_v="0.9.9.9" libiconv_v="1.13" libmcrypt_v="2.5.8" php_v="7.2.19" php_dir="/usr/local/php"

ADD    source_file/mhash-${mhash_v}.tar.gz   /usr/local/src
RUN    cd  /usr/local/src/mhash-${mhash_v}         &&  ./configure &&  make  -j 4  &&  make  install

ADD    source_file/libiconv-${libiconv_v}.tar.gz   /usr/local/src
RUN    cd  /usr/local/src/libiconv-${libiconv_v}   &&  ./configure &&  make  -j 4  &&  make  install

ADD    source_file/libmcrypt-${libmcrypt_v}.tar.gz /usr/local/src
RUN    cd  /usr/local/src/libmcrypt-${libmcrypt_v} &&  ./configure &&  make  -j 4  &&  make  install \
       &&  cd libltdl &&  ./configure --with-gmetad --enable-gexec --enable-ltdl-install             \
       &&  make -j 4 && make install
RUN    echo '/usr/local/lib'  >>  /etc/ld.so.conf  &&  ldconfig

ADD    source_file/php-${php_v}.tar.gz      /usr/local/src
RUN    cd  /usr/local/src/php-${php_v}           \
       &&  ./configure --prefix=${php_dir} --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd  --enable-sysvsem    \
       --with-config-file-path=${php_dir}/etc --with-config-file-scan-dir=${php_dir}/etc/php-fpm.d             \
       --enable-bcmath  --without-pear  --with-openssl --with-gd --with-jpeg-dir --with-freetype-dir           \
       --with-zlib  --enable-xml --with-libxml-dir  --with-mhash  --enable-fpm --enable-mbregex                \
       --with-mcrypt  --with-curl   --with-png-dir  --enable-shmop --enable-mbstring  --enable-zip             \
       --enable-json --enable-phar --with-iconv-dir --enable-gd-native-ttf --enable-pcntl --enable-sockets     \
       --enable-inline-optimization              \
       &&    make -j 4 ZEND_EXTRA_LIBS='-liconv' \
       &&    make install                        \
       &&    cp  ${php_dir}/etc/php-fpm.conf.default  ${php_dir}/etc/php-fpm.conf        \
       #&&    cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf  \
       #注意: 容器中啓動php時,啓動進程的參數,須要配置禁止後臺運行 配置爲no,不然啓動失敗
       &&    sed  -i "21a \daemonize = no"                  ${php_dir}/etc/php-fpm.conf  \
       &&    cp   php.ini-production                        ${php_dir}/etc/php.ini       \
       &&    sed  -i '/upload_max_filesize/s/2/50/'         ${php_dir}/etc/php.ini       \
       &&    sed  -i '/post_max_size/s/8/50/'               ${php_dir}/etc/php.ini       \
       &&    sed  -i "/expose_php/s/On/OFF/"                ${php_dir}/etc/php.ini       \
       &&    sed  -i '$a ;date.timezone=PRC\ndate.timezone = Asia/Shanghai'                              ${php_dir}/etc/php.ini \
       &&    sed  -i '$a ;關閉高危函數應用\ndisable_functions = passthru,exec,shell_exec,system,chroot'  ${php_dir}/etc/php.ini   \
       &&    rm   -rf /usr/local/src/mhash-${mhash_v}         \
       &&    rm   -rf /usr/local/src/libiconv-${libiconv_v}   \
       &&    rm   -rf /usr/local/src/libmcrypt-${libmcrypt_v}
WORKDIR ${php_dir}
EXPOSE  9000
CMD    ["./sbin/php-fpm", "-c", "./etc/php-fpm.conf"]

備註:此處的程序啓動用戶,和nginx用的是同樣的uid用戶

1.7 apache和php後的Dockerfile編寫

cat ./compose_lanmp/apache_php/Dockerfile

FROM    centos:7
MAINTAINER Mr.JingWen   
# apache和php環境的環境變量參數; 
# 注: 編譯php版本前,須要先修改下面httpd.conf中php加載模塊的版本號,libphp
ENV     TZ="Asia/Shanghai"  apr_v="1.7.0"  apr_util_v="1.6.0"  httpd_v="2.4.39"   httpd_dir="/usr/local/httpd" \
        qdbm_v="1.8.78" mhash_v="0.9.9.9" libiconv_v="1.13" libmcrypt_v="2.5.8" php_dir="/usr/local/php" php_v="7.2.19"

RUN     useradd   -s /sbin/nologin  -u 3100  apache
RUN     yum install -y gcc gcc-c++ make cmake autoconf automake ncurses-devel    \
            libxml2-devel  perl-devel libcurl-devel libgcrypt  libgcrypt-devel   \
            libxslt  libxslt-devel pcre-devel openssl-devel  openssl  wget       \
            curl-devel db4-devel  libXpm-devel gmp-*  libc-client-devel vim      \
            openldap-devel freetype freetype-devel gd gd-devel libjpeg-devel     \
            libpng-devel zlib zlib-devel bzip2-devel libtool expat-devel bison   \
            iproute telnet iputils libtermcap-devel

#===============  構建 Apache 服務鏡像配置  ==============#
RUN     echo -e "\033[44;37m    開始編譯 apache 服務 \033[0m"  &&  sleep 3
ADD     source_file/apr-${apr_v}.tar.gz           /usr/local/src
RUN     cd  /usr/local/src/apr-${apr_v}              \
        &&  ./configure   --prefix=/usr/local/apr    \
        &&  make -j 4 &&  make install

ADD     source_file/apr-util-${apr_util_v}.tar.gz /usr/local/src
RUN     cd  /usr/local/src/apr-util-${apr_util_v}    \
        &&  ./configure   --prefix=/usr/local/apr-util --with-apr=/usr/local/apr \
        &&  make -j 4 &&  make install

ADD     source_file/httpd-${httpd_v}.tar.gz      /usr/local/src
WORKDIR /usr/local/src/httpd-${httpd_v}
        #優化apache請求數 || 隱藏apache版本號和更改軟件名字標誌的函數
RUN     perl -pi -e "s/DEFAULT_SERVER_LIMIT 256/DEFAULT_SERVER_LIMIT 15000/g"  server/mpm/prefork/prefork.c \
        &&  sed -i  "/#define AP_SERVER_BASEPRODUCT/s/Apache/PXJY WebSer/"     include/ap_release.h         \
        #開始編譯
        &&  ./configure --prefix=${httpd_dir} -enable-cgi --with-zlib --with-pcre --with-apr=/usr/local/apr \
        --enable-expires=shared --enable-vhost-alias=shared --with-apr-util=/usr/local/apr-util             \
        --enable-rewrite=shared --enable-speling=shared --enable-proxy=shared --enable-so --enable-ssl      \
        --with-mpm=prefork --with-expat=builtin --enable-modules=all --enable-usertrack=shared              \
        &&  make -j 4 &&  make install
WORKDIR ${httpd_dir}/conf
RUN         sed -i 's/#ServerName www.example.com:80/ServerName 0.0.0.0:80/g'          httpd.conf \
        &&  sed -i '$a Include conf/extra/httpd-vhosts.conf'                           httpd.conf \
        &&  sed -i 's/User daemon/User apache/g'                                       httpd.conf \
        &&  sed -i 's/Group daemon/Group apache/g'                                     httpd.conf \
        &&  sed -i 's/DirectoryIndex index.html/DirectoryIndex index.php index.html/g' httpd.conf \
        &&  sed -i '$a ServerTokens Prod'                                              httpd.conf \
        &&  sed -i '$a ServerSignature Off'                                            httpd.conf \
        &&  sed -i 's/#LoadModule/LoadModule/g'                                        httpd.conf \
        #   php相關的參數,用php服務器時,纔會生效
        &&  sed -i '/<IfModule mime_module>/a AddType application/x-httpd-php .php'         httpd.conf \
        &&  sed -i '/<IfModule mime_module>/a AddType application/x-httpd-php-source .phps' httpd.conf \
        #
        #   php版本不一樣所用模塊也不一樣
        &&  sed -i '/<IfModule unixd_module>/i LoadModule php7_module modules/libphp7.so'   httpd.conf
        #&&  sed -i '/<IfModule unixd_module>/i LoadModule php5_module modules/libphp5.so'   httpd.conf \

#==================  構建 php 服務鏡像  =================#

RUN     echo -e "\033[44;37m    開始編譯 php 服務 \033[0m"  &&  sleep 3
ADD     source_file/qdbm-${qdbm_v}.tar.gz           /usr/local/src
RUN     cd  /usr/local/src/qdbm-${qdbm_v}           && ./configure && make -j 4 && make install

ADD     source_file/mhash-${mhash_v}.tar.gz         /usr/local/src
RUN     cd  /usr/local/src/mhash-${mhash_v}         && ./configure && make -j 4 && make install

ADD     source_file/libiconv-${libiconv_v}.tar.gz   /usr/local/src
RUN     cd  /usr/local/src/libiconv-${libiconv_v}   && ./configure && make -j 4 && make install

ADD     source_file/libmcrypt-${libmcrypt_v}.tar.gz /usr/local/src
RUN     cd  /usr/local/src/libmcrypt-${libmcrypt_v} && ./configure && make -j 4 && make install \
        &&  cd libltdl &&  ./configure --with-gmetad --enable-gexec --enable-ltdl-install       \
        &&  make -j 4 && make install
RUN     echo '/usr/local/lib'  >>  /etc/ld.so.conf  && ldconfig

ADD     source_file/php-${php_v}.tar.gz             /usr/local/src
RUN     cd  /usr/local/src/php-${php_v}           \
        &&  ./configure --prefix=${php_dir} --with-mysql=mysqlnd --with-mysqli=mysqlnd  --with-pdo-mysql=mysqlnd   \
        --with-apxs2=${httpd_dir}/bin/apxs  --with-config-file-path=${php_dir}/etc --enable-pic  --disable-static  \
        --enable-mbstring --enable-inline-optimization   --with-regex=system --with-gettext --with-gd --with-png   \
        --with-zlib --enable-debugger --disable-debug  --enable-magic-quotes   --enable-safe-mode --enable-sysvmsg \
        --enable-sysvsem --enable-sysvshm --enable-track-vars --enable-yp --with-freetype-dir=/usr  --enable-ftp   \
        --with-xml  --with-png-dir=/usr --enable-gd-native-ttf --with-ttf  --with-ncurses --with-gmp --with-iconv  \
        --with-jpeg-dir=/usr  --with-expat-dir=/usr --enable-bcmath --enable-exif --enable-sockets --enable-wddx   \
        --enable-discard-path  --enable-trans-sid --enable-wddx --enable-versioning --enable-calendar --enable-dbx \
        --enable-dio --enable-mcal --enable-shmop --with-curl --with-openssl --with-qdbm --enable-fastcgi          \
        --enable-zip  --with-mcrypt --with-mhash --with-qdbm  --enable-fpm                                         \
        &&    make -j 4 ZEND_EXTRA_LIBS='-liconv' \
        &&    make install                        \
        &&    cp ${php_dir}/etc/php-fpm.conf.default ${php_dir}/etc/php-fpm.conf         \
        #&&    cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf  \
        #注意: 容器中啓動php時,啓動進程的參數,須要配置禁止後臺運行 配置爲no,不然啓動失敗
        &&    sed  -i "21a \daemonize = no"                 ${php_dir}/etc/php-fpm.conf  \
        &&    cp   php.ini-production                       ${php_dir}/etc/php.ini       \
        &&    sed  -i '/upload_max_filesize/s/2/50/'        ${php_dir}/etc/php.ini       \
        &&    sed  -i '/post_max_size/s/8/50/'              ${php_dir}/etc/php.ini       \
        &&    sed  -i "/expose_php/s/On/OFF/"               ${php_dir}/etc/php.ini       \
        &&    sed  -i '$a ;date.timezone=PRC\ndate.timezone = Asia/Shanghai'                              ${php_dir}/etc/php.ini \
        &&    sed  -i '$a ;關閉高危函數應用\ndisable_functions = passthru,exec,shell_exec,system,chroot'  ${php_dir}/etc/php.ini \
        &&    rm  -rf  /usr/local/src/apr-${apr_v}             \
        &&    rm  -rf  /usr/local/src/apr-util-${apr_util_v}   \
        &&    rm  -rf  /usr/local/src/httpd-${httpd_v}         \
        &&    rm  -rf  /usr/local/src/qdbm-${qdbm_v}           \
        &&    rm  -rf  /usr/local/src/mhash-${mhash_v}         \
        &&    rm  -rf  /usr/local/src/libmcrypt-${libmcrypt_v} \
        &&    rm  -rf  /usr/local/src/libiconv-${libiconv_v}

RUN     chown -R  apache.apache  ${httpd_dir}
WORKDIR ${httpd_dir}
EXPOSE  80
ENTRYPOINT  ["./bin/httpd", "-D", "FOREGROUND"]

1.7 mysql的Dockerfile文件的配置

mysql的編寫,略,直接下載鏡像啓動便可
進入到mysql目錄

mkdir -p   conf data

再進入到conf目錄下,配置my.cnf文件

cat my.cnf

[mysqld]
user=mysql
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysql/mysql.pid
log_error=/var/log/mysql/error.log
character_set_server = utf8
max_connections=3600

1.8 docker-compose YML文件格式以及編寫注意事項

YML數據結構經過縮進來表示,連續的項目經過減號來表示,鍵值對用冒號分隔,數組用中括號括起來,hash用花括號括起來。

YML文件格式注意事項:
1.3.1 不支持製表符tab鍵縮進,須要使用空格縮進
1.3.2 一般開頭縮進2個空格
1.3.3 字符後縮進1個空格,如冒號,逗號,橫槓
1.3.4 用井號註釋
1.3.5 若是包含特殊字符用單引號引發來
1.3.6 布爾值(true,false,yes,no,on,off)必須用引號括起來,這樣分析器會將他們解釋爲字符串。

1.9 docker-compose配置文件經常使用字段

配置文件經常使用字段:

字段 描述
build dockerfile context 指定Dockerfile文件名構建鏡像上下文路徑
image 指定鏡像
command 執行命令,覆蓋默認命令
container_name 指定容器名稱,因爲容器名稱是惟一的,若是指定自定義名稱,則沒法scale
deploy 指定部署和運行服務相關配置,只能在Swarm模式使用
enviroment 添加環境變量
networks 加入網絡,引入自定義網絡
ports 暴露端口,與-p相同,但端口不能低於60
volumes 掛載宿主機路徑或命名卷。若是是命令卷在頂級volumes定義卷名稱
restart 重啓策略,默認no,此參數的做用是是否隨着docker服務自啓動,可選always/on-failure/unless-stopped
hostname 容器主機名

經常使用命令:

字段 描述
build 從新構建服務
ps 列出容器
up 建立和啓動容器,通常和 -d 結合使用,一個是前臺運行,一個是後臺運行
exec 在容器裏執行命令
scale 指定一個服務容器啓動數量
top 顯示容器進程
logs 查看容器輸出
down 刪除容器,網絡,數據卷和鏡像
stop/start/restart 中止/啓動/重啓服務
config 驗證並查看撰寫文件

1.10 docker-copose.yml配置文件

此配置是管理多容器的一個工具

  • lamp環境yml配置文件

cat docker-compose-lamp.yml

#===============================================
#==========    定義了版本信息    ===============
version: '3'

#===============================================
#===========   Network Service   ===============
networks:
  lanmp: 
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.20.0/24

#===============================================
#=========    定義了服務的配置信息    ==========
services:
  #Apache  Service
  compose-apache:
    hostname: compose-apache
    container_name: compose-apache
    restart: always
    image:  yangsir/apache-php:2.4.39_7.2.19
    build:
      context: ./apache_php
      dockerfile: Dockerfile
    ports:
      - 81:80
    networks:
      lanmp:
        ipv4_address: 192.168.20.14
    depends_on:
      - compose-mysql5.7
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./apache_php/config/conf81:/usr/local/httpd/conf
      - ./apache_php/applog:/applog
      - ./apache_php/webroot:/webroot
      - ./apache_php/php/php7.2/etc:/usr/local/php/etc
    #健康檢查
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 5s
      timeout: 3s
      retries: 5

  #MySQL Service
  compose-mysql5.7:
    hostname: compose-mysql5.7
    container_name: compose-mysql5.7
    restart: always
    image: mysql:5.7
    ports:
      - 3306:3306
    networks:
      lanmp:
        ipv4_address: 192.168.20.13
    volumes:
      - ./mysql/mysql5.7/conf:/etc/mysql/conf.d
      - ./mysql/mysql5.7/data:/var/lib/mysql
    command: --character-set-server=utf8
    env_file:
      - ./mysql/mysql5.7/conf/env
  • lnmp環境yml配置文件

cat docker-compose-lnmp.yml

#===============================================
#==========    定義了版本信息    ===============
version: '3.0'

#===============================================
#===========   Network Service   ===============
networks:
  lanmp:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.20.0/24

#===============================================
#=========    定義了服務的配置信息    ==========
services:
  #Nginx Service
  compose-wxjh:
    hostname: compose-wxjh
    container_name: compose-wxjh
    restart: always
    image: yangsir/nginx-proxy:1.14.2
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 80:80
    networks:
      lanmp:
        ipv4_address: 192.168.20.11
    depends_on:
      - compose-php7.2
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./nginx/config/conf80:/usr/local/nginx/conf
      - ./nginx/applog:/applog
      - ./nginx/webroot:/webroot
    #健康檢查
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 5s
      timeout: 3s
      retries: 5

  #Openresty Service
  compose-openresty:
    hostname: compose-openresty
    container_name: compose-openresty
    restart: always
    image: yangsir/openresty:1.13.6.2
    build:
      context: ./nginx
      dockerfile: dockerfile
    ports:
      - 84:80
    networks:
      lanmp:
        ipv4_address: 192.168.20.15
    depends_on:
      - compose-php7.2
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./nginx/config/conf84:/usr/local/openresty/nginx/conf
      - ./nginx/applog:/applog
      - ./nginx/webroot:/webroot
    #健康檢查
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 5s
      timeout: 3s
      retries: 5

  #PHP Service
  compose-php7.2:
    hostname: compose-php7.2
    container_name: compose-php7.2
    restart: always
    image: yangsir/php-fpm:7.2.19
    build:
      context: ./php/php7.2
      dockerfile: Dockerfile
    ports:
      - 9000:9000
    networks:
      lanmp:
        ipv4_address: 192.168.20.12
    depends_on:
      - compose-mysql5.7
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./php/php7.2/etc:/usr/local/php/etc
      - ./nginx/webroot:/webroot
  #MySQL Service
  compose-mysql5.7:
    hostname: compose-mysql5.7
    container_name: compose-mysql5.7
    restart: always
    image: mysql:5.7
    ports:
      - 3306:3306
    networks:
      lanmp:
        ipv4_address: 192.168.20.13
    volumes:
      - ./mysql/mysql5.7/conf:/etc/mysql/conf.d
      - ./mysql/mysql5.7/data:/var/lib/mysql
    command: --character-set-server=utf8
    env_file:
      - ./mysql/mysql5.7/conf/env

cat ./mysql/mysql5.7/conf/env

TZ=Asia/Shanghai
MYSQL_ROOT_PASSWORD=admin
MYSQL_USER=user
MYSQL_PASSWORD=user123

修改默認的網絡名稱

# echo 'export COMPOSE_PROJECT_NAME="compose"' >> /etc/profile

eg: docker 網絡名稱類型以下
# docker network ls
ec4609c83ee5        compose_lanmp                   bridge              local

注意: networks 下面的lanmp 是 新建立的網絡,將整套業務類型,都放在了同一個網絡下面;
      利用lnmp環境時,必定要記住,nginx下面映射的目錄必定也要在php服務下面作相同的映射,不然php解析不到文件

1.11 啓動容器工具進行安裝

docker-compose.yml文件 見 1.5
注意: 經過 docker-compose.yml文件來建立容器,默認是會執行 docker-compose.yml文件,若是是默認的文件,能夠省略掉 "-f docker-compose.yml",若是是其餘的yml文件,或者路徑不在當前路徑下,須要用 -f 指定一下

前臺執行:
docker-compose -f docker-compose.yml up
後臺執行:
docker-compose -f docker-compose.yml up -d  

重啓單個容器
docker-compose -f docker-compose.yml  restart  <Service_name>
相關文章
相關標籤/搜索