在安装好docker后,可以在docker里安装mysql, 本篇博客介绍如何在docker里安装mysql.
关于docker的安装,可以参考这篇博客【docker学习笔记4:CentOS7安装docker】。

一、docker安装mysql

命令如下:

docker pull mysql:5.7

启动mysql

docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

命令说明:
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。

-v -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。

-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。

-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。

-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。

查看mysql镜像状态 docker ps -a, 如下图
在这里插入图片描述
不是Exited, 说明正在运行。
如果出错了,可以查看log, 命令docker logs 容器id, 如下图:
在这里插入图片描述

二、配置mysql访问策略

由于mysql的安全策略,现在还不能使用root/123456来访问数据库,需要对mysql进行配置,输入如下命令进入mysql:

docker exec -it 09bfa6782f80 /bin/bash

登录mysql

mysql -uroot -p123456

建立用户并授权:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'root' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root' WITH GRANT OPTION;
FLUSH PRIVILEGES;

此时的用户名和密码都是root, 如下图:
在这里插入图片描述

三、连接mysql

windows电脑连接mysql
在这里插入图片描述
可以点击测试连接,查看连接结果。如果连接成功就点击确定, 双击连接名即可启动连接,如下图:
在这里插入图片描述
右键创建数据库,如下图
在这里插入图片描述
设置如下
在这里插入图片描述

四、启动mysql

下次开启虚拟机时,启动容器
在这里插入图片描述
docker start 容器id前四位或者五位,只要能区分即可

docker start 还有两个参数
-i:以 交互模式启动
-t:以 附加进程方式启动
关闭容器
1、docker stop 此方式常常被翻译为优雅的停止容器

docker stop 容器ID或容器名
参数 -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态
docker stop -t=60 容器ID或容器名

2、docker kill

docker kill 容器ID或容器名 :直接关闭容器

由此可见stop和kill的主要区别:stop给与一定的关闭时间交由容器自己保存状态,kill直接关闭容器

五、本篇博客涉及到的命令介绍

docker pull

docker pull 命令是 Docker 命令行接口的一部分,用于从远程仓库(例如 Docker Hub)下载(或者“拉取”)一个Docker映像(Image)。当你运行一个映像而本地没有该映像时,Docker 会自动执行 pull 命令,但是你也可以显式地运行 docker pull 来预先下载一个映像而不立即运行它。

下面是 docker pull 命令的基本用法:

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  • NAME: 映像的名字,例如 ubuntunginx 等。
  • TAG: 映像的标签,指定特定的版本,例如 latest3.10 等。如果你不指定标签,Docker 默认使用 latest 标签。
  • @DIGEST: 映像的摘要,是一个 SHA256 校验和,用于下载确切的映像版本,确保下载的是正确的内容。

选项

docker pull 还可以包含一些选项,例如:

  • --all-tags-a: 拉取仓库中所有标记的映像。
  • --disable-content-trust: 跳过镜像验证,默认情况下是打开的。

示例

下面是一些 docker pull 的示例:

  • 拉取最新版本的 ubuntu 映像:

    docker pull ubuntu
    

    如果不指定标签,将自动拉取标签为 latest 的映像。

  • 拉取特定版本的 nginx 映像:

    docker pull nginx:1.17.1
    

    这将只拉取标签为 1.17.1nginx 映像。

  • 拉取一个映像的所有版本:

    docker pull --all-tags nginx
    

    这将拉取 nginx 仓库中所有标记的映像。

使用 docker pull 命令时,Docker 客户端会与 Docker 仓库的服务器通信,检索所需的信息,并下载映像到本地。完成后,你可以通过 docker images 命令查看已经下载的映像。

docker exec

docker exec 命令是 Docker 的一个非常有用的功能,它允许用户在正在运行的 Docker 容器中执行命令。这可以用于许多场景,比如调试容器内部的环境、管理容器内的服务、修改系统配置等。

详解 docker exec 命令

基本语法如下:

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
  • OPTIONS:执行命令时可以指定的选项。
  • CONTAINER:目标容器的 ID 或名称。
  • COMMAND:要在容器内执行的命令。
  • ARG...:传递给命令的参数。
