利用dockerfile制作基於centos7的lnmp鏡像(親測,詳細版)


有很多不足之處還有待加強,期待各位評論。

>

LNMP 是代表 Linux 系統下的 Nginx、Mariadb、PHP 相結合而構建成的動態網站服務器架構。下面使用 Dockerfile 文件的方式來創建帶有 LNMP 架構的 Docker 鏡像。

 

1. 創建工作目錄
[root@localhost ~]# mkdir lnmp
[root@localhost ~]# cd lnmp/

2. 創建 Dockerfile 文件
#基礎鏡像

FROM centos

#作者信息
MAINTAINER join's image for lnmp <12.com>

#配置nginx的yum源

RUN rpm –ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

#初始化RPM數據庫(會花一些時間),且安裝nginx
RUN rpm --rebuilddb && yum -y install nginx

#修改 nginx 配置文件,使之支持 php
RUN sed -i '/^user/s/nginx/nginx\ nginx/g' /etc/nginx/nginx.conf
RUN sed -i '10cindex index.php index.html index.htm ;' /etc/nginx/conf.d/default.conf
RUN sed -i '30,36s/#//' /etc/nginx/conf.d/default.conf
RUN sed -i '31s/html/\/usr\/share\/nginx\/html/' /etc/nginx/conf.d/default.conf
RUN sed -i '/fastcgi_param/s/scripts/usr\/share\/nginx\/html/' /etc/nginx/conf.d/default.conf

#安裝 mariadb 和 php

RUN rpm --rebuilddb && yum -y install mariadb-server mariadb-devel mariadb php-mysql php php-fpm

#修改php-fpm配置文件
RUN sed -i '/^user/s/apache/nginx/g' /etc/php-fpm.d/www.conf
RUN sed -i '/^group/s/apache/nginx/g' /etc/php-fpm.d/www.conf

#聲明Mariadb的用戶以及密碼等變量

ENV MARIADB_USER root
ENV MARIADB_PASS 123456

#使支持中文

ENV LC_ALL en_US.UTF-8

#這兩個腳本下面會有詳細說明
ADD db_init.sh /root/db_init.sh
RUN chmod 775 /root/db_init.sh
RUN /root/db_init.sh
ADD run.sh /root/run.sh
RUN chmod 775 /root/run.sh
ADD index.php /usr/share/nginx/html/index.php

#開放的端口

EXPOSE 80

EXPOSE 3306
EXPOSE 443
EXPOSE 9000

#每次創建容器,都會先運行這個腳本
CMD ["/run.sh"]

3.#下面的使數據庫初始化操作的腳本

[root@localhost lnmp]# cat db_init.sh
#!/bin/bash
 
mysql_install_db --user=mysql
sleep 3
mysqld_safe &
sleep 3

#涉及到的變量在Dockerfile中都已經聲明
mysqladmin -u "$MARIADB_USER" password "$MARIADB_PASS"

#下面是授權命令
mysql -e "use mysql; grant all privileges on *.* to '$MARIADB_USER'@'%' identified by '$MARIADB_PASS' with grant option;"

#這一步應注意下,為什么前面授權了,可以從任何主機來登陸,這里還有授權localhost呢,具體官方資料我也沒有查閱,但是和同學探討之后,應該是"%"這個符號,不包括"local host"和"127.0.0.1"
mysql -e "grant all priviliges on *.* to '$MARIADB_USER'@'localhost' identified by '$MARIADB_PASS';"
h=$(hostname)
mysql -e "use mysql; update user set password=password('$MARIADB_PASS') where user='$MARIADB_USER' and host='$h';"

4.#下面是run.sh腳本

#因為使用systemctl等工具的話,正常情況下是需要加上- -privileged 特殊授權,但是在這里創建鏡像中,根本無法使用那個,小弟很苦惱,不知道解決辦法,哪位大哥知道可以留言,所有都是用絕對路徑啟動的哥哥服務

[root@localhost lnmp]# cat run.sh
#!/bin/bash
mysqld_safe && /usr/sbin/nginx  && /usr/sbin/php-fpm

5.#php連接mariadb數據庫測試腳本,成功會輸出"MySQL is OK"

[root@localhost lnmp]# cat index.php
<?php
echo date("Y-m-d H:i:s")."<br />\n";
$link=mysql_connect("localhost","root","123456");
if(!$link) echo "FAILD!";
else echo "MySQL is OK!";
phpinfo();
?>

6.生成鏡像

docker build –t centos:lnmp .

7.啟動容器並驗證

#-P在這里表示隨機端口映射,-p可以指定具體端口,-d表示在后台運行,運行/root/run.sh腳本

docker run –d –name lnmp –P centos:lnmp /root/run.sh

#驗證端口

docker ps –a

image

image

可能不是很適合新手,如果還不夠透徹的話,可以加我vx,qy2331390498,備注,博客園-姓名拉群一起聊人生,談技術.


免責聲明!

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



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