windows 10 配置 docker lnmp 开发环境

win10 部署 docker lnmp 开发环境

windows 安装 docker

这步省略,网上很多。自己安装

下载地址

安装LNMP

使用仓库安装,或者导入,都可以

php Dockerfile
FROM centos:7
MAINTAINER www.aliangedu.com
RUN yum -y install wget
RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum clean all && yum makecache

RUN yum install -y gcc gcc-c++  make zlib zlib-devel pcre pcre-devel  libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers libmcrypt libmcrypt-devel autoconf

WORKDIR /tmp
ADD https://www.php.net/distributions/php-7.2.34.tar.gz /tmp/
RUN tar zxvf /tmp/php-7.2.34.tar.gz
WORKDIR  /tmp/php-7.2.34
RUN ls -al
RUN ./configure \
--prefix=/usr/local/php \
--with-mcrypt=/usr/local/libmcrypt \
--with-zlib \
--enable-mbstring \
--with-openssl \
--with-mysql \
--with-mysqli \
--with-mysql-sock \
--with-gd \
--with-jpeg-dir=/usr/lib \
--enable-gd-native-ttf  \
--enable-pdo \
--with-pdo-mysql \
--with-gettext \
--with-curl \
--with-pdo-mysql \
--enable-sockets \
--enable-bcmath \
--enable-xml \
--with-bz2 \
--enable-zip \
--enable-freetype \
--enable-opcache \
--enable-fpm

RUN make && make install

RUN ln -s /usr/local/php/bin/pear /usr/bin/pear
RUN ln -s /usr/local/php/bin/pecl /usr/bin/pecl
RUN ln -s /usr/local/php/bin/php /usr/bin/php
RUN ln -s /usr/local/php/sbin/php-fpm /usr/bin/php-fpm
RUN ln -s /usr/local/php/bin/phpize /usr/bin/phpize

RUN cp ./php.ini-development /usr/local/php/lib/php.ini
RUN cp /usr/local/php/etc/php-fpm.conf.default  /usr/local/php/etc/php-fpm.conf
RUN cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
RUN sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.d/www.conf
RUN sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf

WORKDIR /usr/local/php

EXPOSE 9000
CMD php-fpm
nginx Dockerfile
# nginx Dockerfile
# Version 1.0
# author fendo

# Base images 基础镜像
FROM centos:centos7

#安装相关依赖
RUN yum -y install  gcc gcc-c++ autoconf automake make
RUN yum -y install  zlib zlib-devel openssl* pcre* wget lua-devel
RUN yum -y install unzip zip

RUN mkdir -p /etc/nginx/lua


#安装lua-waf
#WORKDIR  /tmp
#ADD https://github.com/loveshell/ngx_lua_waf/archive/master.zip /tmp/
#RUN unzip master.zip
#RUN cp -r ngx_lua_waf-master /etc/nginx/waf

#安装lua
#WORKDIR  /tmp
#ADD https://github.com/agentzh/lua-resty-memcached/archive/v0.11.tar.gz /tmp/
#RUN tar zxf v0.11.tar.gz
#RUN cp -r ./lua-resty-memcached-0.11/lib/resty/memcached.lua  /etc/nginx/lua/
#WORKDIR  /tmp
#ADD https://github.com/LuaJIT/LuaJIT/archive/v2.0.5.tar.gz /tmp/
#RUN tar zxf v2.0.5.tar.gz
#WORKDIR  /tmp/LuaJIT-2.0.5
#RUN make PREFIX=/usr/local/luajit
#RUN make install PREFIX=/usr/local/luajit
#WORKDIR  /tmp
##ADD https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz /tmp/
#RUN tar -xzvf v0.3.0.tar.gz
#RUN cp -r ngx_devel_kit-0.3.0/ /usr/local/src/
#WORKDIR  /tmp
#ADD https://github.com/openresty/lua-nginx-module/archive/v0.10.13.tar.gz /tmp/
#RUN tar -xzvf v0.10.13.tar.gz
#RUN cp -r lua-nginx-module-0.10.13/ /usr/local/src/
#设置环境变量
#RUN export LUAJIT_LIB=/usr/local/lib
#RUN export LUAJIT_INC=/usr/local/include/luajit-2.0