常用选项
  • -d, --detach: 在后台运行命令。
  • -i, --interactive: 即使没有附加也保持 STDIN 打开,通常与 -t 一起使用以便能够输入命令。
  • -t, --tty: 分配一个伪终端,这使得执行的命令就像在一个常规终端中运行一样。
  • --user: 指定以哪个用户身份执行命令。
  • --env: 设置环境变量(例如 --env VAR=value)。

示例命令解析

命令:

docker exec -it 09bfa6782f80 /bin/bash
  • 09bfa6782f80:这是目标容器的 ID。在 Docker 中,每个容器都有一个唯一的 ID,可以通过 docker ps 命令查看当前运行的容器列表及其 ID。
  • -it:这是两个选项的组合。
    • -i--interactive 保持输入开放,这样就可以与执行的命令进行交互(例如,你可以在运行的 bash shell 中输入命令)。
    • -t--tty 表示分配一个终端,这使得容器内的会话更像是在一个真实的终端中运行,提供了一个用户友好的交互界面。
  • /bin/bash:这是在容器内部执行的命令。在这个例子中,命令是启动 bash shell,这样你就可以在容器的命令行环境中操作。

使用场景

使用 docker exec -it 命令启动一个交互式 shell 是 Docker 最常见的用例之一,因为它允许管理员或开发者直接进入容器内部,进行各种操作和检查,就像在一个常规的 Linux 环境中工作一样。这对于调试、手动修复问题或简单地探索容器的内部结构非常有帮助。

小贴士

  • 如果你需要在容器中运行图形界面的应用程序,你可能需要配置更多的环境变量和/或挂载点。
  • 当使用 -it 连接到容器时,可以通过键入 exit 命令或使用组合键 Ctrl-D 来断开连接。
  • 要在后台运行命令,可以使用 -d 选项。这在自动化脚本中特别有用。

通过这种方式,docker exec 提供了一个强大的界面来与运行中的容器进行交互,它是 Docker 工具箱中不可或缺的一部分。

docker start

docker start 命令用于启动一个或多个已经停止的 Docker 容器。这是 Docker 容器管理的基本功能之一,允许用户重新启动之前创建并运行过但目前已经停止的容器。

语法

命令的基本语法如下:

docker start [OPTIONS] CONTAINER [CONTAINER...]
  • OPTIONS:执行命令时可用的选项。
  • CONTAINER:一个或多个容器的 ID 或名称。

常用选项

  • -a, --attach:将 STDOUT/STDERR 附加到终端上,并显示容器内部发出的所有输出。这可以让你看到容器启动时的日志输出。
  • -i, --interactive:使得容器的 STDIN 保持打开。通常与 -a 结合使用,以便于交互式操作。

示例

  1. 启动单个容器

    假设有一个容器的 ID 是 3c8d7a2d1b79,你可以使用下面的命令来启动这个容器:

    docker start 3c8d7a2d1b79
    

    如果容器名为 my-container,同样的操作可以写作:

    docker start my-container
    
  2. 启动多个容器

    你可以在同一个 docker start 命令中指定多个容器:

    docker start container1 container2 container3
    

    这将依次尝试启动 container1container2container3 这三个容器。

  3. 启动容器并查看输出

    如果你希望在启动容器的同时,立即查看其输出,可以使用 -a 选项:

    docker start -a container_name
    

    如果你还需要与容器交互(比如,容器内运行的是一个交互式命令行工具),可以加上 -i

    docker start -ai container_name
    

使用场景

docker start 命令常用于以下场景:

  • 开发环境的管理:在开发过程中,你可能需要频繁地停止和启动容器以节省资源或应用新配置。
  • 生产环境的故障恢复:在生产环境中,如果某个容器因故障停止,重启容器可能是快速恢复服务的一个步骤。
  • 自动化脚本:在自动化部署或系统管理脚本中,可以使用 docker start 来恢复容器服务。

注意事项

  • 启动容器不会重置其文件系统,所有的更改都是持久的。这意味着容器可以像虚拟机一样用于保存状态,但在需要彻底重置容器时,你可能需要重新创建容器。
  • 如果容器启动失败,Docker 通常会提供错误消息帮助诊断问题,如端口冲突、容器配置错误等。

docker start 命令是 Docker 容器生命周期管理中非常基础的一部分,它与 docker stopdocker restart 等命令一起,提供了一套完整的容器状态控制工具。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