Docker快速搭建LNMP環境

2022-07-29 20:09:10 字數 2922 閱讀 4398

前面的部落格中已經介紹了如何基於容器製作映象,此方法的原理是使用乙個正在執行的容器,根據生產所需進行配置更改等操作後,使其滿足生產環境,再將這個容器打包製作為映象,這樣類似於快照製作映象的方式儘管操作還算比較簡單,但是當生產環境規模增大,配置變得越來越複雜後,就會顯得很臃腫很笨拙。所以下面使用docker搭建lnmp介紹另一種最為普遍最為常用的容器映象製作方式——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

yummakecache \

&& 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

80cmd [

"./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

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$

在通常的非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 。

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

除了上述nginx配置問題外,還要注意nginx和php的資料路徑必須掛載在同一位置。檢測php是否可與mariadb正常通訊,可使用:

<?php

$mysqli = new mysqli("

localhost

", "

root

", "

password");

if(!$mysqli)

else

$mysqli->close();

?>

CentOS7 Docker 搭建 LNMP 環境

docker安裝 nginx php fpm docker pscontainer id 容器id names 自動分配的容器名稱 docker logs 2b1b7a428627 容器 id 容器名稱docker stop 容器 id 容器名稱docker start 容器 id 容器名稱dock...

docker 搭建 lnmp 環境

這幾天學了 docker 又用 docker 搭建了自己的環境。這中間遇到了很多坑,為此特意寫此博文,供你們搭建環境的時候借鑑。本篇本章預設你有 docker 的基本知識 本篇用到的環境 實踐 搭建 dockerfile 首先我們編寫我們的 dockerfile mysql from mysql 5...

docker 搭建 lnmp 實踐

centos7 下 docker 的安裝 persistent data lvm2 sudo yum config manager add repo sudo yum install docker ce y專案介紹 docker 環境搭建相關 git clone 操作命令 安裝庫依賴 docker ...