基于Docker搭建LNMP环境

听说docker 可以建立微服务,所以这几天就来学习搭建一下.
系统 : centos 7.1

1.从仓库拉取一个MySql的镜像

docker pull mysql:5.6

2.从仓库拉取一个php 镜像

docker pull php:7.0-fpm

3.从仓库拉取一个nginx 镜像

docker pull nginx:lastest

4.创建容器互联的网络 my-net(随便起名)

docker network create -d bridge my-net

-d 参数指定 Docker 网络类型,有 bridge overlay。其中 overlay 网络类型用于 Swarm mode,在本小节中你可以忽略它。

5.1 创建mysql容器,别名xy_mysql 并加入网络my-net

docker run -d --name xy_mysql  -p 3306:3306 -e MYSQL_ROOT_PASSWORD=xy123456 --network my-net   mysql:5.6

5.2 先在linux里的usr/local/php 下面新建php.ini 文件,和conf.d 文件夹
php.ini的内容:

extension=php_curl.so
extension=php_gd2.so
extension=php_mysql.so
extension=php_mysqli.so
extension=php_pdo_mysql.so
extension=php_pdo_odbc.so
extension=php_pdo.so

php.ini中表示的是开启php的额外扩展,按需要添加,也可以不要.
5.2.1 运行php 容器,别名xy_phpfpm,并加入网络my-net
-v /var/nginx/www/html:/var/www/html 表示是本地 php 文件的存储目录映射到容器内的/var/www/html文件夹中,
-v /usr/local/php:/usr/local/php表示挂载文件

   docker run -d --name xy_phpfpm \
   -v /var/nginx/www/html:/var/www/html \
   -v /usr/local/php:/usr/local/php \
   -p 9000:9000 --network my-net  php:7.0-fpm

5.2.2 进入 xy_phpfpm容器中

docker exec -ti xy_phpfpm  /bin/bash

更新apt-get并安装vim

apt-get update

等待大概6分钟

apt-get install vim 

5.2.4 docker 中php安装pdo_mysql 扩展
进入xy_phpfpm容器中不退出,接着安装扩展

 docker-php-ext-install pdo pdo_mysql

参考:在容器内安装pdo_mysql扩展
5.2.5 退出xy_phpfpm 容器

exit;

5.3 nginx 部署

5.30 部署前 的准备:

思路:

因为我这里没有nginx 的配置文件,就从nginx 容器中复制一份到主机中

  1. 先开启一个容器,以便能复制容器中的配置文件到主机
    docker run -d --name test_nginx -p 80:80 -d nginx:latest

  2. 复制容器中配置文件到主机的 /usr/nginx 文件夹中

得到test_nginx容器的id

docker ps -a

在这里插入图片描述
然后复制容器中 /etc/nginx 下的所有配置文件到到主机的 /usr/nginx 文件夹中

 docker cp 423aebc1c6d4:/etc/nginx   /usr/local
  1. 删除这个 名为 test_nginx 的容器
    docker stop  423aebc1c6d4
    docker rm  423aebc1c6d4

5.31 正式部署

运行nginx容器,别名xy_nginx 并加入到网络my-net

  docker run -d --name xy_nginx  \
   -p 80:80 \
   -v /var/nginx/www/html:/var/www/html \
   -v /usr/local/nginx/nginx.conf:/etc/nginx/nginx.conf \
   -v /usr/local/nginx/conf.d:/etc/nginx/conf.d     \
   -v /usr/local/nginx/logs:/var/log/nginx  \
   --network my-net  nginx:latest

'\'表示换行,但是命令不执行
这里有几个注意事项:

  • (1)第一个“-v”,是项目位置,把系统的/var/nginx/www/html项目放到挂载到容器的/var/www/html目录下;
  • (2)第二个“-v”,是挂载的主配置文件"nginx.conf",注意"nginx.conf"文件内有一行"include /etc/nginx/conf.d/*.conf;",这个include指向了子配置文件的路径,此处注意include后所跟的路径一定不要出错。
  • (3)第三个“-v”,把docker内子配置文件的路径也挂载了出来,注意要与(2)中include指向路径一致
  • (4)第四个“-v”,把docker内错误日志的路径也挂载了出来,注意要与/etc/nginx/nginx.conf 主配置的error_log指向路径/var/log/nginx一致
  • 在这里插入图片描述
  • (5)重点强调一下,nginx.conf是挂载了一个文件(docker是不推荐这样用的),conf.d挂载的是一个目录

思路:配置时一定要铆定一个思路:挂载出来的文件运行时是要加载到docker进程中去的!这样就不容易混淆。

5.3.1 修改nginx 的子配置文件

(nginx 的主配置文件 /usr/local/nginx/nginx.conf 加载*.conf,所以所有的以.conf结尾的 子配置文件相同位置的配置会按照拼音首字母先后优先级覆盖 )

只修改主机的 /usr/local/nginx/conf.d/default.conf 子配置的一小部分,其他的不变
原来的default.conf 内容:

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /usr/nginx/dacheng-wechat-web;
        index  index.html index.htm;
        autoindex  on;
	try_files $uri /index/index/page.html;
        #try_files $uri /index/map/page.html;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

修改之后:

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        #修改部分
        #root   /usr/nginx/dacheng-wechat-web;
         root    /var/www/html;
         #修改部分
        index  index.html index.htm index.php;
        autoindex  on;
	try_files $uri /index/index/page.html;
        #try_files $uri /index/map/page.html;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #修改部分
     location ~ \.php$ {
            root           /var/www/html;
            fastcgi_index  index.php;
            fastcgi_pass   xy_phpfpm:9000;
            #如果你的根目录和php容器的根目录不一样,这里的$document_root需要换成你php下的根目录,不然php就找不到文件了
    	    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

xy_phpfpm是容器别名;

5.4
然后进入到我们的php容器,然后我们在/var/www/html目录下新建一个index.php文件
内容:

<?php
try {
    $con = new PDO('mysql:host=mysql;dbname=test', 'xuye', 'xy123456');
    $con->query('SET NAMES UTF8');
    $res =  $con->query('select * from test');
    while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
        echo "id:{$row['id']} name:{$row['name']}";
    }
} catch (PDOException $e) {
     echo '错误原因:'  . $e->getMessage();
}

参考文章:

(1).docker 搭建lnmp
https://blog.csdn.net/xy752068432/article/details/75975065#comments

(2). docker 容器互联
https://yeasy.gitbooks.io/docker_practice/network/linking.html

(3) 在Docker容器中安装vim
https://blog.csdn.net/a785975139/article/details/80654037
(4)在docker 中配置nginx
https://blog.csdn.net/wangfei0904306/article/details/77623400
(5) 在docker 中配置nginx

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值