Dockerfile 方式定制 lnmp 環(huán)境

現(xiàn)在容器化技術(shù)越來越成熟和流行冀值,比傳統(tǒng)的虛擬化技術(shù)確實(shí)是有很大的優(yōu)勢桶蝎,所以流行是必然的政敢。今天來實(shí)踐一把,使用 Docker 的 dockerfile 方式定制 lnmp 環(huán)境买窟。

環(huán)境配置
操作系統(tǒng):CentOS Linux release 7.6.1810
Docker 版本:19.03.5
Nginx 版本:1.15.5
PHP 版本:7.2.26
MySQL 版本:8.0.18
Redis 版本:5.0.5
創(chuàng)建目錄結(jié)構(gòu)
docker目錄://docker相關(guān)配置
[root@zhangdeTalk data]# tree docker
docker
├── bin
│ └── docker-compose-linux.yml //dockerfile.yml
├── config
│ ├── mysql
│ │ └── mysqld.cnf //數(shù)據(jù)庫配置文件
│ ├── nginx
│ │ ├── conf.d
│ │ │ └── default.conf //nginx主要配置文件
│ │ └── nginx.conf //nginx基礎(chǔ)配置文件
│ ├── php
│ │ ├── php.ini //php基礎(chǔ)配置文件
│ │ └── www.conf //php主要配置文件
│ └── redis
│ └── redis.conf //redis配置文件
├── dockerfile
│ ├── mysql-8.0.18
│ │ └── Dockerfile //mysql的dockerfile
│ ├── nginx-1.15.5
│ │ └── Dockerfile //nginx的dockerfile
│ ├── php-7.2-fpm
│ │ └── Dockerfile //php的dockerfile
│ └── redis-5.0.5
│ └── Dockerfile //redis的dockerfile
├── README.en.md
└── README.md
www目錄://站點(diǎn)目錄
[root@zhangdeTalk data]# tree www
www
└── zhangdetalk_blog_admin
├── 1.html
└── index.php
logs目錄://日志目錄
[root@zhangdeTalk data]# tree logs
logs
├── mysql
├── nginx
│ ├── access.log
│ └── error.log
├── php
└── redis
mysql目錄://數(shù)據(jù)庫數(shù)據(jù)目錄
redis目錄://數(shù)據(jù)庫數(shù)據(jù)目錄
Docker 安裝
先在 CentOS 安裝 Docker,可參考另外一篇文章:CentOS 安裝 Docker

構(gòu)建 lnmp 鏡像 Dockerfile
PHP Dockerfile
From php:7.2-fpm

維護(hù)者信息

MAINTAINER zhangdeTalk 2393222021@qq.com

時(shí)區(qū)

ENV TZ Asia/Shanghai
RUN date -R

RUN docker-php-ext-install bcmath dom fileinfo filter ftp gd gmp hash iconv imap json mbstring mysqli odbc opcache pdo pdo_mysql pdo_odbc phar reflection session snmp soap sockets zip

RUN docker-php-ext-install mysqli opcache pdo_mysql

WORKDIR /working
RUN apt-get update --fix-missing && apt-get install -y libpng-dev libjpeg-dev libfreetype6-dev
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include --with-jpeg-dir=/usr/include/jpeg
&& docker-php-ext-install gd mysqli opcache pdo_mysql gd zip
ENV PHPREDIS_VERSION 4.0.1
ENV PHPXDEBUG_VERSION 2.6.0
ENV PHPSWOOLE_VERSION 4.2.13
ENV PHPMONGODB_VERSION 1.5.3
RUN pecl install redis-PHPREDIS_VERSION \ && pecl install xdebug-PHPXDEBUG_VERSION
&& pecl install swoole-PHPSWOOLE_VERSION \ && pecl install mongodb-PHPMONGODB_VERSION
&& docker-php-ext-enable redis xdebug swoole mongodb

install composer new

https://getcomposer.org/installer | https://install.phpcomposer.com/installer

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
&& php composer-setup.php
&& php -r "unlink('composer-setup.php');"
&& mv composer.phar /usr/local/bin/composer
&& composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
RUN apt-get install -y git

clear

