dockerfile/├── nginx│ ├── Dockerfile│ ├── nginx-1.12.1.tar.gz│ └── nginx.conf└── php├── Dockerfile├── php-5.6.31.tar.gz└── php.ini
nginx、php里面分别存放Dockerfile文件、源码包 。nginx目录下还放了nginx.conf配置文件,php目录下也放置了php.ini配置文件 。
有些人可能会问为什么要把nginx.conf、php.ini配置文件放到这里,有两个原因,其一,把这两个默认的配置文件放在这里可以提前修改好所需要的参数,当容器启动后,就不需要在进入容器去修改了 。当然,我这里只是练习环境,并未对这两个文件做任何更改 。其二,在实际环境中,这两个文件是经常需要修改的,单独拿出来后在启动容器时你可以把这两个文件mount到容器中,便于管理 。
一、Nginx构建
FROM centos:7 // 以 centos:7 镜像为基础镜像MAINTAINER yuanma // 指定镜像制作者ENV TIME_ZOME Asia/Shanghai // 设置时区环境变量RUN yum -y install gcc gcc-c++ make openssl-devel pcre-devel // 使用 RUN 命令下载编译相关工具,为后面的编译做准备ADD nginx-1.12.1.tar.gz /tmp // ADD 可以自动解压文件,并将解压后的文件 COPY 到指定目录RUN cd /tmp/nginx-1.12.1 &&./configure --prefix=/usr/local/nginx &&make &&make install // 进入到 nginx 临时安装目录,然后执行编译安装RUN rm -rf /tmp/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/ # 转移构建目录中的配置文件到 nginx 配置文件所在目录,以达到修改 nginx 配置文件的目的WORKDIR /usr/local/nginx/ # 指定工作目录,以后每一层的当前目录都是此目录EXPOSE 80 // 说明将对外暴露80端口,但这不代表会自动映射80端口到宿主机CMD ["./sbin/nginx","-g","daemon off;"] // 指定容器启动后,在容器中执行的命令,这里表示容器启动后,就启动nginx 。
构建镜像
docker build -tnginx:demo(镜像名称)
2、PHP构建
FROM centos:7 // 以 centos:7 镜像为基础镜像MAINTAINER yuanma // 指定镜像制作者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 # 使用 RUN 命令下载编译相关工具,为后面的编译做准备ADD php-5.6.31.tar.gz /tmp/ // ADD 可以自动解压文件,并将解压后的文件 COPY 到指定目录RUN cd /tmp/php-5.6.31 &&./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 // 进入到 php 临时安装目录,然后执行编译安装RUN cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf &&sed -i 's/127.0.0.1/0.0.0.0/g' /usr/local/php/etc/php-fpm.conf &&sed -i "21a daemonize=no" /usr/local/php/etc/php-fpm.conf &&echo "${TIME_ZOME}" > /etc/timezone &&ln -sf /usr/share/zoneinfo/${TIME_ZOME} /etc/localtime // 修改 php-fpm 配置文件COPY php.ini /usr/local/php/etc/ //转移构建目录中的配置文件到 PHP 配置文件所在目录,以达到修改 PHP 配置文件的目的RUN rm -rf /tmp/php* && yum clean all // 同时删除安装 PHP 时产生的一些临时文件WORKDIR /usr/local/php/ // 指定工作目录,以后每一层的当前目录都是此目录EXPOSE 9000 // 说明将对外暴露9000端口,但这不代表会自动映射9000端口到宿主机CMD ["./sbin/php-fpm","-c","/usr/local/php/etc/php-fpm.conf"] // 指定容器启动后,在容器中执行的命令,这里表示容器启动后,就启动php-fpm 。
构建镜像
docker build -tphp:demo(镜像名称)
3、MySQL构建
FROM centos:7 # 以 centos:7 镜像为基础镜像MAINTAINER yuanma # 指定镜像制作者ENV TIME_ZOME Asia/Shanghai # 设置时区环境变量RUN yum install mysql mysql-serverRUN /etc/init.d/mysqld start &&mysql -e "grant all privileges on *.* to 'root'@'%' identified by 'abc123';" &&mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by 'abc123';"//root在本地,非本地登录时都使用abc123密码EXPOSE 3306CMD ["mysqld_safe"]
构建镜像
docker build -tmysql:demo(镜像名称)
4、运行容器
首先创建自定义网络lnmp,然后运行ningx、php这些容器的时候加入到lnmp网络中来
推荐阅读
- 电脑装系统的原理知识介绍,想学电脑装系统,这些知识必须要懂
- 几十年前的操作系统用到现在,下一代操作系统会是什么样的?
- 英特尔发布新一代架构,IPC性能领先对手AMD25%!难道又是PPT?
- 苦瓜茶的好处,苦瓜茶的副作用
- 购物系统需求分析
- 基于无线传感器网络的智能交通系统
- 一个真实世界机器学习系统的架构
- Windows危机重重,谷歌全新操作系统Fuchsia发布在即
- 「PHP编程」安装开发环境太烦?告诉你几个简单方法,分分钟搞定
- 可视化架构设计——C4介绍