#nginx ngx_cache_purge模块
#ADD http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz  /tmp/
#WORKDIR  /tmp
#RUN tar -xzvf ngx_cache_purge-2.3.tar.gz
#RUN cp -r ngx_cache_purge-2.3/ /usr/local/src/



#nginx echo模块
#ADD https://github.com/openresty/echo-nginx-module/archive/v0.62.tar.gz  /tmp/
#WORKDIR  /tmp
#RUN tar -xzvf v0.62.tar.gz
#RUN cp -r echo-nginx-module-0.62/ /usr/local/src/


#nginx check模块
#ADD https://github.com/yaoweibin/nginx_upstream_check_moduLe/archive/master.zip  /tmp/
#WORKDIR  /tmp
#RUN unzip master.zip
#RUN cp -r nginx_upstream_check_module-master/ /usr/local/src/

#nginx安装
WORKDIR  /tmp
ADD http://nginx.org/download/nginx-1.19.4.tar.gz /tmp/
RUN useradd -M -s /sbin/nologin nginx
RUN tar -zxvf nginx-1.19.4.tar.gz
RUN mkdir -p /usr/local/nginx
RUN mkdir -p /var/cache/nginx
RUN cd /tmp/nginx-1.19.4 \
    && ./configure \
    --prefix=/etc/nginx \
       --sbin-path=/usr/sbin/nginx\
       --modules-path=/usr/lib/nginx/modules \
       --conf-path=/etc/nginx/nginx.conf \
       --error-log-path=/log/error.log \
       --http-log-path=/log/access.log \
       --pid-path=/var/run/nginx.pid \
       --lock-path=/var/run/nginx.lock \
       --http-client-body-temp-path=/var/cache/nginx/client_temp \
       --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
       --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
       --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
       --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
       --user=nginx \
       --group=nginx \
       --with-compat \
       --with-file-aio \
       --with-threads \
       --with-http_addition_module \
       --with-http_auth_request_module \
       --with-http_dav_module \
       --with-http_flv_module \
       --with-http_gunzip_module \
       --with-http_gzip_static_module \
       --with-http_mp4_module \
       --with-http_random_index_module \
       --with-http_realip_module \
       --with-http_secure_link_module \
       --with-http_slice_module \
       --with-http_ssl_module \
       --with-http_stub_status_module \
       --with-http_sub_module \
       --with-http_v2_module \
       --with-mail \
       --with-mail_ssl_module \
       --with-stream \
       --with-stream_realip_module \
       --with-stream_ssl_module \
       --with-stream_ssl_preread_module \
       #--add-module=/usr/local/src/lua-nginx-module-0.10.13 \
        #--add-module=/usr/local/src/ngx_devel_kit-0.3.0 \
        #--add-module=/usr/local/src/ngx_cache_purge-2.3 \
        #--add-module=/usr/local/src/echo-nginx-module-0.62 \
        #--add-module=/usr/local/src/nginx_upstream_check_module-master \
       --with-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.19.4/debian/debuild-base/nginx-1.19.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie' \
    && make && make install


#映射端口
EXPOSE 80
ADD ./cp/nginx.conf /etc/nginx/nginx.conf
RUN mkdir /etc/nginx/conf.d && mkdir /www
ADD ./nginx/conf/default.conf /etc/nginx/conf.d


#CMD 运行以下命令
CMD ["nginx","-g","daemon off;"]
mysql Dockerfile
# mysql Dockerfile
# Version 1.0
# author fendo

# Base images 基础镜像
FROM centos:centos7

#安装相关依赖

#yum
RUN yum -y install  libaio-devel.x86_64 numactl.x86_64
RUN yum -y install openssl openssl-devel



#pt工具安装
#WORKDIR  /usr/local/src
#RUN yum install -y gcc
#RUN yum install -y perl-CPAN perl-Time-HiRes perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker cpan perl-Digest-MD5 perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL
#ADD http://www.percona.com/redir/downloads/percona-toolkit/2.1.1/percona-toolkit-2.1.1.tar.gz /usr/local/src
#RUN tar zxvf percona-toolkit-2.1.1.tar.gz
#WORKDIR /usr/local/src/percona-toolkit-2.1.1
#RUN perl Makefile.PL PREFIX=/usr/local/percona-toolkit
#RUN make && make install




