20181231 假期闲来无事,整理一下 docker mysql 及 phpmyadmin 学习经历
1 、下载安装 docker-ce
官网
安装 docker-cesudo apt-get install docker-ce
2、Docker 理解
1)、每一个 Docker container (容器)就是一个特定应用程序,启动后就是一个特定进程2)、一个容器就是一项服务,每一个 mysql 容器就可以提供一个 mysql 服务和若干实例3)、这里特意安装 2 个不同版本,宿主机自己也已经安装过 LNMP ,用于对比学习
3、下载、安装、运行 mysql 容器
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 mysql3)、下载安装 mysql 5.6sudo docker pull mysql:5.64)、docker images REPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.6 27e29668a08a 47 hours ago 256MBmysql/mysql-server latest a02eab9e2434 2 months ago 276MBhello-world latest 4ab4c602aa5e 3 months ago 1.84kB5)、运行 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:33066)、运行 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 mysql8)、查看容器端口 docker port mysql 3306/tcp -> 0.0.0.0:3308 容器的 3306 端口映射到宿主机的 3308 端口 docker port mysql56 3306/tcp -> 0.0.0.0:33099)、查看容器 IP docker inspect mysql56 ... "IPAddress": "172.17.0.2", ... docker inspect mysql ... "IPAddress": "172.17.0.3", ... ** 以下连接测试 h 也可以使用容器的 IP ** 容器 IP 是动态的,每一次不一定一样
4 、连接 容器的 mysql 测试
浏览器测试放到下一步:安装 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> quit2)、连接容器 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)
5、进入容器测试
** 这里只列出容器 mysql56 docker exec -it mysql56 bashroot@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 varroot@88c2aaa078d9:/# mysql -V mysql Ver 14.14 Distrib 5.6.42, for Linux (x86_64) using EditLine wrapperroot@88c2aaa078d9:/# apt update进入 mysqlroot@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)
6、phpmyadmin 部署、测试
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/phpmyadmin3)、确认 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 mysql565)、建立 2 个 phpmyadmin 容器 sudo docker run --name phpmyadmin72 --link mysql:db -p 9998:80 -d phpmyadmin/phpmyadmin参数说明:--link mysql:db 连接到 容器mysql ,给这个 link 一个别名为dbsudo 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 mysql7)、浏览器测试: ** 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种方法,我这里只是最简单的一种详细学习请参考
7、接下来
从以上部署 phpmyadmin 可以看出1)、phpmyadmin 其实就是一个 php 网站2)、前一步部署的其实就是别人做好的网站镜像3)、如果拥有了镜像,使用 Docker 部署起来真的很快捷!4)、到现在为止,php 开发环境所需要的元素都已经学习过了,怎么给他们组合起来?接下来该学习Dockerfile,docker-compose