文档章节

CentOS 7 Docker方式安装 PHP,Mysql,phpmyadmin 过程记录

wwzzhh166
 wwzzhh166
发布于 04/09 21:22
字数 2112
阅读 10
收藏 0

20190408 三个月前学习 docker,打算在实际环境部署一次 PHP + Mysql,但是这次转到了 CentOS,没走几步就卡壳了!只好在 CentOS7 下从头学习一次

实战和学习总是有许多差别的!多走几轮,总会用得上的!

环境: 1、 visualbox 虚拟机 CentOS 7.6 (IP:192.168.1.184) 只安装了nginx (本次不做 Docker nginx 容器) 2、 visualbox 虚拟机 CentOS 7.6(IP:192.168.1.188) 安装 nginx,PHP,mysql,phpmyadmin

** 为了对照学习,用于 docker 的服务器上,本地安装 nginx之外,不再安装 PHP,mysql,phpmyadmin ** 过程中主要问题出现在 nginx 的 php 配置 ,mysql 的数据卷

1、安装 Docker

  1. 官网 https://docs.docker.com/install/ 找到 linux --Centos

  2. 安装必要的仓库 sudo yum install -y yum-utils
    device-mapper-persistent-data
    lvm2

  3. 设置使用稳定版仓库 sudo yum-config-manager
    --add-repo
    https://download.docker.com/linux/centos/docker-ce.repo

  4. 安装 DOCKER CE sudo yum install docker-ce docker-ce-cli containerd.io

  5. 列举版本,可以选择特定版本 yum list docker-ce --showduplicates | sort -r ...... docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable * base: mirrors.aliyun.com

    使用方法: sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

  6. 启动 docker sudo systemctl start docker sudo systemctl enable docker

  7. 确认 docker -v Docker version 18.09.4, build d14af54266

  8. 测试一下 sudo docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. ......

  9. 查看镜像 sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest fce289e99eb9 2 months ago 1.84kB

2、安装 PHP

sudo docker pull php ** latest 版本是 7.2 的,本次只处理 php5.6 sudo docker pull php:5.6-fpm

sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE php latest 90102e6d83ad 47 hours ago 367MB php 5.6-fpm 3458979c7744 2 months ago 344MB hello-world latest fce289e99eb9 2 months ago 1.84kB

sudo docker run -p 9000:9000 --name myphp56 -v /usr/share/nginx/html:/var/www/html -d php:5.6-fpm

参数说明:

--name  myphp56:将容器命名为 myphp56
-v /usr/share/nginx/html:/var/www/html : 将宿主机的网站目录(/usr/share/nginx/html)挂载到容器的网站目录(/var/www/html)

-p 9000:9000:将容器myphp72的 9000 端口映射到宿主机的 9000 端口			
	*** php 缺省端口是 9000 ,如果宿主机也安装过php,可能会冲突,可以改到 9001

3、测试 nginx + php

** 本次重点测试 docker 。所以, nginx 的配置直接修改 nginx.conf ,端口方式访问或域名方式网站另行配置

  1. 修改 nginx 配置,加入 php 配置 cd /etc/nginx sudo vim nginx.conf 加入 php 文件的 location

location ~ .php$ { # include fastcgi.conf; # this is on local #root /usr/share/nginx/html; # thsi is on docker,not local /var/www/html root /var/www/html;

            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            #fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_param SCRIPT_FILENAME
            $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $uri;
            fastcgi_param SCRIPT_NAME $fastcgi_script_name;
            fastcgi_index index.php;
            include fastcgi_params;
            }

** centos 7 缺省的 nginx WEB 目录不在 /var/www/html ,而是 /usr/share/nginx/html ** 以上 root /var/www/html; 指的是 宿主机的 /var/www/html 映射到 docker 容器伤的 WEB 目录

  1. 建立一个 index.php 文件,用于测试 cd /var/www/html sudo vim index.php

    <?php phpinfo(); ?>

  2. 启动 docker php 容器 docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dd0a3155e7ee php:5.6-fpm "docker-php-entrypoi…" 3 days ago Up 15 minutes 0.0.0.0:9000->9000/tcp myphp56

    docker start myphp56

    docker ps -s CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES SIZE dd0a3155e7ee php:5.6-fpm "docker-php-entrypoi…" 3 days ago Up 14 minutes 0.0.0.0:9000->9000/tcp myphp56 8B (virtual 344MB)

  3. 测试一下 curl 127.0.0.1/index.php curl 192.168.1.184/index.php 浏览器下打开网址:http://192.168.1.184/index.php 在这里插入图片描述

4、Docker PHP 错误处理

  1. 页面暂时找不到 The page you are looking for is temporarily unavailable. Please try again later.

    docker ps -s 检查一下, docker myphp56 没有 start

  2. 找不到文件 curl 127.0.0.1/index.php File not found.

    检查 nginx.conf php 模块中 root 定义,容易犯错误的是:将宿主机的 WEB 目录 和 docker 容器的目录搞混! 之前在 ubuntu 没有遇到这个问题,那里宿主机和 docker 的WEB 目录都是 /var/www/html 以下是我的 php 配置部分 location ~ .php$ { # include fastcgi.conf; # this is on local # root /usr/share/nginx/html; # thsi is on docker,not local /var/www/html root /var/www/html;

             fastcgi_split_path_info ^(.+\.php)(/.+)$;
             #fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 
             fastcgi_pass 127.0.0.1:9000;
             fastcgi_param SCRIPT_FILENAME
             $document_root$fastcgi_script_name;
             fastcgi_param PATH_INFO $uri;
             fastcgi_param SCRIPT_NAME $fastcgi_script_name;
             fastcgi_index index.php;
             include fastcgi_params;
    
             }
    
  3. 浏览器打开变成下载

     1).重点检查  fastcgi_pass 的配置
     ** 我这里安装的 Centos 没有 php-fpm.sock,docker 里面也没有,所以只能使用端口方式
    
        #fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; 
        fastcgi_pass 127.0.0.1:9000;
    
      2). Centos 7.6 的防火墙规则需要开启 Docker 映射的 9000 端口
      如果宿主机的 firewalld 是开启的,最好一起开放 80, 443, 9000等端口,否则,本地 curl 可能是对的,在局域网浏览器也打不开!
    
     sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
     sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
     sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
    
     sudo systemctl restart firewalld.service
    

5、安装 Docker mysql

docker search mysql

sudo docker pull mysql ** latest 版本是 mysql 8.0,本次处理 mysql 5.7

sudo docker pull mysql:5.6 sudo docker pull mysql:5.7

sudo docker ps REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.6 bc788a6a2745 12 days ago 256MB mysql 5.7 98455b9624a9 12 days ago 372MB mysql latest 7bb2586065cd 12 days ago 477MB phpmyadmin/phpmyadmin latest c6ba363e7c9b 2 months ago 166MB php 5.6-fpm 3458979c7744 2 months ago 344MB

先使用 latest 试试 sudo docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql

docker inspect mysql ...... "Env": [ "MYSQL_ROOT_PASSWORD=123456", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "GOSU_VERSION=1.7", "MYSQL_MAJOR=8.0", "MYSQL_VERSION=8.0.15-1debian9" ], ......

再启动 mysql 5.7 sudo docker run --name mysql57 -v mysql57:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7

参数说明:
--name mysql57 给容器取名为 mysql57
-v mysql57:/var/lib/mysql 挂在一个volume(取名为mysql57)到容器的/var/lib/mysql
**给volume(数据卷)取名便于管理
** mysql 缺省的数据都是放在 /var/lib/mysql 的

-e MYSQL_ROOT_PASSWORD=123456 设置mysql环境的root密码
-p 3306:3306 宿主机的 3306 端口(前一个3306)对应到docker 的 3306 端口(后面的 3306)

出现错误!

docker: Error response from daemon: Conflict. The container name "/mysql57" is already in use by container "7650608f3e1fc6f85614f059c9049f9259993cfcc4863cb566d504311d00df33". You have to remove (or rename) that container to be able to reuse that name.
	See 'docker run --help'.

** 端口冲突了! 简单处理,直接删除 mysql 8.0 容器

docker ps -s

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES               SIZE
56605931a504        mysql               "docker-entrypoint.s…"   6 minutes ago       Up 6 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp   mysql               7B (virtual 477MB)
dd0a3155e7ee        php:5.6-fpm         "docker-php-entrypoi…"   3 days ago          Up 26 minutes       0.0.0.0:9000->9000/tcp              myphp56             8B (virtual 344MB)

