Dockerfile构建LNMP环境
1. 先构建一个Nginx/PHP/Mysql共用的Centos基础镜像centos:v1
[1] Dockerfile内容如下:
#base image
FROM centos
#maintainer
MAINTAINER liu86th@sina.com
#add epel and 163 aliyun yum
RUN yum install wget epel-release -y \
&& mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back \
&& wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/Centos-7.repo \
&& wget -P /etc/yum.repos.d/ http://mirrors.163.com/.help/CentOS7-Base-163.repo \
&& yum clean all \
&& yum makecache \
&& yum -y install pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel
#change timzone to Asia/Shanghai
#RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[2] 执行构建命令
[root@server ~]# docker build -t centos:v1 .
[root@server ~]# docker images
2. 构建Nginx
[1] Dockerfile内容如下:
# base image
FROM centos:v1
MAINTAINER liu86th@sina.com
ADD nginx-1.17.2.tar.gz /usr/local/src
WORKDIR /usr/local/src/nginx-1.17.2
# 安装依赖包
RUN groupadd www && useradd -M -s /sbin/nologin www -g www \
&& yum install -y libxslt-devel gd gd-devel GeoIP GeoIP-devel pcre pcre-devel libxml2 libxml2-dev libxslt-devel \
&& ./configure --user=www --group=www --prefix=/usr/local/nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install \
&& mkdir /usr/local/nginx/conf/conf.d
COPY nginx.conf /usr/local/nginx/conf/nginx.conf
COPY fastcgi_params /usr/local/nginx/conf/fastcgi_params
EXPOSE 80
# docker 容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,如果docker容器pid=1挂了,那么docker容器便会直接退出。
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
[2] 构建镜像
[root@server ~]# docker build -t nginx:v1 .
[root@server ~]# docker images
[root@server ~]# docker run -d --name nginx -p 8888:80 -v E:\Docker\wwwroot:/home/wwwroot --link=php:php nginx:v1
3. 构建PHP镜像
[1] Dockerfile内容如下:
# base image
FROM centos:v1
MAINTAINER liu86th@sina.com
#安装libzip依赖包
ADD libzip-1.2.0.tar.gz /usr/local/src
WORKDIR /usr/local/src/libzip-1.2.0
RUN ./configure && make && make install
#安装依赖包和编译php7.3,并设置php-fpm进程前台运行,与容器生命周期绑定
ADD php-7.3.8.tar.gz /usr/local/src
WORKDIR /usr/local/src/php-7.3.8
RUN yum -y install libxml2 libxml2-devel libzip bzip2 bzip2-devel libjpeg-turbo libjpeg-turbo-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel libcurl libcurl-devel \
&& echo '/usr/local/lib64' >> /etc/ld.so.conf && echo '/usr/local/lib' >> /etc/ld.so.conf && echo '/usr/lib' >> /etc/ld.so.conf && echo '/usr/lib64' >> /etc/ld.so.conf && ldconfig -v && cp -frp /usr/lib64/libldap* /usr/lib/ && cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h \
&& ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-config-file-scan-dir=/usr/local/php/conf.d --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv --with-iconv-dir --with-freetype-dir=/usr/local/freetype --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-sysvshm --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-intl --enable-pcntl --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --with-libmbfl --enable-fileinfo --enable-opcache --with-xsl --enable-calendar --enable-exif --with-pcre-regex && make && make install \
&& cp /usr/local/php/etc/php-fpm.conf.default /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 \
&& groupadd www && useradd -M -s /sbin/nologin -g www www \
&& sed -i -e 's@;pid = run/php-fpm.pid@pid = run/php-fpm.pid@g' -e 's@nobody@www@g' -e 's@listen = 127.0.0.1:9000@listen = 0.0.0.0:9000@g' /usr/local/php/etc/php-fpm.conf \
&& sed -i 's@;daemonize = yes@daemonize = no@g' /usr/local/php/etc/php-fpm.conf
EXPOSE 9000
CMD ["/usr/local/php/sbin/php-fpm"]
#注意: 上面的sed,有可能不准确,可能需要手动修改www.conf中的listen = 127.0.0.1:9000 => listen = 0.0.0.0:9000的监听端口变化
[2] 构建镜像
[root@server ~]# docker build -t php:v1 .
[root@server ~]# docker images
[root@server ~]# docker run -d --name php -v E:\Docker\wwwroot:/home/wwwroot php:v1
3. 构建Mysql,因为本地使用所以直接用官方的镜像启动
[1] 创建容器前,我们创建一个数据卷mysql-volume,把它挂载到mysql容器中,实现数据持久化
[root@server ~]# docker volume create mysql-volume
[2] 启动mysql容器,如果你本地有mysql镜像,它会引用本的的镜像,如果没有它会去docker hub中拉取:
[root@server ~]# docker run -itd --name mysql --network lnmp -p 13306:3306 --mount src=mysql-volume,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
4. 运行容器
[1] 先创建一个自定义网络,运行ningx、php这些容器的时候加入到lnmp网络中来:
[root@server ~]# docker network ls
[root@server ~]# docker network create lnmp
[2] 运行php
[root@server ~]# docker run -d --name php --network lnmp -v E:\Docker\wwwroot:/home/wwwroot -v E:\Docker\phplogs:/usr/local/php/var/log -v E:\Docker\phpconf:/usr/local/php/etc php:v1
[3] 运行nginx
[root@server ~]# docker run -d --name nginx --network=lnmp -p 8888:80 -v E:\Docker\wwwroot:/home/wwwroot -v E:\Docker\wwwlogs:/usr/local/nginx/logs -v E:\Docker\wwwconf:/usr/local/nginx/conf nginx:v1
[4] 运行mysql
[root@server ~]# docker run -itd --name mysql --network lnmp -p 13306:3306 --mount src=mysql-volume,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
分享到:
相关推荐
Windows10 使用 docker 逐一构建 [lnmp] 目录结构
docker-compose快速搭建lnmp+redis的开发环境
docker-compose nginx mysql redis php 及php拓展安装
docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,...
该txt文本文件中有docker镜像百度网盘下载地址与分享码,以及PHP交流群QQ 。 环境组件是 CentOS7+nginx+php7.4+MySQL5.7 ,需要的小伙伴欢迎下载使用! 遇到任何问题,可以通过 QQ 群进行技术交流。
.Compose配置文件指令与一键部署LNMP网站 .一键部署Nginx代理Tomcat集群 .一键部署多节点爬虫程序(模拟)
学习docker时看到的学习笔记
狂神docker笔记(超详细) 1:docekr进阶 2: docker基础入门 都是自己亲自看着bilibili上学习敲打的,还标注了一些,然后还有一些自己的err的解决方法
本篇文章主要介绍了使用docker创建集成服务lnmp环境,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
docker集成thinkPHP5.0之LNMP开发环境 docker集成thinkPHP5.0之LNMP开发环境
docker-compose构建Redis哨兵模式镜像包
此资源是使用docker搭建lnmp运行环境的脚本,需要使用docker-compose进行构建
# docker搭建lnmp环境 <!-- TOC --> - [docker搭建lnmp环境](#docker搭建lnmp环境) - [一、Dockerfile定制镜像](#一dockerfile定制镜像) - [二、docker-compose](#二docker-compose) - [三、docker-...
狂神说Docker容器学习笔记全
docker-compose 安装lnmp 需要的文件用于docker测试安装 php运行环境涉及到的文件.
快速的搭建一个php开发环境,镜像包括php,mysql,nginx,适合php的开发者
centos7下基于docker-compose构建的lnmp环境,本环境构建过程使用的是yii2进行相关测试,所以可以支持yii2的运行 LNMP(Docker + Docker-compose + Nginx + MySQL5.7 + ...
Docker学习笔记压缩包
基于 docker-compose 开发的运行在 Docker 上的 LNMP 开发环境,包含 Nginx、 PHP
TeamCity.Virtual, Docker 和for构建运行步骤的TeamCity插件 Docker/vagrant构建 TeamCity特性插件检测和报告已经安装的vagrant 和 docker使用专用构建 runner 在 Docker/Vagrant 构建 runner的帮助下,在虚拟化环境...