[docker] Docker构建LNMP笔记
Dockerfile构建LNMP环境 1. 先构建一个Nginx/PHP/Mysql共用的Centos基础镜像centos:v1 [1] Dockerfile内容如下: #base image FROM centos #maintainer MAINTAINER [email protected] #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 [email protected] 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 [email protected] #安装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
相关推荐
有梦就能实现 2020-06-01
zhendeshifeng 2020-06-21
oceanyang0 2020-08-15
FORYAOSHUYUN 2020-06-21
GimmeS 2020-06-14
lihy0 2020-06-11
liwf 2020-06-02
后厂村老司机 2020-06-01
nan00zzu 2020-05-30
FCLAMP 2020-05-20
yongzhang 2020-04-09
itmale 2020-03-03
Nicolase 2020-02-20
踩风火轮的乌龟 2020-02-16
CSDNMrWang 2020-02-03
执行命令brew install php72,出现下图即为安装成功;需要按照提示添加环境变量;重新加载配置|重启|停止|退出 nginxnginx -s reload|reopen|stop|quit
BingGoGo技术 2020-02-02
houjinkai 2020-01-17
herohope 2020-01-02