1、安装 Docker

官网
https://docs.docker.com/install/

找到 linux --Centos,操作步骤如下
Install Docker Engine on CentOS

直接按照他的操作步骤进行即可
抄录一下

  1. Set up the repository

      sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
    
  2. Install Docker Engine

     sudo yum install docker-ce docker-ce-cli containerd.io
    
  3. sudo systemctl start docker

  4. sudo docker run hello-world

设置开机启动的话,继续

  1. $ sudo systemctl list-unit-files |grep docker
    docker.service disabled
    docker.socket disabled

  2. $ sudo systemctl enable docker

     Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
    

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.84kBsudo 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/htmlroot         /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/htmlsudo vim index.php<?phpphpinfo();?>
    
  2. 启动 docker php 容器

     docker ps -aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMESdd0a3155e7ee        php:5.6-fpm         "docker-php-entrypoi…"   3 days ago          Up 15 minutes       0.0.0.0:9000->9000/tcp   myphp56docker start myphp56docker ps -sCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES               SIZEdd0a3155e7ee        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/htmlroot         /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 --permanentsudo firewall-cmd --zone=public --add-port=8080/tcp --permanentsudo firewall-cmd --zone=public --add-port=9000/tcp --permanentsudo 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 mysqldocker 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 3Server 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 容器的

CentOS7 Docker 安装 PHP,Mysql,phpmyadmin相关推荐

  1. Centos7: Docker安装与实践

    Centos7: Docker安装与实践 web 服务与客户端开发实战总结 前言 这是中山大学数据科学与计算机学院2019年服务计算的作业项目.所有代码与博客将被上传至github当中. Github ...

  2. centos7 docker安装和使用_入门教程

    centos7 docker安装和使用_入门教程 原文:centos7 docker安装和使用_入门教程 说明:本文也是参考互联网上的文章写的,感谢相关作者的贡献. 操作系统 64位CentOS Li ...

  3. docker安装halo+mysql+nginx搭建个人博客

    docker 安装halo+mysql+nginx搭建个人博客(debian or ubuntu) 1 简介 本文主要介绍debian和国内腾讯云ubuntu下安装docker,使用docker安装h ...

  4. 使用docker安装的mysql如何让其他机器访问

    使用docker刚安装的mysql,是不能被其他机器访问的. 解决方法如下: 1.创建MySQL容器 docker run -di --name mysql -p 33306:3306 -e MYSQ ...

  5. mysql 官方docker_用docker安装官方mysql

    1:在系统中查询官方镜像 docker search mysql 可以看到提供的几个版本. 我们也可以从官方网站端查看下具体的版本和说明:https://hub.docker.com/_/mysql/ ...

  6. 主机访问虚拟机中docker安装的mysql

    一.背景 开发环境中,经常需要mysql本地环境,方便开发.准备在本机的虚拟机里面用docker准备一个mysql环境. 二.版本信息 操作系统:Windows 10 家庭版 Oracle VM Vi ...

  7. Docker安装部署MySQL+Canal+Kafka+Camus+HIVE数据实时同步

    因为公司业务需求要将mysql的数据实时同步到hive中,在网上找到一套可用的方案,即MySQL+Canal+Kafka+Camus+HIVE的数据流通方式,因为是首次搭建,所以暂时使用伪分布式的搭建 ...

  8. Centos7 Docker安装ELK详细步骤

    系统配置:CentOS7.6 4核4G ELK版本:7.7.1 elastic官网地址:https://www.elastic.co/cn/ elastic产品地址:https://www.elast ...

  9. Docker安装运行mysql

    1. 查找镜像 docker search mysql 2.拉取镜像 拉起MySQL镜像(:5.7 表示5.7版本) docker pull mysql:5.7 3.运行容器 docker run - ...

  10. (转) Linux(Centos7)yum安装最新mysql

    原文:http://blog.csdn.net/gebitan505/article/details/54613549 环境 CentOS 7.1 (64-bit system) MySQL 5.6. ...

最新文章

  1. 据说看完这21个故事的人,30岁前都成了亿万富翁。你是下一个吗?
  2. jquery autocomplete实现solr查询字段自动填充并执行查询
  3. 会话中的存储技术和一些细节
  4. 【转】webshell检测——使用auditd进行system调用审计
  5. jquery text html width heigth的用法
  6. Android NDK 内存泄露检测
  7. Java this 关键字的用法
  8. 和某ZYC巨佬和XXY巨佬的随机挑战2总结
  9. 蓝桥杯 2011年第二届C语言初赛试题(5)
  10. matlab busy 如何看进度,matlab solve 之后不出结果不报错,状态一直显示busy
  11. MyEclipse中使用Proxool+mysql连接池的方法
  12. 重构和代码异味——通往更整洁的代码
  13. 西安市行政区划矢量图_行政区划图片下载_行政区划图矢量图素材
  14. 寻找百度图片搜索接口历程--one
  15. [GZOI2019GXOI2019]省选AFO记
  16. nginx: [warn] conflicting server name “xxx“ on 0.0.0.0:80解决
  17. java io 呕心沥血的学习 学了就忘
  18. Markdown学习记录 [ javaSE 基础Ⅰ] Day01
  19. 用pyth写一个代码输入数字到列表中,直到输入空值为止 ,依次将每个数字的最大数挑出来,生成一个新的列表...
  20. java 上位机 socket_通讯编程上位机软件实现(SOCKET)——第二回

热门文章

  1. 进程部分(IPC机制及生产者消费者模型)和线程部分
  2. codeforces 675C C. Money Transfers(贪心)
  3. HDU 5071 模拟
  4. 关于matlab浮点转定点总结
  5. jenkins插件管理提示“update information obtained:不可用ago”
  6. [BZOJ 1070] [SCOI2007] 修车
  7. CentOS - 安装mysql
  8. 自己的 并查集 模板
  9. openapi and light-4j
  10. Centos7配置ThinkPHP5.0完整过程(二)