RUN useradd mysql
WORKDIR  /usr/local/src
#ADD https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz /usr/local/src
ADD mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz /usr/local/src
#RUN tar zxvf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
RUN mv /usr/local/src/mysql-5.7.31-linux-glibc2.12-x86_64 /usr/local/mysql

RUN cd /usr/local/mysql
RUN mkdir -p /usr/local/mysql/data
RUN mkdir -p /var/lib/mysql
RUN echo "">/etc/my.cnf
#初始化数据库
RUN /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 2>/tmp/pass
RUN /usr/local/mysql/bin/mysql_ssl_rsa_setup  --datadir=/usr/local/mysql/data

#安装pbk
#RUN yum -y install numactl
#ADD https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/tarball/percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz /usr/local/src
#ADD percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz /usr/local/src
#RUN tar zxvf percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz
#RUN mv percona-xtrabackup-2.4.9-Linux-x86_64 /usr/local/xtrabackup
#RUN ln -s /usr/local/xtrabackup/bin/* /usr/bin/

MAINTAINER wjj wjj@qq.com
RUN chown -R mysql.mysql /usr/local/mysql/data
ENV PATH $PATH:/usr/local/mysql/bin
RUN  echo "passwd=\"`cat /tmp/pass |grep root@localhost:|awk '{print $11}'`\"" >>/usr/local/src/init.sh

RUN  echo "mysql -uroot -p\$passwd --connect-expired-password  -e \"alter user user() identified by 'root'\";" >>/usr/local/src/init.sh
RUN  echo "mysql -uroot -proot -e \"update mysql.user set Host='%' where User='root' limit 1;\";" >>/usr/local/src/init.sh
RUN  echo "mysql -uroot -proot -e \"flush privileges\";" >>/usr/local/src/init.sh

#映射端口
EXPOSE 3306

#CMD 运行以下命令
CMD /usr/local/mysql/bin/mysqld_safe

#运行命令
#docker build -f dockerfile  -t mysql:1  ./
#docker run --name mysql1 --hostname mysql1 --ip 172.17.0.2 -p 3306:3306   -v mysql_conf:/etc  -v mysql_data:/usr/local/mysql  -itd mysql:1
redis Dockerfile
FROM centos:centos7

#安装依赖
RUN yum -y install tcl gcc automake autoconf libtool make 
#RUN yum -y install centos-release-sc1 
RUN rpm -ivh https://cbs.centos.org/kojifiles/packages/centos-release-scl-rh/2/3.el7.centos/noarch/centos-release-scl-rh-2-3.el7.centos.noarch.rpm
RUN yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
RUN scl enable devtoolset-9 bash
#RUN "source /opt/rh/devtoolset-9/enable" >> /etc/profile && gcc -v