RUN rm -rf /var/cache/apt/*
&& rm -rf /var/lib/apt/lists/*
RUN mkdir /var/lib/sessions
&& chmod o=rwx -R /var/lib/sessions

容器啟動時(shí)執(zhí)行指令

CMD ["php-fpm"]
Nginx Dockerfile
From nginx:1.15.5

維護(hù)者信息

MAINTAINER zhangdeTalk 2393222021@qq.com

時(shí)區(qū)

ENV TZ Asia/Shanghai
RUN date -R

容器啟動時(shí)執(zhí)行指令

CMD ["nginx", "-g", "daemon off;"]
Mysql Dockerfile
From mysql:8.0.18

維護(hù)者信息

MAINTAINER zhangdeTalk 2393222021@qq.com

時(shí)區(qū)

ENV TZ Asia/Shanghai
RUN date -R

容器啟動時(shí)執(zhí)行指令

CMD ["mysqld"]
Redis Dockerfile
From redis:5.0.5

維護(hù)者信息

MAINTAINER zhangdeTalk 2393222021@qq.com

時(shí)區(qū)

ENV TZ Asia/Shanghai
RUN date -R

容器啟動時(shí)執(zhí)行指令

CMD ["redis-server"]
dockerfile.yml 配置
version: '3.3'
services:
nginx:
build: ../dockerfile/nginx-1.15.5
ports:
- "80:80" #nginx
restart: always
tty: true
container_name: nginx
volumes:
- /data/www:/var/www/html
- /data/logs/nginx:/var/log/nginx
- /data/docker/config/nginx/conf.d:/etc/nginx/conf.d
- /data/docker/config/nginx/nginx.conf:/etc/nginx/nginx.conf
- /etc/letsencrypt:/etc/letsencrypt
networks:
- lnmp-networks
php7:
build: ../dockerfile/php-7.2-fpm
tty: true
restart: always
container_name: php7
volumes:
- /data/www:/var/www/html
- /data/logs/php:/var/log/php
- /data/docker/config/php/php.ini:/usr/local/etc/php/php.ini
- /data/docker/config/php/www.conf:/usr/local/etc/php-fpm.d/www.conf
depends_on:
- nginx
networks:
- lnmp-networks
redis:
build: ../dockerfile/redis-5.0.5
container_name: redis
tty: true
restart: always
volumes:
- /data/docker/config/redis/redis.conf:/etc/redis/redis.conf
- /data/redis:/var/lib/redis
- /data/logs/redis:/var/log/redis
networks:
- lnmp-networks
mysql:
build: ../dockerfile/mysql-8.0.18
container_name: mysql
tty: true
restart: always
ports:
- "3306:3306" #mysql
volumes:
- /data/mysql:/var/lib/mysql
- /data/docker/config/mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
- /data/logs/mysql:/var/log/mysql
- /data/mysqlback:/data/mysqlback
environment:
MYSQL_ROOT_PASSWORD: root
networks:
- lnmp-networks
networks:
lnmp-networks:
Nginx 配置文件
vim /data/docker/config/nginx/conf.d/default.conf

server {
listen 80;
listen [::]:80;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html index.php;
charset utf-8;
server_name zhangdetalk.com www.zhangdetalk.com;
location ~ .md{ default_type 'text/plain'; } root /var/www/html/zhangdetalk_blog_admin;//項(xiàng)目目錄 location / { #try_filesuri uri/ =404; index index.php index.htm index.html; if (!-erequest_filename) {
rewrite ^(.*)/index.php?s=1 last;
break;
}
}
location ~ .php{ include fastcgi_params; fastcgi_index index.php; fastcgi_pass php7:9000;//容器:端口號 fastcgi_param SCRIPT_FILENAMEdocument_root$fastcgi_script_name;
}
}
docker-compose 安裝

  1. curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose
  2. chmod +x /usr/local/bin/docker-compose //設(shè)置可執(zhí)行權(quán)限
    創(chuàng)建并啟動容器
    docker-compose -f docker-compose-linux.yml up -d --force-recreate --remove-orphans
    容器查看
    docker ps

測試
vim /data/www/zhangdetalk_blog_admin/index.php
<?php
echo "Hello World";
conn = mysqli_connect('數(shù)據(jù)庫容器名字','dbuser','dbpw'); if(conn){
echo '數(shù)據(jù)庫連接成功薯定!';
}else{
echo '數(shù)據(jù)庫連接失斒忌堋!';
}
phpinfo();
?>

通過訪問站點(diǎn):http://www.zhangdetalk.com/
可以看到顯示數(shù)據(jù)庫連接成功话侄,并打印出PHP的相關(guān)信息
到此步亏推,我們的lnmp環(huán)境搭建大功告成!
github 源碼
相關(guān)的源碼下載地址:https://github.com/zhangdejian/docker_lnmp.git
遇到的問題
1满葛、PHP代碼連接數(shù)據(jù)庫径簿,host不能寫成127.0.0.1或localhost,需要填寫數(shù)據(jù)庫容器名字

2嘀韧、mysql8連接篇亭,連接失敗,因?yàn)榧用芊绞接凶兓?br> 解決方式:主機(jī)登錄mysql锄贷,修改成舊的加密方式(mysql_native_password)译蒂,并重置密碼

  • mysql -uroot -p;
  • use mysql;
  • select host,user,plugin from user;
  • alter user 'root'@'%' identified with mysql_native_password by '123456';
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谊却,隨后出現(xiàn)的幾起案子柔昼,更是在濱河造成了極大的恐慌,老刑警劉巖炎辨,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捕透,死亡現(xiàn)場離奇詭異,居然都是意外死亡碴萧,警方通過查閱死者的電腦和手機(jī)乙嘀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來破喻,“玉大人虎谢,你說我怎么就攤上這事〔苤剩” “怎么了婴噩?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長羽德。 經(jīng)常有香客問我几莽,道長,這世上最難降的妖魔是什么宅静? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任银觅,我火速辦了婚禮,結(jié)果婚禮上坏为,老公的妹妹穿的比我還像新娘究驴。我一直安慰自己,他們只是感情好匀伏,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布洒忧。 她就那樣靜靜地躺著,像睡著了一般够颠。 火紅的嫁衣襯著肌膚如雪熙侍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天履磨,我揣著相機(jī)與錄音蛉抓,去河邊找鬼。 笑死剃诅,一個胖子當(dāng)著我的面吹牛巷送,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播矛辕,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼笑跛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了聊品?” 一聲冷哼從身側(cè)響起飞蹂,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翻屈,沒想到半個月后陈哑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伸眶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年惊窖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赚抡。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡爬坑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涂臣,到底是詐尸還是另有隱情盾计,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布赁遗,位于F島的核電站署辉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏岩四。R本人自食惡果不足惜哭尝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剖煌。 院中可真熱鬧材鹦,春花似錦逝淹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至尤泽,卻和暖如春欣簇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坯约。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工熊咽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闹丐。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓横殴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親妇智。 傳聞我的和親對象是個殘疾皇子滥玷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359