网站首页 文章专栏 docker基础学习(二)----安装nginx+php+mysql+redis

docker基础学习(二)----安装nginx+php+mysql+redis

编辑时间:2021-11-04 17:02:47 作者:苹果 浏览量:198




先获取下要需要的镜像

 docker search nginx

  直接拉取官方镜像

docker pull nginx

同理依次安装php:8.0-fpm、mysql:8

docker pull php:8.0-fpm
docker pull mysql:8

查看安装的镜像:docker images ls

1636013530(1).jpg


建立几个映射文件夹备用

mkdir -pv /docker/www/    #网站项目根目录

mkdir -pv /docker/nginx/conf.d/       #nginx配置文件

mkdir -pv /docker/mysql     #数据库文件夹

    1.创建php容器

 docker run -p 9000:9000 --name  phpfpm -v /data/docker/www:/data/www -d php:8.0-fpm

   # 将本地/data/docker/www 映射到容器中的/data/www位置,映射地址(/data/www)需要一会在nginx 中配置。

        --name 这里是别名,使用docker ps 会最后显示names

        -p  9000:9000 第一个9000是本地的端口,第二个9000是docker容器端口,

        -v 映射目录 

    新建/data/www/index.php、/data/www/index.html

    <?php
    phpinfo();

    进入容器phpfmp 发现在/data/www/目录下也存在了这个文件,执行php index.php 确认安装成功

    php.jpg


   exit 退出容器,继续安装nginx

   2.创建nginx容器

    docker run --name mynginx -p 80:80 -v /data/docker/www:/data/www   -v /data/docker/nginx/conf.d/:/etc/nginx/conf.d -d nginx

   # 将本地/data/docker/nginx/conf.d 配置目录 映射到容器中的/etc/nginx/conf.d/位置

      将本地/data/docker/www 项目目录 映射到容器中的/data/www位置

       在本地/data/docker/nginx/conf.d/新建一个nginx配置文件:php-nginx.conf

        eg:

    listen       80;
    server_name  localhost;

    location / {
        root   /data/www; #代码目录挂在到容器中的目录
        index  index.html index.htm index.php;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        root   /data/www;
        fastcgi_pass localhost:9000;   #php容器的IP地址
        #fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        include        fastcgi_params;
    }
}

    重启下nginx 

    docker restart mynginx

    本地试着访问下

curl localhost;
curl localhost/index.php

    index.html 可以正常访问,而php 不行;

    获取php 容器的ip地址:

docker inspect phpfpm --format='{{.NetworkSettings.IPAddress}}'

   nginx_2.jpg

    修改php-nginx.conf 文件中的php 地址:

    ngixn_3.jpg


    再次请求发现可以。

    尝试在浏览器中访问:(如果不行,请检查防火墙对应的端口是否开启)

    phpinfo.jpg




    3.创建mysql容器   

    配置mysql映射目录

    mkdir -pv /data/docker/mysql/conf     #数据库配置文件

    mkdir -pv /data/docker/mysql/logs    #数据库日志

    mkdir -pv /data/docker/mysql/data #数据库数据

    运行docker mysql镜像 ,设定映射文件并暂将密码设置成123456

    docker run -p 3306:3306 --name mysql  -v /data/docker/mysql/conf:/etc/mysql/conf.d   -v /data/docker/mysql/logs:/var/log/mysql  -v /data/docker/mysql/data:/var/lib/mysql   -e MYSQL_ROOT_PASSWORD=123456  -d mysql

    

    进入容器 

 docker exec  -it  mysql bash

    进入mysql

  mysql -uroot -p123456  #也可能为空

        mysql_2.jpg

        熟悉的mysql 界面

        新建一个临时的测试库test,以备后面测试。未保证能使用root帐号从外部访问数据库,修改下帐号权限(一般是重新建个帐号,给向相应的权限)

    update user set host = "%" where user = "root";

        退出mysql,退出容器。

        查看最开始创建的/data/docker/ 目录

        tree.jpg

        

        尝试在php中连接mysql

        先获取mysql容器连接ip

     docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql    #我的是172.17.0.4

        创建文件/data/docker/www/mysql.php

    <?php
    $dbms = 'mysql';//数据库类型
    $host = '172.17.0.4'; //数据库主机名,此处写mysql 容器的名字
    $dbport = '3306';
    
    $dbName = 'test';//使用的数据库
    
    $user = 'root';//数据库连接用户名
    
    $pass = '123456';//对应的密码
    
    $dsn = "$dbms:host=$host;port=$dbport;dbname=$dbName";
 
    try {
    	    $dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象
    	        echo "successful!<br/>";
    	        $dbh = null;
    
    } catch (PDOException $e) {
    	    die ("Error!: " . $e->getMessage() . "<br/>");
    }

     访问发现没有PDO扩展,那就去安装相应扩展吧。

        进入php 容器 (docker exec  -it  php bash)  进行配置

        php-mysql.jpg

        退出容器,再次访问,可以。

        同理在电脑客户端使用Navicat工具尝试连接(请确保服务器3306端口有打开):

        navicat.jpg


    查看在运行的容器:

    ps.jpg                

    

    最后把docker服务加入开机启动

    systemctl enable docker.service

     docker启动后自动启动相应的容器:docker update --restart=always 容器ID

    update.jpg


    至此结束



补充添加:

redis安装命令

docker pull redis

docker run -p 6379:6379 --name redis     -v /data/docker/redis/redis.conf:/etc/redis/redis.conf  -v /data/docker/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes


 -p 6379:6379:把容器内的6379端口映射到宿主机6379端口

# -v /root/docker/redis/redis.conf:/etc/redis/redis.conf:把宿主机配置好的redis.conf放到容器内的这个位置中

# -v /root/docker/redis/data:/data:把redis持久化的数据在宿主机内显示,做数据备份

# redis-server /etc/redis/redis.conf:这个是关键配置,让redis不是无配置启动,而是按照这个redis.conf的配置启动

# -appendonly yes:redis启动后数据持久化


docker exec -it redis redis-cli


php安装redis的扩展,需要到官网选择适合自己php版本的扩展包下载(https://pecl.php.net/package/redis)

比如,我的是php8:

wget http://pecl.php.net/get/redis-5.3.4.tgz

解压后将文件移至php容器中

tar zxvf redis-5.3.4.tgz
rm -r redis-5.3.4.tgz

可以通过上面配置的映射目录移动


进入php容器,找到刚刚移动过来的安装包,安装redis扩展

docker exec -it phpfpm bash
mv redis-5.3.4  /usr/src/php/ext/redis
docker-php-ext-install redis


查看php扩展是否安装成功  php -m 



    出自:何冰华个人网站

    地址:http://www.hebinghua.com/

    转载请注明出处


来说两句吧
最新评论