20181231 假期闲来无事,整理一下 docker mysql 及 phpmyadmin 学习经历php
官网
https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1mysql
安装 docker-ce sudo apt-get install docker-ce
1)、每个 Docker container (容器)就是一个特定应用程序,启动后就是一个特定进程 2)、一个容器就是一项服务,每个 mysql 容器就能够提供一个 mysql 服务和若干实例 3)、这里特地安装 2 个不一样版本,宿主机本身也已经安装过 LNMP ,用于对比学习
1)、查找 mysql 镜像 docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 7585 [OK] mariadb MariaDB is a community-developed fork of MyS… 2460 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Create… 569 [OK] zabbix/zabbix-server-mysql Zabbix Server with MySQL database support 155 [OK] hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 102 zabbix/zabbix-web-nginx-mysql Zabbix frontend based on Nginx web-server wi… 82 [OK] centurylink/mysql Image containing mysql. Optimized to be link… 59 [OK] .... 2)、下载安装 mysql 最新版 sudo docker pull mysql 3)、下载安装 mysql 5.6 sudo docker pull mysql:5.6 4)、docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.6 27e29668a08a 47 hours ago 256MB mysql/mysql-server latest a02eab9e2434 2 months ago 276MB hello-world latest 4ab4c602aa5e 3 months ago 1.84kB 5)、运行 mysql/mysql-server 容器 sudo docker run --name mysql56 -e MYSQL_ROOT_PASSWORD=123456 -p 3309:3306 -d mysql:5.6 参数说明: --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 6)、运行 mysql 5.6 容器 sudo docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3309:3306 -d mysql/mysql-server 参数说明: 同上 7)、查看容器是否启动、 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 88c2aaa078d9 mysql:5.6 "docker-entrypoint.s…" 6 seconds ago Up 4 seconds 0.0.0.0:3309->3306/tcp mysql56 f53d369601e4 mysql/mysql-server "/entrypoint.sh mysq…" 3 minutes ago Up 3 minutes (healthy) 33060/tcp, 0.0.0.0:3308->3306/tcp mysql 8)、查看容器端口 docker port mysql 3306/tcp -> 0.0.0.0:3308 容器的 3306 端口映射到宿主机的 3308 端口 docker port mysql56 3306/tcp -> 0.0.0.0:3309 9)、查看容器 IP docker inspect mysql56 ... "IPAddress": "172.17.0.2", ... docker inspect mysql ... "IPAddress": "172.17.0.3", ... ** 如下链接测试 h 也可使用容器的 IP ** 容器 IP 是动态的,每一次不必定同样
浏览器测试放到下一步:安装 phpmyadmin 的时候在进行 这里直接在命令行测试 ** 注意端口号是大写 P ,小写p指的是密码 1)、链接宿主机本身的的 mysql(如下指令是等效的) mysql -uroot -p123456 mysql -P3306 -uroot -p123456 mysql -h127.0.0.1 -P3306 -uroot -p123456 mysql -hlocalhost -P3306 -uroot -p123456 查看版本号 mysql> select version(); +-------------------------+ | version() | +-------------------------+ | 5.7.24-0ubuntu0.18.04.1 | +-------------------------+ 1 row in set (0.00 sec) 退出 mysql> quit 2)、链接容器 mysql 的 mysql (容器名字没有取好,应该也带上一个版本号,例如:mysql57) mysql -P3308 -u root -p123456 (这个不对!仍是链接的宿主机的mysql) mysql -h127.0.0.1 -P3308 -uroot -p123456 mysql -hlocalhost -P3308 -uroot -p123456 (这个不对!仍是链接的宿主机的mysql) 查看版本号 mysql> select version(); +-------------------------+ | version() | +-------------------------+ | 5.7.24-0ubuntu0.18.04.1 | +-------------------------+ 1 row in set (0.00 sec) 3)、链接容器 mysql56 的 mysql mysql -P3309 -u root -p123456(这个不对!仍是链接的宿主机的mysql) mysql -h127.0.0.1 -P3309 -uroot -p123456 mysql -hlocalhost -P3309 -uroot -p123456 (这个不对!仍是链接的宿主机的mysql) mysql> select version(); +-----------+ | version() | +-----------+ | 5.6.42 | +-----------+ 1 row in set (0.00 sec)
** 这里只列出容器 mysql56 docker exec -it mysql56 bash root@88c2aaa078d9:/# ls bin boot dev docker-entrypoint-initdb.d entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@88c2aaa078d9:/# mysql -V mysql Ver 14.14 Distrib 5.6.42, for Linux (x86_64) using EditLine wrapper root@88c2aaa078d9:/# apt update 进入 mysql root@88c2aaa078d9:/# mysql -uroot -p123456 Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.6.42 MySQL Community Server (GPL) 查询版本号 mysql> select version(); +-----------+ | version() | +-----------+ | 5.6.42 | +-----------+ 1 row in set (0.00 sec)
1)查找 phpmyadmin 镜像 sudo docker search phpmyadmin NAME DESCRIPTION STARS OFFICIAL AUTOMATED phpmyadmin/phpmyadmin A web interface for MySQL and MariaDB. 697 [OK] nazarpc/phpmyadmin phpMyAdmin as Docker container, based on off… 60 [OK] 1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5 ubuntu-16-nginx-php-phpmyadmin-mysql-5 48 [OK] ... 2)、安装 phpmyadmin 镜像 sudo docker pull phpmyadmin 出错了! Using default tag: latest Error response from daemon: pull access denied for phpmyadmin, repository does not exist or may require 'docker login' docker pull phpmyadmin/phpmyadmin 3)、确认 phpmyadmin 镜像 docker images REPOSITORY TAG IMAGE ID CREATED SIZE php 5.6-fpm 3c6963d39c34 46 hours ago 344MB mysql 5.6 27e29668a08a 2 days ago 256MB phpmyadmin/phpmyadmin latest 15ca549393be 2 weeks ago 166MB ... 4)、先运行 mysql 容器 a).前面已经建立过 2 个 mysql 容器,这里直接 start 便可 b).若是没有建立过mysql 容器,先去 docker run 创建 c).为了对比学习,这里将 2 个 mysql 容器都运行起来,分别 Link ,分别创建 phpmyadmin ro容器 docker start mysql docker start mysql56 5)、创建 2 个 phpmyadmin 容器 sudo docker run --name phpmyadmin72 --link mysql:db -p 9998:80 -d phpmyadmin/phpmyadmin 参数说明: --link mysql:db 链接到 容器mysql ,给这个 link 一个别名为db sudo docker run --name phpmyadmin56 --link mysql56:db -p 9997:80 -d phpmyadmin/phpmyadmin 参数说明:同上 6)、确认容器已经运行 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 52fcab4ddbdc phpmyadmin/phpmyadmin "/run.sh supervisord…" 4 seconds ago Up 3 seconds 9000/tcp, 0.0.0.0:9997->80/tcp phpmyadmin56 6d8013dd8267 phpmyadmin/phpmyadmin "/run.sh supervisord…" 18 seconds ago Up 17 seconds 9000/tcp, 0.0.0.0:9998->80/tcp phpmyadmin72 88c2aaa078d9 mysql:5.6 "docker-entrypoint.s…" 4 hours ago Up 7 minutes 0.0.0.0:3309->3306/tcp mysql56 f53d369601e4 mysql/mysql-server "/entrypoint.sh mysq…" 4 hours ago Up 21 minutes (healthy) 33060/tcp, 0.0.0.0:3308->3306/tcp mysql 7)、浏览器测试: ** 2个数据库容器的 mysql 都是: 用户名: root 密码:123456 链接容器 mysql老是登陆不上? http://192.168.1.192:9998/index.php
链接容器 mysql56 是正确的 http://192.168.1.192:9997/index.php
8)、部署 phpmyadmin 有3种方法,我这里只是最简单的一种 详细学习请参考
https://blog.csdn.net/Gekkoou/article/details/80897309linux
从以上部署 phpmyadmin 能够看出 1)、phpmyadmin 其实就是一个 php 网站 2)、前一步部署的其实就是别人作好的网站镜像 3)、若是拥有了镜像,使用 Docker 部署起来真的很快捷! 4)、到如今为止,php 开发环境所须要的元素都已经学习过了,怎么给他们组合起来? 接下来该学习 Dockerfile,docker-compose