Docker快速搭建LNMP環境


一、使用Dockerfile制作鏡像

  前面的博客中已經介紹了如何基於容器制作鏡像,此方法的原理是使用一個正在運行的容器,根據生產所需進行配置更改等操作后,使其滿足生產環境,再將這個容器打包制作為鏡像,這樣類似於快照制作鏡像的方式盡管操作還算比較簡單,但是當生產環境規模增大,配置變得越來越復雜后,就會顯得很臃腫很笨拙。所以下面使用Docker搭建LNMP介紹另一種最為普遍最為常用的容器鏡像制作方式——Dockerfile。

1.制作nginx鏡像

  編輯Dockerfile文件,Dockerfile文件的文件名可以是自定義,但首字母一定要大寫:

FROM centos:latest
LABEL AUTHER="AM"
ENV NGX_VERSION="nginx-1.14.2" \
    WEB_ROOT="/data/nginx/html" \
    WEB_PORT="80" \
    PHP_ROOT="/var/www/html" \
    PHP_IP="172.19.0.4"
ADD $NGX_VERSION.tar.gz /tmp/nginx/
RUN yum makecache \
    && yum install -y gcc gcc-c++ make openssl-devel pcre-devel \
    && mkdir -p /data/nginx/ \
    && cd /tmp/nginx/$NGX_VERSION/ \
    && ./configure --prefix=/data/nginx/ \
    && make \
    && make install \
    && yum remove -y gcc gcc-c++ make \
    && rm -rf /data/nginx/conf/nginx.conf \
    && yum clean all \
    && rm -rf /tmp/nginx/
COPY nginx.conf /data/nginx/conf/
WORKDIR /data/nginx
EXPOSE 80
CMD ["./sbin/nginx","-g","daemon off;"]

  Nginx鏡像目錄樹:

/root/image/
├── Dockerfile
├── index.html
├── nginx-1.14.2.tar.gz
├── nginx.conf

  生成鏡像:

docker build -t selfnginx:v0.1 ./

  創建搭建LNMP的專用網絡連接,使容器之間能在同一網絡名稱空間通信,(要注意的是,要使容器間通信不僅可以創建新的網絡連接,還可以使用 --link 選項):

docker network create lnmp

  啟動Nginx容器:

docker container run --name nginx-lnmp -it \
--network lnmp -p 80:80 --rm -v \
/data/nginx/html:/data/nginx/html nginx-lnmp:latest

2.制作並啟動PHP鏡像

  PHP7.2Dockerfile托管在Github上,制作方法和Nginx相同。啟動容器:

docker container run --name php -it --network lnmp -\
-rm -v /data/nginx/html:/var/www/html \
php-fpm7.2:latest

  在Nginx與PHP建立連接時有一個坑,在Nginx+PHP中通用配置如下:

        location ~ .php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
}

  在通常的非Docker場景中這樣配置是沒有問題的,但是在Docker場景下使用 $document_root 會出現報錯: FastCGI sent in stderr: "Primary script unknown" ,打開php頁面時會提示 file not found 。這是由於PHP容器化后PHP的工作目錄並不是默認的 $document_root ,所以必須使用容器鏡像事先所指定的路勁,我這里的路徑是 /var/www/html ,所以要將 $document_root 替換為 /var/www/html 。

3.制作並運行MariaDB鏡像

  MariaDB的Dockerfile地址也托管在github上。我這里沒有制作鏡像,直接使用的是官方的公共Docker鏡像→鏈接

  在啟動MariaDB時,要指定初始化的環境變量:MYSQL_ROOT_PASSWORD MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD等,其中必須的是 MYSQL_ROOT_PASSWORD :

docker container run --name mariadb -it \
-p 3306:3306 --network lnmp \
-v /data/mysql:/var/lib/mysql --rm \
-e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=mysql \
-e MYSQL_PASSWORD=123456 \
-e MYSQL_DATABASE=wptest mariadb:10.2.16

4.注意事項

  除了上述Nginx配置問題外,還要注意Nginx和PHP的數據路徑必須掛載在同一位置。檢測PHP是否可與MariaDB正常通信,可使用:

<?php
$mysqli = new mysqli("localhost", "root", "password");
if(!$mysqli) {
echo"database error";
}else{
echo"php env successful";
}
$mysqli->close();
?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM