docker常用命令,docker实战 nginx+mysql+php+wordpress
- docker 常用命令
- docker加速器
- 搜索官方镜像
- 拉取镜像
- 后台运行1个镜像并返回1个容器ID
- 查看当前运行容器
- 进入退出容器后启动/bin/bash
- 运行一个Nginx容器
- 停止、启动、重启、删除一个容器
- 运行一个Nginx将配置文件映射到主机目录
- Nginx配置文件设置-default.conf
- 运行一个mysql将配置文件映射到主机目录
- 运行一个php将网站文件映射到nginx下
- 查看php.ini的文件位置
- 安装wordpress 采坑
docker 常用命令
docker加速器
阿里云:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
加速设置
搜索官方镜像
docker search nginx
拉取镜像
docker pull
docker pull phpmyadmin 拉取一个phpmyadmin镜像
查询所有镜像
docker images
删除镜像
docker image rm phpmyadmin
后台运行1个镜像并返回1个容器ID
docker run -d centos:7
-d 后台运行镜像
-t 启动一个终端
-i 标准输入
-p 容器内的端口映射到本机端口
-v 文件映射
查看当前运行容器
docker ps
# 查看所有历史容器
docker ps -a
进入退出容器后启动/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
运行一个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的文件,排查数据库连接问题,因为:
- 打开wordpress网页正常能进入安装填写的界面
- 报错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 所有报错
- docker exec -it {容器id} /bin/bash
- cd /usr/local/bin
- docker-php-ext-install mysqli
- 重启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
解决方法:
- 进入mysql docker里面安装
docker exec -it mysql bash
apt-get update
apt-get install libpng-dev
- 进入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
如果没有红色的报错,就可以了,大概参考这个图图
- 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是从别的服务器配置复制过来的,所有有一下适用,只要把没有用的注释掉先,就可以了。
连接报错:
修改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
mysql -h 容器ip -u用户名 -p
这次终于连接成功了~~好难啊
docker下wordpress安装配置
关键是数据库的连接地址!!
关键是数据库的连接地址!!
关键是数据库的连接地址!!
需要手工创建wp-config.php文件,将以上信息贴入wp-config.php文件中
然后点击“现在安装”,出现以下页面
最后,其实不用这么折腾,wordpress是有docker镜像,何必这样呢?
学了一半的docker,就学学吧,折腾一下,这叫技术~搞起!
docker 顺利~