Docker 安装 Lnmp 环境 !

  • 服务器搭建 lnmp 环境
    后来发现有一键安装的镜像, 后面再做尝试.(Laradock) 先记录下一步一步的踩坑过程...
    之前安装的.png

    这是之前安装的, 删掉再来一遍...
  • 容器删除命令
docker rm -f [容器id or 容器名]

-f :通过 SIGKILL 信号强制删除一个运行中的容器。

-l :移除容器间的网络连接,而非容器本身。

-v :删除与容器关联的卷。

  • 这是我删除的命令, 报错了
docker rm -f 99fc29787153 // 

Error response from daemon: Conflict, cannot remove the default name of the container
Error response from daemon: Conflict, cannot remove the default name of the container
Error response from daemon: Conflict, cannot remove the default name of the container
这种情况的可能原因是在过去的某个时刻,已创建了一个命名容器,然后您已将其保持运行状态。之后,主机因任何原因重新启动,并且没有优雅地终止容器。剩下的文件现在似乎阻止你重新生成旧名称的新容器,因为系统认为旧容器仍然存在。

我们先使用docker  ps  -a 看看所有容器的运行记录,以异常方式退出的容器将具有非零状态代码。根据名称搜索需要的名称,然后使用实际的十六进制代码将其删除  docker rm  xxxxxx。

但是,有时候发现-a并没有多余信息。则可用手动删除容器方法。即删除/var/lib/docker/containers/下的对应文件夹,将其删除,注意使用root权限 

手动删除之后, 再次执行, 就可以成功执行了! 现在我的 docker 里面是空的了

安装 MySQL

  • 拉取 MySQL 镜像
docker pull mysql:5.7.24
  • 查看 MySQL 镜像
docker images 
  • 启动容器
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=lzm123456 --name lzm_mysql mysql:5.6
  • 参数说明
    -d 让容器在后台运行
    -p 添加主机到容器的端口映射
    -e 设置环境变量,这里是设置mysql的root用户的初始密码,这个必须设置
    –name 容器的名字,随便取,但是必须唯一

  • 查看容器

docker ps 
mysql container

安装 PHP

  • 拉取 PHP 镜像
docker pull php // 默认从官方拉取最新版
docker pull php:7.3.18-fpm // 也可以指定版本
  • 查看 PHP 镜像
docker images 
  • 启动 PHP 容器
    启动 PHP 的容器的时候, 和 MySQL容器 建立关联, 这个是核心, 两个容器间进行交互
 docker run -d -v /mnt/nginx/www/html:/var/www/html -p 9000:9000 --link lzm_mysql:mysql --name lzm_php php:7.3.18-f pm
  • 参数说明
    -d 让容器在后台运行
    -p 添加主机到容器的端口映射
    -v 添加目录映射,即主机上的/mnt/nginx/www/html和容器中/var/www/html目录是同步的
    –name 容器的名字
    –link 与另外一个容器建立起联系,这样我们就可以在当前容器中去使用另一个容器里的服务。

ps : 容器中默认是没有vim的,所以我们首先要安装vim,需要注意的是安装前记得先执行apt update命令,不然安装会出现问题。

在/mnt/nginx/www/html 创建 phpinfo.php


image.png
  • 进入容器
docker exec -it lzm_php /bin/bash
container

我们发现我们在主机的/var/nginx/www/html目录中新建的文件也在容器里的/var/www/html目录中,因为在创建容器的时候,我们已经把主机中的目录挂载到了容器中去了。

安装 Nginx

  • 取最新版的 Nginx 镜像
$ docker pull nginx:latest
  • 查看自己安装的镜像
docker images
下载的镜像

在上图中可以看到我们已经安装了最新版本(latest)的 nginx 镜像

  • 启动容器 和 PHP 进行关联
docker run -d -p 80:80 --name lzm_nginx -v /mnt/nginx/www/html:/var/www/html/ --link lzm_php:php --name lzm_nginx nginx:latest
  • 参数说明:
    -d 让容器在后台运行
    -p 添加主机到容器的端口映射
    -v 添加目录映射,这里最好nginx容器的根目录最好写成和php容器中根目录一样。但是不一点非要一模一样,如果不一样在配置nginx的时候需要注意
    –name 容器的名字
    –link 与另外一个容器建立起联系
  • 修改 Nginx 容器配置
    进入容器
docker exec -it lzm_nginx /bin/bash

查看配置文件, 在 /etc/nginx/conf.d 文件夹下, 由于容器内没有 Vim , 我是在宿主机内编辑好了之后, 再 copy 到容器内, 也可以再容器内安装 Vim 直接在容器内编辑.
在宿主机内 /mnt/nginx/conf.d 创建 phpinfo.conf (目录可以自由创建, 但是你得知道创建在哪儿)

server {
    listen       80;
    server_name  localhost;

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

    location / {
        root   /var/www/html; 
        index  index.html index.htmi index.php; // 添加解析 php
    }
  
    #error_page  404              /404.html;

        root   /usr/share/nginx/html;
    }

    #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   f565661117b6:9000; // 这里选择 php_fpm 容器id , 也可以是 php_fpm 容器的名字 
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name; // 这里写容器内的项目目录, 有的写($document_root), 他们说版本高了不支持, 我两个都试过了, 好像都支持, 或许我的版本不够高...
        include        fastcgi_params;
    }

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

从宿主机拷贝文件到容器中

docker cp /mnt/nginx/conf.d/phpinfo.conf 容器:/etc/nginx/conf.d

进入容器查看是否真的复制进去了


copy
  • 在容器内部检查下 Nginx 端口是否配置成功
nginx -t
image.png

重新加载

nginx -s reload
  • 配置成功
    最后我们可以通过浏览器可以直接访问


    image.png

当看到这个页面的时候 , 说明 环境搭建成功 !

后面会有更多的坑在等着去踩呢, 可能文章中有许多错误的地方, 希望各位 猿/媛 多多指出, 共同进步...

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。