创建于20170211
本章小目标
- 下载mysql镜像
- 熟悉mysql 容器化配置
- 部署mysql镜像
- 下载phpmyadmin镜像
- 熟悉phpmyadmin 容器化配置
- 部署phpmyadmin镜像
- 使用phpmyadmin来管理mysql
我习惯使用daocloud来对容器进行管理,我的云服务器也是用daocloud管理的,好处是镜像下载比较快,图形界面也比较友好。
daocloud链接:https://dashboard.daocloud.io/
当然,直接在服务器上写用docker命令操作也是可以的
1,mysql镜像地址
daocloud上mysql的镜像源地址如下:
https://dashboard.daocloud.io/packages/fa51c1d6-9dc2-49d9-91ac-4bbfc24a1bda
镜像地址: daocloud.io/library/mysql
个人猜测,daocloud.io/library前缀开头的镜像应该是和docker hub官方保持同步的版本。
2,mysql镜像官方文档解读
docker hub官网地址:
https://hub.docker.com/_/mysql/
在这里可以看到mysql镜像构建的Dockerfile文件,也是从一个linux镜像开始的。
FROM debian:jessie
从官方文档需要明确:
- mysql镜像启动的参数(环境变量)
- 从其他容器link时,需要指定的名称(/etc/hosts中的主机名)。如:
$ docker run --name some-app --link some-mysql:mysql -d application-that-uses-mysql
some-mysql:mysql 别名是否叫mysql,根据使用者容器的需要来定
- 数据库配置文件
- 数据库数据存放路径,这个很重要,不然容器关闭,数据就没了。
最后,文档中提到,如果用一个已经包含数据库的目录(有mysql子目录),那么原有数据保持不变。也就是说可以从现有的数据库来启动容器。
If you start your mysql container instance with a data directory that already contains a database (specifically, a mysql subdirectory), the $MYSQL_ROOT_PASSWORD variable should be omitted from the run command line; it will in any case be ignored, and the pre-existing database will not be changed in any way.
3,daocloud部署mysql
直接在daocloud镜像网页上点击部署最新版本,选择自己的自有主机(云服务器)。
- 应用名称:BIT1DB
- 端口映射:主机端口固定3306,与容器端口保持一致。以后作为本机的固定数据库服务。
- volume:/data10g/bit1db/mysql 映射数据盘地址到容器地址:/var/lib/mysql (为什么是这个地址,之前的文档里面都说了)
- 环境变量:MYSQL_ROOT_PASSWORD 设置mysql root用户密码
然后点击立即部署。
此时可以切换标签页,看到当前YAML文件的配置如下:
BIT1DB:
image: daocloud.io/library/mysql:5.7.4
privileged: false
restart: always
ports:
- 3306:3306
volumes:
- /data10g/bit1db/mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=*****
4,检查mysql启动情况
大概1~2分钟就从无到有启动了一个mysql,容器化真的很方便。
4.1 首先查看主机
# docker images 查看下载的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
daocloud.io/library/mysql 5.7.4 aa5364eb3d85 2 years ago 252.3 MB
# docker ps 查看启动的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a595a1091750 daocloud.io/library/mysql:5.7.4 "/entrypoint.sh mysql" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp dao_BIT1DB_1
# netstat -an | grep 3306 查看主机固定端口
tcp6 0 0 :::3306 :::* LISTEN
/data10g/bit1db/mysql# ls -l 查看数据卷保存的数据
total 123032
-rw-rw---- 1 999 docker 2 Feb 12 09:07 a595a1091750.pid
-rw-rw---- 1 999 docker 56 Feb 12 09:07 auto.cnf
-rw-rw---- 1 999 docker 12582912 Feb 12 09:07 ibdata1
-rw-rw---- 1 999 docker 50331648 Feb 12 09:07 ib_logfile0
-rw-rw---- 1 999 docker 50331648 Feb 12 09:07 ib_logfile1
-rw-rw---- 1 999 docker 12582912 Feb 12 09:07 ibtmp1
drwx------ 2 999 docker 4096 Feb 12 09:07 mysql
drwx------ 2 999 docker 4096 Feb 12 09:07 performance_schema
4.2 然后查看容器
root@a595a1091750:/usr/local/mysql# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.6 a595a1091750 #主机名就是容器ID,并且有一个内网IP,后续从其他容器link时也可以用这个IP指定主机名
4.3 启动一个容器连接mysql试一下
密码输错了是会报错的,也说明我们连接的确实是之前创建的数据库。
# docker run -it --link dao_BIT1DB_1:mysql --rm mysql sh -c 'exec mysql -h"172.17.0.6" -P"3306" -uroot -p"******"'
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
大功告成。
5,phpmyadmin镜像地址
使用mysql的人都习惯用phpmyadmin,所以有必要再启动一个容器。
在镜像市场里面搜索,还是采用daocloud国内源镜像。看其版本应该是与官方保持同步的,而且下载速度比较快。
https://dashboard.daocloud.io/packages/06196480-43ec-4cb9-8325-1d77287dabad
镜像地址: daocloud.io/daocloud/phpmyadmin
6,phpmyadmin镜像官方文档解读
官方文档:https://hub.docker.com/r/phpmyadmin/phpmyadmin/
- 找到其link语句:
docker run --name myadmin -d --link mysql_db_server:db -p 8080:80 phpmyadmin/phpmyadmin
可以看到:
mysql_db_server:db,说明需要把已有的mysql容器映射为别名:db,稍后可以看到db将存在于phpmyadmin的/etc/hosts中。
8080:80,说明容器内部的端口是80
环境变量
PMA_HOST - define address/host name of the MySQL server
PMA_PORT - define port of the MySQL server
7,部署phpmyadmin
-应用名称:BIT1DB_ADMIN
-端口映射:phpmyadmin的网页访问端口可以不固定,这不像mysql,将来需要在程序中配置,因此使用固定端口。
然后点击立即部署
查看YAML文件:
BIT1DB_ADMIN:
image: daocloud.io/daocloud/phpmyadmin:edge
privileged: false
restart: always
ports:
- '80'
environment:
- PMA_PORT=3306
- PMA_HOST=172.17.0.6 #这里用的是内网IP,因此端口对应映射前的端口
8,验证phpmyadmin安装结果
访问网页:http://外网服务IP:32807
32807是动态端口,根据之前的设置映射到phpmyadmin容器的80端口。每次重启容器,端口号自动+1
新建数据库,发现大多数也用的是utf8_general_ci,所以新建数据 这里也选用utf8_general_ci就可以了。
后续会研究一下django容器,开发一个小demo,并使用这里创建的mysql容器。