用Dockerfile搭建LNMP環境

NGINX

一、準備好源碼包和配置文件
1、目錄結構如下


[root@ecs-5704-0004 nginx]# tree ./
./
├── Dockerfile
├── nginx-1.14.2.tar.gz
└── nginx.conf

2、nginx.conf裏的配置信息主要如下

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           html;
            fastcgi_pass   lnmp_php:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

其他的配置信息都是默認的配置,主要更改這個位置,它是與PHP建立連接的location模塊,其中fastcgi_pass相當於proxy_pass,lnmp_php是我們後面創建php的docker名字,因爲我後面會把所有的服務器都加入到同一個網絡中,所以可以直接這麼寫。
3、寫Dockerfile,內容如下:

FROM docker.io/centos
LABEL "auth"="Uncle.Joker" \
      "mail"="[email protected]"
ENV TIME_ZOME Asia/Shanghai
RUN yum install -y gcc gcc-c++ make openssl-devel prce-devel
ADD nginx-1.14.2.tar.gz /opt/
RUN cd /opt/nginx-1.14.2 && \
    ./configure --prefix=/usr/local/nginx && \
    make -j 4 && \
    make install

#--清理系統
RUN rm -rf /opt/nginx* && \
    yum clean all && \
    echo "${TIME_ZOME}" > /etc/timezone && \
    ln -sf /usr/share/zoneinfo/${TIME_ZOME} /etc/localtime

COPY nginx.conf /usr/local/nginx/conf/
WORKDIR /usr/local/nginx/
EXPOSE 80
CMD ["./sbin/nginx","-g","daemon off;"]

daemon off的作用就是讓nginx在前臺運行,因爲docker和應用是共存亡的,如果是在後臺運行,運行結束後,docker會認爲你這個應用已經運行完了,所以docker就結束了。
4、Build鏡像

cd /root/dockerfile/nginx && docker bulid -t mynginx:1.14.2 .

然後查看鏡像

# docker image ls mynginx
mynginx             1.14.2              ad10dee662f1        46 hours ago        392 MB

5、運行鏡像

# 運行鏡像之前先創建一個網絡
# docker network create lnmp
# 運行鏡像
# docker run -itd --name lnmp_nginx --network lnmp -p 8888:80 -v /root/dockerfile/app/php/wwwroot:/usr/local/nginx/html mynginx:1.14.2

6、測試一下能否正常訪問

# cd /root/dockerfile/app/php/wwwroot && echo 'Dockerfile test ' >index.html

用Dockerfile搭建LNMP環境

PHP

一、準備源碼包和配置
1、目錄結構如下

[root@ecs-5704-0004 php]# tree ./
./
├── Dockerfile
├── php-7.0.32.tar.gz
└── php.ini

2、Dockerfile裏的內容如下:

FROM docker.io/centos
LABEL 'auth'='Uncle.Joke'\
      'mail'='[email protected]'
ENV TIME_ZOME Asia/Shanghai
RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libpng-devel openssl-devel
ADD php-7.0.32.tar.gz /opt/
RUN cd /opt/php-7.0.32 && \
    ./configure --prefix=/usr/local/php \
    --with-config-file-path=/usr/local/php/etc \
    --with-mysql --with-mysqli \
    --with-openssl --with-zlib --with-curl --with-gd \
    --with-jpeg-dir --with-png-dir --with-iconv \
    --enable-fpm --enable-zip --enable-mbstring && \
    make -j 4 && \
    make install

RUN cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
    sed -i 's/;daemonize = yes/daemonize = no/g' /usr/local/php/etc/php-fpm.conf && \
    cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf && \
    sed -i 's/127.0.0.1/0.0.0.0/g' /usr/local/php/etc/php-fpm.d/www.conf && \
    echo "${TIME_ZOME}" > /etc/timezone && \
    ln -sf /usr/share/zoneinfo/${TIME_ZOME} /etc/localtime

RUN rm -rf /opt/php* && yum clean all
WORKDIR /usr/local/php/
EXPOSE 9000
CMD ["./sbin/php-fpm","-c","/usr/local/php/etc/php-fpm.conf"]

3、Build鏡像

# cd /root/dockerfile/php && docker build -t myphp:7.0.32_v3 .

查看一下鏡像

myphp               7.0.32_v3           b3c32cede454        43 hours ago        1.05 GB

4、運行PHP

# run -itd --name lnmp_php --network lnmp -v /root/dockerfile/app/php/wwwroot:/usr/local/nginx/html myphp:7.0.32_v3

MySQL

mysql沒有去做專門的源碼編譯,太慢了,不過可以下載二進制包進行,和上面nginx的Dockerfile配置差不到多少,我這裏就直接拉取的官方mysql5.7的鏡像
1、創建一個存儲卷

# docker volume create mysql-volume

2、拉去鏡像啓動容器

# docker run -itd --name lnmp_mysql --network lnmp -p 3306:3306 -v mysql-volume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=lnmp123456 docker.io/centos/mysql-57-centos7

官方鏡像需要在拉去的時候指定一個密碼
3、測試創建數據庫

# docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wordpress"'

4、查看數據庫

# docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"show databases"'docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"show databases"'

5、可以在本地查看一下是否同步

# ls /var/lib/docker/volumes/mysql-volume/_data/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章