docker stop mysql

docker rm mysql

再次启动 mysql 5.7 docker start mysql57 ** 虽然刚才因为冲突启动失败,但是 mysql57 容器已经建立,所以,直接 start 即可

查看 mysql 容器信息 sudo docker inspect mysql57

...
"Mounts": [
            {
                "Type": "volume",
                "Name": "mysql",
                "Source": "/var/lib/docker/volumes/mysql/_data",
                "Destination": "/var/lib/mysql",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
...
"Env": [
                "MYSQL_ROOT_PASSWORD=123456",
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.7",
                "MYSQL_MAJOR=5.7",
                "MYSQL_VERSION=5.7.25-1debian9"
            ],
...
"Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
...

6、 连接 mysql57 容器测试

  1. 宿主机上远程连接 (刚才inspect 到的容器 IP= 172.17.0.3)

    mysql -h172.17.0.3 -uroot -p123456

     Welcome to the MariaDB monitor.  Commands end with ; or \g.
     Your MySQL connection id is 3
     Server version: 5.7.25 MySQL Community Server (GPL)
    
     Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
     Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
     MySQL [(none)]> select version();
     +-----------+
     | version() |
     +-----------+
     | 5.7.25    |
     +-----------+
     1 row in set (0.00 sec)
    
  2. 进入容器查看 docker exec -it mysql57 bash

root@e80eaaa17d57:/# mysql -V

mysql  Ver 14.14 Distrib 5.7.25, for Linux (x86_64) using  EditLine wrapper

容器内本地连接 mysql mysql -uroot -p123456 ... mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

7、 安装 Docker phpMyAdmin

查找 phpmyadmin 镜像 sudo docker search phpmyadmin

docker pull phpmyadmin/phpmyadmin

** 提前运行前面安装的 Docker php56 和 mysql 57

sudo docker run --name phpmyadmin --link mysql57:db -p 9998:80 -d phpmyadmin/phpmyadmin 参数说明:

--name phpmyadmin 容器取名 phpmyadmin
--link mysql57:db 连接到 容器mysql ,给这个 link 一个别名为db
-p 9998:80 宿主机9998 端口对应到 phpmyadmin的 80 端口

sudo docker ps -s

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                               NAMES               SIZE
0f5599cb72a6        phpmyadmin/phpmyadmin   "/run.sh supervisord…"   15 seconds ago      Up 14 seconds       9000/tcp, 0.0.0.0:9998->80/tcp      phpmyadmin          33.7MB (virtual 200MB)
e80eaaa17d57        mysql:5.7               "docker-entrypoint.s…"   21 minutes ago      Up 21 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql57             157B (virtual 372MB)
dd0a3155e7ee        php:5.6-fpm             "docker-php-entrypoi…"   3 days ago          Up 2 hours          0.0.0.0:9000->9000/tcp              myphp56             8B (virtual 344MB)

查看 phpmyadmin 容器信息 docker inspect phpmyadmin

...
 "Ports": {
                "80/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "9998"
                    }
                ],
                "9000/tcp": null
            },
...
"Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "PHPIZE_DEPS=autoconf \t\tdpkg-dev dpkg \t\tfile \t\tg++ \t\tgcc \t\tlibc-dev \t\tmake \t\tpkgconf \t\tre2c",
                "PHP_INI_DIR=/usr/local/etc/php",
                "PHP_EXTRA_CONFIGURE_ARGS=--enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi",
                "PHP_CFLAGS=-fstack-protector-strong -fpic -fpie -O2",
                "PHP_CPPFLAGS=-fstack-protector-strong -fpic -fpie -O2",
                "PHP_LDFLAGS=-Wl,-O1 -Wl,--hash-style=both -pie",
                "GPG_KEYS=1729F83938DA44E27BA0F4D3DBDB397470D12172 B1B44D8F021E4E2D6021E995DC9FF8D3EE5AF27F",
                "PHP_VERSION=7.2.14",
                "PHP_URL=https://secure.php.net/get/php-7.2.14.tar.xz/from/this/mirror",
                "PHP_ASC_URL=https://secure.php.net/get/php-7.2.14.tar.xz.asc/from/this/mirror",
                "PHP_SHA256=ee3f1cc102b073578a3c53ba4420a76da3d9f0c981c02b1664ae741ca65af84f",
                "PHP_MD5=",
                "VERSION=4.8.5",
                "URL=https://files.phpmyadmin.net/phpMyAdmin/4.8.5/phpMyAdmin-4.8.5-all-languages.tar.xz"
            ],
            
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.4",
 ...

