20181231 假期闲来无事,整理一下 docker mysql 及 phpmyadmin 学习经历
1 、下载安装 docker-ce
官网
https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1
安装 docker-ce
sudo 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 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 是动态的,每一次不一定一样
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> 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)
5、进入容器测试
** 这里只列出容器 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)
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/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/80897309
7、接下来
从以上部署 phpmyadmin 可以看出
1)、phpmyadmin 其实就是一个 php 网站
2)、前一步部署的其实就是别人做好的网站镜像
3)、如果拥有了镜像,使用 Docker 部署起来真的很快捷!
4)、到现在为止,php 开发环境所需要的元素都已经学习过了,怎么给他们组合起来?
接下来该学习
Dockerfile,docker-compose