美文网首页运维部署Docker容器思科DevNet
Ubuntu18.10中使用Docker搭建LNMP环境-多容器

Ubuntu18.10中使用Docker搭建LNMP环境-多容器

作者: 南瓜方糖 | 来源:发表于2018-12-16 13:25 被阅读6次
    docker

    没有使用 dockerfile 搭建,这样搞一遍对于新手来说应该更有助于理解。
    最好到 [ docker hub ] 注册一个账号,里边可以查看都有哪些镜像可以使用,也能把自己的镜像存过去。

    另外,这里还是有几个坑需要注意一下:

    • 挂载文件夹的创建:也就是执行 docker run -v /xxx:/xxx 这种命令的时候,如果宿主机并没有创建这些文件夹,那么执行后文件夹也会被创建,但是属于 root ,需要改下用户 chown -R wu.wu www

    • 挂载文件夹:文件夹挂载后宿主机的目录也就和容器的目录关联到了一起,但是如果 php 和 nginx 挂载目录不一致时会遇到 404 或者下载 php 文件等一系列错误。改正方法是把 nginx 和 php 文件夹挂载成一样的,或者在 nginx 的配置中,把 fastcgi_param SCRIPT_FILENAME *****$fastcgi_script_name; 中*****的地方改成 php 的挂载目录。比如创建 php 容器时,运行 -v ~/www/web:/var/www/html ,那么 nginx 中 ***** 的地址应该是 /var/www/html/

    • composer 的安装:composer是需要 php 支持的,如果宿主机没有 php 环境,就需要使用 composer 镜像来处理。


    docker 安装

    进入系统后,打开终端执行下 docker,然后根据返回信息安装。
    不是最新版,不过也没关系,只差几个小版本号。

    介意的去这里下载。

    在 ubuntu 系统中,docker 被添加了 masked,也就是被禁止建立启动链接。
    所以安装完成后不需要启动,直接执行下 docker --version 看看是否安装成功。

    wu@ubuntu:~$ docker --version
    Docker version 18.06.1-ce, build e68fc7a
    

    非 root 用户使用 docker

    docker 安装后,很多命令需要 root 用户才能执行,太烦,看到官网有说明,所以放心改。

    官网截图
    sudo groupadd docker
    sudo usermod -aG docker $USER
    reboot
    

    准备工作

    在 home/用户名/ 文件夹下创建以下文件夹和内容:

    wu@ubuntu:~/www
    ├── data
    ├── nginx
    │   └── conf.d
    │       └── default.conf
    └── web
        ├── index.html
        └── index.php
    
    
    

    这几个文件夹要做挂载用,然后 default.conf 内容如下:

    server {
        listen       80;
        server_name  localhost;
    
        location / {
            root   /usr/share/nginx/html;
            index  index.php  index.html index.htm;
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    
        location ~ \.php$ {
        fastcgi_pass   php-fpm-7-3:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
    

    mysql 安装

    因为 php 需要连接 mysql ,而 nginx 需要连接 php ,所以安装顺序为 mysql > php > nginx 。

    下载 mysql 5.7 镜像,然后挂载数据文件夹。

    docker pull mysql:5.7
    docker run --name mysql-5-7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d -v ~/www/data:/var/lib/mysql mysql:5.7
    

    php 安装

    下载 php-fpm:7.3 ,然后运行并关联到 mysql。

    docker pull php:7.3-fpm 
    docker run --name php-fpm-7-3 -d -v ~/www/web:/var/www/html --link mysql-5-7:mysql php:7.3-fpm 
    

    nginx 安装

    docker pull nginx
    docker run -d --name nginx -p 80:80 -v ~/www/web/:/usr/share/nginx/html  -v ~/www/nginx/conf.d:/etc/nginx/conf.d  --link php-fpm-7-3:php-fpm nginx  
    

    打开浏览器访问 localhost :


    phpinfo

    composer 安装

    本地没有 php 就装不上 composer, 又不想进 php 容器去装,查了一圈资料也没个详细点的说明,还是用镜像吧。镜像唯二的缺点就是 命令太长不能更换 composer 源

    获取 composer 镜像,然后挂载到本地目录创建 laravel 5.7 的新项目。

    docker pull composer
    docker run --rm -it  --volume ~/www/web:/app  composer create-project  laravel/laravel laravel 5.7
    cd ~/www/web
    sudo chown -R wu.wu laravel/
    sudo chmod +777 laravel/storage 
    

    加上 --rm ,每次运行完删掉容器避免堆积,反正这个容器也不能复用。
    然后再修改 nginx 配个域名,加下 hosts,打开浏览器,完美。


    image.png

    artisan 使用

    有了 composer 的经验,artisan 想必也是一个镜像。
    到 docker hub 上搜一把,果然很多,但是没有官方认证过的,而且不用 dockerfile 来搭建也没有查到相关的资料,所以这里还是暂时放弃挣扎吧。

    docker exec -it php-fpm-7-3 bash
    cd /usr/share/nginx/html/laravel
    php artisan make:auth
    

    刷新后可以看到结果已经出来了。

    auth

    结果出来了,试下数据库的连接,先配置下 mysql 远程访问:

    docker exec -it mysql-5-7 bash
    mysql -uroot -p
    grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
    flush privileges;
    

    商店直接安装 datagrip ,打开并新建链接,ok。


    2018-12-16 12-34-16 的屏幕截图.png

    结尾

    多容器的手工搭建就先到这里吧,最后的 artisan 实在是太不方便,接下来研究下用 docker-compose 和 dockerfile 来搭建会不会方便些。

    相关文章

      网友评论

        本文标题:Ubuntu18.10中使用Docker搭建LNMP环境-多容器

        本文链接:https://www.haomeiwen.com/subject/weqphqtx.html