MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 数据库 / 正文

使用Docker部署MySQL数据库

2024-11-26 18:04 huorong 数据库 5 ℃ 0 评论

使用VirtualBox安装CentOS 7和Docker

使用Docker部署MySQL数据库(我们在这)

使用Docker制作OpenJDK镜像

使用Docker部署Java应用


查找镜像

网站地址:https://hub.docker.com/

如果只是查找镜像,我们不需要登录,直接在上面的搜索框中输入所需镜像的名称,然后单击回车或在下拉列表中选择即可。

另外,也可以通过命令行来查找镜像,但是Docker所提供的命令中,仅可查找到镜像仓,而无法列出镜像对应的Tag。

首先,我们可以通过以下命令来查找镜像仓:

docker search -f is-official=true mysql

其中“-f”表示过滤条件,等同于“--filter”,此时我们只查找mysql镜像仓,结果如下:

NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   12007     [OK]
mariadb   MariaDB Server is a high performing open sou…   4599      [OK]

如果我们要列出镜像的Tag,有两个RESTful API可以使用:

  • V1版本:https://registry.hub.docker.com/v1/repositories/{repo-name}/tags
  • V2版本:https://registry.hub.docker.com/v2/repositories/library/{repo-name}/tags?page_size={page-size}

其中,大括号括起来的部分表示参数,例如我们需要查找的镜像仓为mysql,则应把“{repo-name}”替换为“mysql”。

这两个API返回的都是JSON数组,直接看起来比较麻烦,可选择将其封装到shell脚本,并对命令行进行解析和截取,以得到简洁的输出,对应的封装在网上可以查到很多,如:https://www.jianshu.com/p/f974ec9e7937,此处不再赘述。

以容器方式运行MySQL

此时我们选择使用Tag为8.0.28的镜像。首先,我们通过以下命令将镜像拉取到本地。

docker image pull mysql:8.0.28

拉取mysql镜像可能需要一段时间,待拉取完成后,其输出结果如下:

8.0.28: Pulling from library/mysql
72a69066d2fe: Pull complete
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
e5c707858ec0: Pull complete
fc41578cbf60: Pull complete
4785d896ef10: Pull complete
7d250cdc93be: Pull complete
309700f41983: Pull complete
45fd33301836: Pull complete
92f970c68b71: Pull complete
bb3544339a9e: Pull complete
f66ddf4c43fa: Pull complete
Digest: sha256:d0507b008897c39f6cbc76285af1171d4551988475e00e91344060023cd9c553
Status: Downloaded newer image for mysql:8.0.28
docker.io/library/mysql:8.0.28

此时我们可通过以下命令来查看本地镜像:

docker image ls

输出的结果如下:

REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
mysql        8.0.28    5b4c624c7fe1   3 days ago   519MB

现在我们可以使用这个镜像来运行一个MySQL的容器实例,命令如下:

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 --restart always -d mysql:8.0.28

其中参数的含义如下:

  • -p,等同于“--publish”,表示将主机的端口映射给容器,此时是将主机的3306端口映射给容器,以便于可通过访问主机端口来获取MySQL服务,需要注意的是冒号前面的是主机端口,后面才是容器端口
  • --name,表示运行的容器的名称
  • -e,等同于“--env”表示在容器中预置一个环境变量,变量名称为MYSQL_ROOT_PASSWORD,值为123456
  • --restart,指示容器的重启策略,这里使用always策略,表示除非手动停止容器,否则容器将自动重启。
  • -d,等同于“--detach”,表示后台运行,并输出容器的唯一标识

命令的执行结果如下:

c8e4c1c2f9506eaa0e8ec30a361ba28d9b208dd827c6369d1e42e08a989143a5

这是新创建并运行的容器的唯一标识,我们可通过以下命令来查看容器:

docker container ls

命令的输出结果如下:

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
c8e4c1c2f950   mysql:8.0.28   "docker-entrypoint.s…"   14 seconds ago   Up 13 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql

登录到MySQL容器

在容器运行之后,我们可通过以下命令登录到容器:

docker exec -it mysql /bin/bash
  • exec,表示在容器中执行命令
  • -it,表示以交互式执行,若是“-d”,则表示后台执行
  • mysql,表示待执行命令的容器的名称,也可以使用容器的唯一标识
  • /bin/bash,表示在容器中执行的名称

因此这行命令表示,在mysql容器中执行“/bin/bash”命令,并以交互式方式将输入和输出绑定到当前的终端。其表现形式与使用“ssh”命令连接到远端服务器基本一致。此时我们可以通过终端在容器中执行命令。
首先,我们可通过执行以下命令来查看之前在运行容器时设置的环境变量。

echo ${MYSQL_ROOT_PASSWORD}

执行结果如下:

123456

然后,我们可通过以下命令来登录MySQL,密码即为“123456”:

mysql -u root -p

输出如下,表示登录MySQL成功,后续即可在其中进行创建数据库等操作。

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.28 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

远程连接

因为之前已经配置了容器在主机中映射的端口,因此此时可通过主机的IP来远程连接MySQL数据库。
此时我们使用MySQL Workbench来进行远程连接。

首先,我们在Workbench中找到连接MySQL数据库的菜单项“Database / Connect to database”:


在弹出的对话框中输入运行容器的主机的IP,并单击“Store in Vault ...”按钮输入root密码,单击“OK”按钮连接到MySQL。


连接完成后的界面如下,表示已经连接成功。


此时,我们可在MySQL Workbench中对MySQL进行操作。MySQL服务已可用。后面,我们将制作OpenJDK的镜像,用以为将自己的Java应用部署到容器中做准备。

Tags:oracle in数组

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言