用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镜像

扫描二维码关注公众号,回复: 4868228 查看本文章
# 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/

猜你喜欢

转载自blog.51cto.com/7834466/2341381