8 、测试 Docker phpMyAdmin

docker port phpmyadmin 80/tcp -> 0.0.0.0:9998

curl 127.0.0.1:9998 curl 192.168.1.184:9998

http://192.168.1.184:9998/

登录查看 mysql

由于本次学习的虚拟机上,没有安装 php 和 mysql ,所以,以上信息一定是 Docker 容器的

© 著作权归作者所有

wwzzhh166
粉丝 2
博文 114
码字总数 113310
作品 0
东城
架构师
私信 提问
CentOS环境下yum安装LAMP(Linux+Apache+Mysql+php)

向原作者致谢。! 、其实不太喜欢转载这种文章的 网上到处都是,只是今天在给一个CentOS配一个网站时各种蛋疼,里面已经运行了MYSQL和apache,但是没有PHP, yum install php5 之后,没有各种...

bigTreee
2015/07/09
0
0
ubuntu 18.04 docker 学习经历(三)Docker mysql 及 phpmyadmin

20181231 假期闲来无事,整理一下 docker mysql 及 phpmyadmin 学习经历 1 、下载安装 docker-ce 官网https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1 安装 ......

wwzzhh166
2018/12/31
0
0
Linux CentOS PhpMyAdmin安装

安装好PHP,Apache和MySQL程序后,为了管理MySQL数据库,我们需要安装phpMyAdmin程序。下面是关于如何在centos安装phpMyAdmin程序的方法。 1、管理员root身份登录系统 2、进入网站根目录(如/...

Surjur
2014/09/02
0
0
Docker phpMyAdmin 连接访问宿主机本地mysql

20190422 之前学习 docker LNMP ,一直都是建立一个 mysql 容器 ,使用 nginx + php 容器来 link 这个 mysql 容器,再建立一个phpmyadmin 容器来管理容器中的mysql 问题: 实际环境中,经常是...

wwzzhh166
04/22
0
0
CentOS 6.0安装phpMyAdmin的简单步骤

CentOS 6.0安装phpMyAdmin的简单步骤 2011-08-30 14:03 pingLinux CSDN博客 字号: T | T 本文我们简单介绍了一下CentOS 6.0安装phpmyadmin的安装过程,希望能够对您有所帮助。 AD:51CTO学院...

youxizhe
2014/05/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

lua字符串和时间戳相互转换

1. 时间戳转成格式化字符串 直接利用函数os.date()将时间戳转化成格式化字符串.```local timestamp = 1561636137;local strDate = os.date("%Y/%m/%d %H:%M:%S", timestamp)print("strD......

书香神
45分钟前
1
0
代码规范

代码格式化 安装vscode插件:Prettier - Code formatter 格式化配置:将下列配置写入到vscode的settings.json文件 (遵照代码格式化) "prettier.disableLanguages": ["vue"], "prettier.......

TreeZhou0511
今天
5
0
python实现人工神经网络的一个例子

人工神经网络已经有无数的开源框架,比如tensorflow,caffe等,可以直接用。但最近需要做一个小样例,把基本思想讲一讲,因此自己写了一个demo,以供参考。 下面直接上代码,代码中有注释,比...

propagator
今天
6
0
远程dubugger

1、在tomcat的bin下/data/project/XXX/apache-tomcat-8.5.23/bin 在catalina.bat文件中新增如下即可 JAVA_OPTS="-Xmx1024m -Xms1024m -agentlib:jdwp=transport=dt_socket,server=y,suspend......

一只小青蛙
今天
3
0
jemter 连接MySQL

jemter 连接MySQL 点击测试计划,测试计划最后”添加目录或jar包到ClassPath“,点击浏览,添加mysql-connector.jar mysql-connector.jar的下载地址: https://mvnrepository.com/artifact/my...

xiaobai1315
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部