WORKDIR  /tmp
#ADD http://download.redis.io/releases/redis-5.0.9.tar.gz /tmp/
ADD redis-5.0.9.tar.gz /tmp/
# PREFIX=/usr/local/redis/ 
# WORKDIR /tmp/redis-5.0.9 #&& make && make install PREFIX=/usr/local/redis
RUN cd /tmp/redis-5.0.9 && make && make install PREFIX=/usr/local/redis
ADD ./redis.conf  /usr/local/redis/
RUN cp /usr/local/redis/bin/* /usr/bin/
WORKDIR /usr/local/src



#映射端口
EXPOSE 6379

#CMD 运行以下命令
CMD redis-server /usr/local/redis/redis.conf

构建镜像

# 当前目录创建镜像
$ docker build -t centos/php:7.2 -f .\docker-php .
$ docker build -t centos/nginx:latest -f .\docker-nginx .
$ docker build -t centos/mysql:5.7 -f .\docker-mysql .
$ docker build -t centos/redis:5.0 -f .\docker-redis .

# 查看镜像
❯ docker images
REPOSITORY            TAG              IMAGE ID       CREATED        SIZE
centos/mysql          5.7              4401a0a40b1d   3 days ago     3.74GB
centos/php            7.2              cdb3f044dabf   3 days ago     1.72GB
centos/nginx          latest           c25a3e671855   3 days ago     765MB
redis                 5.0              9b58edd0f903   6 weeks ago    1.17GB

创建容器

首先需要docker-compose命令, 自己安装

下面是docker-compose.yaml文件

version : "3" #docker-compose的版本
services: #容器的集合
  mysql: #项目名称
    #build:
    #  dockerfile: docker-mysql
    #  context: ./
    image: centos/mysql:5.7 #镜像名称,如果是通过dockerfile创建的可以使用build属性
    container_name: mysql  #容器名称,如果没有这个属性的话,docker-compose会随机分配一个名字给容器
    privileged: true    #允许操作的表示,如果不加的话会出现类似,permission deny的错误
    ports:
      - 3306:3306  #开放宿主机和容器的映射端口
    environment:
      MYSQL_ROOT_PASSWORD: root  #mysql镜像中的环境变量
    volumes:
      - mysql_data:/usr/local/mysql/data
  php:
    #build:
    #  dockerfile: docker-php
    #  context: ./
    image: centos/php:7.2
    container_name: php
    privileged: true
    ports:
      - 9000:9000
    volumes:
      - C:/web:/www  #挂载卷,需要注意的是,php在以模块的形式加载到nginx的时候,需要他们两个的目录结构一致,否则nginx无法加载php,但是 html等静态问价可以正常访问。
    environment:
      APP_ENV: dev
  #php74:
  #  image: php:7.4
  #  container_name: php74
  #  privileged: true
  #  ports:
  #    - 9074:9000
  #  volumes:
  #    - ./nginx/www:/www
  #  environment:
  #    APP_ENV: test
  #php7325:
  #  image: php:7.3.25
  #  container_name: php7325
  #  privileged: true
  #  ports:
  #    - 9075:9000
  #  volumes:
  #    - ./nginx/www:/www  
  #  environment:
  #    APP_ENV: test
  nginx:
    #build:
    #  dockerfile: docker-nginx
    #  context: ./
    image:  nginx:latest
    container_name: nginx
    privileged: true
    restart: always
    ports:
      - 80:80
      - 81:81
      - 82:82
      - 83:83
      - 84:84
      - 85:85
      - 86:86
    volumes:
      - ./nginx/conf:/etc/nginx/conf.d  # 当前目录影射到容器中
      - ./nginx/log:/log
      - C:/web:/www
  redis:
    image: redis:5.0
    container_name: redis
    privileged: true
    ports:
      - 6379:6379
volumes:
    mysql_data: {}

运行命令

docker-compose up -d

# 查看容器
❯ docker ps -a
CONTAINER ID   IMAGE                 COMMAND                  CREATED      STATUS       PORTS                                           NAMES
b4790c8c7068   nginx:latest          "/docker-entrypoint.…"   2 days ago   Up 9 hours   0.0.0.0:80-86->80-86/tcp, :::80-86->80-86/tcp   nginx
75224b173b86   centos/php:7.2        "/bin/sh -c php-fpm"     2 days ago   Up 9 hours   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp       php
6e499aadff0a   centos/mysql:5.7      "/bin/sh -c /usr/loc…"   2 days ago   Up 9 hours   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp       mysql
a401b297440e   redis:5.0             "/bin/sh -c 'redis-s…"   2 days ago   Up 9 hours   0.0.0.0:6379->6379/tcp, :::6379->6379/tcp       redis

进入容器配置

# 进入容器
> docker exec -it php bash
# 安装redis扩展
[root@75224b173b86 php]# cd /usr/local/src/
[root@75224b173b86 src]# ls
package.xml  redis-5.3.2  redis-5.3.2.tgz
[root@75224b173b86 src]# cd redis-5.3.2
[root@75224b173b86 src]# phpize
[root@75224b173b86 src]# ./configure --with-php-config=/usr/local/php/bin/php-config
[root@75224b173b86 src]# make && make install
[root@75224b173b86 src]# php -i |grep redis


# 配置redis密码,监听地址
> docker exec -it redis bash
vim redis.conf
requirepass root
bind 0.0.0.0

# 初始化mysql,设置密码
创建nginx配置

当前目录./nginx/conf/default.conf, 此目录就是nginx dockerfile 映射的目录

server {
    listen       80;
    server_name www.test1.com;
    root /www/test;
    location / {
        index index.php  index.html index.htm;
    }
    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

测试

在目录c:/web/创建一个index.php

<?php
phpinfo();

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3

nginx 开这么多端口干啥?

2年前 评论

@xuanjiang 不想用多域名,只有开多端口了

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
39
粉丝
9
喜欢
71
收藏
102
排名:461
访问:1.9 万
私信
所有博文
社区赞助商