Jiahonzheng's Blog

MySQL 与容器化

字数统计: 856阅读时长: 3 min
2019/12/16 Share

本次课程作业围绕着 MySQL 和容器化而展开的。

Hello Docker

编写 Dockerfile

我们需要编写 Dockerfile ,才可以构建 Docker 镜像,以下是一个简单的镜像构建文件。

1
2
3
FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]

在该文件中,我们指明镜像基于 ubuntu:latest 镜像,镜像启动后运行 top -b -c 命令。

执行 docker build . -t hello 命令,我们即可构建一个简单的 Docker 镜像。

运行容器

在构建完容器后,我们可执行以下命令运行容器。

1
docker run -it -rm hello -H

其中,-it 表示可交互式的 TTY 界面-rm 表示容器运行完毕后删除此容器。

MySQL Docker

我们可执行以下命令运行一个 MySQL 容器,在命令中我们通过 -e 设置容器的环境变量参数,设定了 MySQL 数据库密码。

1
docker run -p 3336:3306 --name hellomysql -e MYSQL_ROOT_PASSWORD=Abcd1234 -d mysql:5.7

上述命令执行结果如下。

我们可执行 docker ps -a | grep hellomysql 命令查看容器是否正常运行,该命令执行结果如下图所示,输出结果中的 Up 3 minutes 表明容器已正常运行。

持久化

数据库的一个很重要的特性是持久化,而上述执行的命令是不具备持久化能力的,因为一旦容器停止运行,所存储的数据都丢失了。

因此,我们需要创建 Volumes ,并与镜像链接,实现数据持久化。首先,我们需要删除原先创建的镜像,具体命令如下。

1
docker rm -fv $(docker ps -a | grep hellomysql |awk '{print $1}')

随后,我们创建名为 hellovolume 的卷。

1
docker volume create hellovolume

最后,我们将 hellovolume 卷与容器链接,并启动容器。

1
docker run -p 3336:3306 --name hellomysql -e MYSQL_ROOT_PASSWORD=Abcd1234 -v hellovolume:/var/lib/mysql -d mysql:5.7

上述命令的执行结果如下图所示。

我们现在创建另外一个容器,作为 MySQL 数据库的客户端,实现与 hellomysql 的交互,执行命令如下:

1
docker run --name myclient --link hellomysql:mysql -it mysql:5.7 bash

在该命令中,我们使用 --link 参数,使得 myclienthellomysql 容器链接在一起,命令执行结果如下图所示。

使用 Docker Compose

Docker Compose 是一个多容器应用自动化部署工具,可大大提高容器部署效率,其通过解析 docker-compose.yml 文件中的配置,实现容器的自动化部署。

现在,我们想运行多个容器:MySQL 和 Adminer ,其中Adminer 是一个数据库管理工具,提供了一个 Web 页面,用于管理数据库。我们编写以下的 docker-compose.yml 文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
version: "3"
services:
mysql:
image: mysql:5.7
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: Abcd1234
adminer:
image: adminer
restart: always
ports:
- 8080:8080

在上述文件中,我们声明了两个 services ,分别是 mysqladminer 。在 mysql 中,我们指明了所使用的镜像、密码配置和重启策略;在 adminer 中,我们指明了所使用的镜像、重启策略和端口映射。

通过执行 docker-compose up -d 命令,我们即可启动 mysqladminer 两个容器。

在成功运行上述命令后,我们即可在浏览器中访问 :8080 端口,进入 Adminer 管理页面。

输出 MySQL 账户名和密码后,我们即可进入到数据库管理页面。

最终,我们通过执行以下命令来终止上述两个容器的运行。

1
docker-compose down

CATALOG
  1. 1. Hello Docker
    1. 1.1. 编写 Dockerfile
    2. 1.2. 运行容器
  2. 2. MySQL Docker
    1. 2.1. 持久化
  3. 3. 使用 Docker Compose