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();
?>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章