docker搭建lnmp环境

系统环境:配好网络的虚拟机 CentOS 7

Docker的安装和启动命令

wget -qO- https://get.docker.com | sh #安装docker
sudo usermod -aG docker king #指定用户可操作docker
sudo service docker restart #重启docker

一、docker安装mysql

先从仓库拉取一个MySql的镜像

docker pull mysql:5.7

通过命令 docker images 查看拉取到本地的镜像

启动一个容器,通过以下命令

docker run -d -p 6603:3306 -e MYSQL_ROOT_PASSWORD=123456 --name king_mysql mysql:5.7

参数说明
-d 让容器在后台运行
-p 添加主机到容器的端口映射
-e 设置环境变量,这里是设置mysql的root用户的初始密码,这个必须设置
–name 容器的名字,随便取,必须唯一

ps:可以仅使用docker run命令就行了。docker run会先去pull,然后再create。先把镜像pull下来,在run的时候会很快。

通过命令docker ps -a 查看刚刚创建的容器,容器状态的Up状态,表示容器正在运行,并且可以看到主机和容器的端口映射关系。

进入到刚刚创建的容器中

首先要进入容器内部

docker exec -it 容器名或容器ID
docker exec -ti king_mysql /bin/bash (进入容器)

tips:在容器内部(相当于一个轻量的虚拟机os)
这时候需要敲:apt-get update,这个命令的作用是:同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。
容器内安装vim:apt-get install vim

进入mysql

mysql -u root -p

授权 创建一个远程可以访问msyql的用户。

GRANT ALL PRIVILEGES ON . TO root@"%" IDENTIFIED BY “123456”;
flush privileges; // 刷新,使修改的内容生效

退出

exit #第一个exit退出mysql
exit #第二个exit退出容器的bash

参数说明

-t 在容器里生产一个伪终端

-i 对容器内的标准输入 (STDIN) 进行交互

验证操作一:【外网访问容器里的mysql,还是要通过主机的公网ip:port这种形式来访问】用Navicat连接主机(运行docker的虚拟机)刚配置好的MySQL,新建一个test数据和表,后续用来验证PHP连接数据库获取数据使用。

二、docker安装php-fpm

先拉取php-fpm的镜像

docker pull php:7.4-fpm

再创建一个phpfpm容器

docker run -d -v /home/works:/var/www/html -p 9000:9000 --link king_mysql:mysql --name king_phpfpm php:7.4-fpm

参数说明

-d 让容器在后台运行

-p 添加主机到容器的端口映射

-v 添加目录映射,即主机上的/home/works和容器中/var/www/html目录是同步的

–name 容器的名字

–link 与另外一个容器建立起联系,这样我们就可以在当前容器中去使用另一个容器里的服务。

这里不指定–link参数也是可以,因为容器本身有唯一的IP,所以也可以用IP去访问容器。

进入容器,在/var/www/html目录下新建一个index.php文件(这是在容器内新建的文件)

touch index.php

用exit命令回到主机界面,访问主机上/home/works

在容器里的/var/www/html目录中新建的文件也在主机的/home/works目录中,因为在创建容器的时候把主机中的目录挂载到了容器中去了。

要使用pdo模块,所以需要安装pdo_mysql模块,在docker容器中可以这样安装

docker-php-ext-install pdo_mysql

通过命令php -m查看php所有已安装的扩展模块

验证操作二:PHP扩展模块虽安装了,但并没有启用。通过在phpfpm的容器中修改php.ini文件来修改PHP配置,vim /usr/local/etc/php/conf.d/php.ini (新安装可能没有此文件,重命名默认的配置文件即可),在配置文件里把需要打开的模块对应的配置行前面的分号去掉,保存退出!重启容器保证修改生效 ,命令: docker restart 容器ID

三、docker安装nginx

先从仓库拉取一个nginx镜像

docker pull nginx:1.16.0

接下来运行nginx容器

docker run -d -p 80:80 --name king_nginx -v /home/works:/var/www/html --link king_phpfpm --name king_nginx nginx:1.16.0

参数说明:

-d 让容器在后台运行

-p 添加主机到容器的端口映射

-v 添加目录映射,推荐nginx容器的根目录和php容器中根目录一样。如果不一样在配置nginx的时候需要注意

–name 容器的名字

–link 与另外一个容器建立起联系

进入nginx容器,修改nginx的配置文件让它支持php
docker exec -it king_nginx /bin/bash

参数说明

-t 在容器里生产一个伪终端

-i 对容器内的标准输入 (STDIN) 进行交互

在容器里找到nginx的配置文件,默认是在/etc/nginx目录下

location ~ \.php$ {
        root           /var/www/html;
        fastcgi_index  index.php;
        fastcgi_pass   phpfpm:9000;//这里改成--link进来的容器,也可以用php容器的ip
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;//如果根目录和php容器的根目录不一样,这里的$document_root需要换成php下的根目录,否则php找不到文件
        include        fastcgi_params;                                                                                                                                             
    }

最后,验证LNMP环境,在前面步骤的index.php文件中编写代码

<?php
    try {
        $con = new PDO('mysql:host=mysql;dbname=test', 'root', '123456');
        $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'] .' <br/>';
        }
    } catch (PDOException $e) {
        echo '报错:'  . $e->getMessage();
    }

使用浏览器访问 【主机的ip】/index.php 看到正确的输出,就证明环境搭建成功了。

$con = new PDO(‘mysql:host=mysql;dbname=test’, ‘root’, ‘123456’);

这一行,当前换成mysql容器的ip也是一样的,可以通过dokcer inspect contanier_name|id来查看容器的有关信息, 不过只能在内网里面使用容器的ip。外网访问容器里的mysql,还是要通过主机的公网ip:port这种形式来访问。

————————————————
版权声明:本文为CSDN博主「-Scalpel-」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40810012/article/details/114631164

补充

1 . 容器内安装composer

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
mv composer.phar /usr/local/bin/composer
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ #切换源
composer selfupdate #更新composer
composer -v

2 . 容器内安装软件

apt-get update
apt-get install vim
apt-get install zip unzip

3 . 域名配置

#宿主机nginx配置
server {
    listen       80;
    server_name  xxx.tu-do.cn;
    location / {
        root   /www/docker/xxx/public;
        index  index.php index.htm index.html;
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        try_files $uri $uri/ /index.html;
    }
}

#容器内nginx配置
server {
    listen       80;
    server_name  xxx.tu-do.cn;

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

    location / {
        root   /var/www/html/xxx/public;
        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$ {
        root           /var/www/html/xxx/public;
        fastcgi_pass   wdl_phpfpm:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

}

木点点 i
请先登录后发表评论
  • 最新评论
  • 总共0条评论