docker常用命令,docker实战 nginx+mysql+php+wordpress

docker 常用命令

docker加速器

阿里云:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
加速设置

搜索官方镜像

docker search nginx

docker search nginx

docker hub 官网
https://hub.docker.com/search?q=nginx&type=image

拉取镜像

docker pull 
docker pull phpmyadmin 拉取一个phpmyadmin镜像

查询所有镜像

docker images

docker images

删除镜像

docker image rm phpmyadmin

后台运行1个镜像并返回1个容器ID

docker run -d centos:7

-d 后台运行镜像
-t 启动一个终端
-i 标准输入
-p 容器内的端口映射到本机端口
-v 文件映射

docker run -d centos:7

查看当前运行容器

docker ps

# 查看所有历史容器
docker ps -a

docker ps

进入退出容器后启动/bin/bash

OCI runtime exec failed: exec failed: container_linux.go:370: starting conta

# fc=容器id
docker exec -it fc bash
docker exec -it fc sh
----如果出现报错,用下面的命令
docker exec -it fc /bin/bash
docker exec -it fc /bin/sh

退出 exit

docker exec -it fc bash

运行一个Nginx容器

docker run --name con_nginx -p 90:80 -d nginx:1.18.0-alpine
-p 端口映射,原本Nginx的80端口,映射到主机90端口

停止、启动、重启、删除一个容器

docker stop 容器id或者名字

docker start 容器id或者名字

docker restart 容器id或者名字

docker kill 容器id或者名字

docker rm -f 容器id或者名字

运行一个Nginx将配置文件映射到主机目录

docker run -d -p 90:80 --name con_nginx
 -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro 
 -v /home/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf:ro 
 -v /home/nginx/share/nginx/html:/usr/share/nginx/html:ro 
 nginx:1.18.0-alpine
 

Nginx配置文件设置-default.conf

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

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

    location / {
        root   /usr/share/nginx/html;
        index index.php index.html index.htm default.php default.htm default.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;
    }

    
    # 禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    # 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$ {
        fastcgi_pass   你的主机IP:端口;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;
        fastcgi_param  SCRIPT_NAME      $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;
    #}
}


运行一个mysql将配置文件映射到主机目录

docker run -d  --name con_sql -p 3307:3306 --privileged=true 
-v /home/mysql/conf/my.cnf:/etc/my.cnf 
-v /home/mysql/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=设置一个密码
mysql:5.7

运行一个php将网站文件映射到nginx下

docker run -p 7000:9000 -d --name con_php -v /home/nginx/share/html:/usr/share/nginx/html php:7.4.18-fpm
echo "<?php echo phpinfo();" > info.php

查看php.ini的文件位置

php -i|grep php.ini

安装wordpress 采坑

安装就报错 此站点遇到了致命错误

wordpress 安装的时候,提交数据库名,密码,连接主机,页面返回 ‘此站点遇到了致命错误’,并没有任何说明那里错了。(超级尴尬~~)

查看了network,接口报500,不正常,服务器问题
返回到更目录,建一个index.php的文件,排查数据库连接问题,因为:

  1. 打开wordpress网页正常能进入安装填写的界面
  2. 报错500,是填写了连接数据库的资料后报错
<?php
    echo "Hello PHP<br/>";
    $conn = mysqli_connect("mysql","wps","123456");
    if(!$conn){
        echo "连接数据库失败";
    }else{
        echo "连接数据库成功";
    }
    phpinfo();
?>

此站点遇到了致命错误

Call to undefined function mysqli_connect

Uncaught Error: Class ‘mysqli’ not found

方法一(推荐):

因为php里面没有这个方法(插件)mysqli 所有报错

  1. docker exec -it {容器id} /bin/bash
  2. cd /usr/local/bin
  3. docker-php-ext-install mysqli
  4. 重启php
方法一验证

新建一个PHP文件,放入nginx更目录,访问查看结果

<?PHP 
// mysql_connect("数据库地址","数据库账号","数据库密码","连接数据库");
$con = mysqli_connect("localhost","root","root","test");
//测试是否连接数据库
if($con){
  echo "连接成功"
}else{
  echo "连接数据库成功<br/>";
  echo "PHP配置";
  phpinfo();
}

在这里插入图片描述

方法二:

建一个index.php的文件,运行后,出现 Call to undefined function mysqli_connect() 大概意思是找不到mysqli_connect()这个方法

Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /usr/share/nginx/html/index.php:3 Stack trace: #0 {main} thrown in /usr/share/nginx/html/index.php on line 3
Call to undefined function mysqli_connect
解决方法:

  1. 进入mysql docker里面安装
docker exec -it mysql bash
apt-get update
apt-get install libpng-dev
  1. 进入php docker里面安装
docker exec -it php bash
cd /usr/local/bin/
./docker-php-ext-install gd mysqli # 这个必须安装好
./docker-php-ext-enable gd mysqli # 如果这个报错先跳过

如果遇到以下报错,需要重新安装,先重启以下mysql,php服务

  • error:does not exist
    在这里插入图片描述

  • configure: error: Package requirements (zlib) were not met:

  • No package ‘zlib’ found
    No package zlib found

如果没有红色的报错,就可以了,大概参考这个图图
Build complete

  • error: ‘gd’ does not exist
  • 这个错误可以先跳过
    error: gd does not exist
    安装完以上插件,重启服务。再次反问index.php

php_network_getaddresses: getaddrinfo failed: Name or service not known in XXXX

继续翻车,再看看数据库连接
进去mysql docker 看看能不能连接上,和进入数据库

docker exec -it mysql bash
mysql -h 的ip地址  -uroot -p
mysql: [ERROR] unknown variable 'sockeet=/tmp/mysql.sock'

unknown variable

连接的数据库的时候,提示有一个未知变量
需要打开my.cnf设置一下,原因是我的my.cnf是从别的服务器配置复制过来的,所有有一下适用,只要把没有用的注释掉先,就可以了。

连接报错:
unknown variable
修改my.cnf配置文件
my.cnf

ERROR 2003 (HY000): Can’t connect to MySQL server on ‘127.0.0.1’ (111)

连接的数据库地址不对,要么是连接localhost,要么是docker ip地址,因为是mysql做了映射,所有用ip 比较好,否则都报错 ERROR 2003

  • ERROR 1045 (28000): Access denied 没有权限

如果获取mysql docker 里面的ip?

docker inspect 获取容器ip地址
docker inspect 容器id

docker inspect
mysql -h 容器ip -u用户名 -p
这次终于连接成功了~~好难啊

docker下wordpress安装配置

关键是数据库的连接地址!!
关键是数据库的连接地址!!
关键是数据库的连接地址!!

wp-config.php
需要手工创建wp-config.php文件,将以上信息贴入wp-config.php文件中
wp-config.php
然后点击“现在安装”,出现以下页面

wordpress现在安装

wordpress
最后,其实不用这么折腾,wordpress是有docker镜像,何必这样呢?

学了一半的docker,就学学吧,折腾一下,这叫技术~搞起!

docker 顺利~

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值