docker 安装MySQL

在使用、学习MySQL的时候我们需要下载不同的版本的MySQL ,之前我们可以使用sandbox 快速搭建单节点或者一主多从的数据库。现在可以尝试使用 docker 利用已经存在的镜像迅速搭建一个单实例的数据库。

搜索仓库

docker仓库拉取 mysql 8.0.22

选择 star最多的MySQL 镜像,当然也可以使用mariadb 或者percona-server的。

下载指定版本的 MySQL 镜像

➜  ~ docker pull mysql:8.0.22
8.0.22: Pulling from library/mysql
bb79b6b2107f: Already exists
49e22f6fb9f7: Already exists
842b1255668c: Already exists
9f48d1f43000: Already exists
c693f0615bce: Already exists
8a621b9dbed2: Already exists
0807d32aef13: Already exists
a56aca0feb17: Already exists
de9d45fd0f07: Already exists
1d68a49161cc: Already exists
d16d318b774e: Pull complete
49e112c55976: Pull complete
Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d
Status: Downloaded newer image for mysql:8.0.22

我之前已经下载过 MySQL 8.0.22 的镜像文件,提示已经存在。

启动容器

sudo docker run --restart=always --name=my8022 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.22 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

options说明:

–restart=always:重启策略
-d: 后台运行容器,并返回容器ID
-p: 端口映射,格式为:主机(宿主)端口:容器端口
–name: 为容器指定一个名称
-e MYSQL_ROOT_PASSWORD:设置数据库密码
–character-set-server:设置编码
–collation-server:设置校验字符集

如果需要将命令行选项传给容器中的 MySQL 可以使用

docker run --name my8022  \
-p 3306:3306  \
-e MYSQL_ROOT_PASSWORD='xxxxxxyyy'   \
-d mysql:8.0.22 \
--innodb_buffer_pool_size=1G \
--innodb_flush_method=O_DIRECT \

-e 是传递环境变量 --innodb_buffer_pool_size 则是MySQL的系统参数。其实推荐将参数写到my.cnf文件里面。

在容器中运行指定版本的 MySQL 服务器

这个比较简单,指定不同的container name 就可以了。如果在同一台宿主机上 ,需要绑定不同的端口映射。

docker run --name mysql-latest  \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD='123456'   \
-d mysql:latest


docker run --name my my8020  \
-p 3307:3306 \
-e MYSQL_ROOT_PASSWORD='123456'   \
-d mysql:8.0.20

持久化容器中的数据文件

通过容器卷的方式挂载到宿主机的指定目录。

docker run --restart=always --name=my8022 -p 3306:3306 \
--mount type=bind,src=/data/my3306/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/data/my3306/data,dst=/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.22 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

关于容器卷这里简单说一下 ,通常持久化数据有两种方式。

volumes:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中。

-v/--volume,由(:)分隔的三个字段组成,卷名:容器路径:选项列表。选项列表可以ro/rw。

bind mounts:可以存储在宿主机系统的任意位置,这种方式比较常用。但是,bind mount在不同的宿主机系统时不可移植的,比如Windows和Linux的目录结构是不一样的,bind mount所指向的host目录也不能一样。这也是为什么bind mount不能出现在Dockerfile中的原因,因为这样Dockerfile就不可移植了。

--mount,由多个键值对组成,由,分隔,每个由一个<key=>元组组成。type,值可以为 bind,volume,tmpfs。source,对于命名卷,是卷名。对于匿名卷,这个字段被省略。可能被指定为 source 或 src。destination,文件或目录将被挂载到容器中的路径。可以指定为 destination,dst 或 target。volume-opt 可以多次指定。

进入容器 登陆 mysql

➜  /data docker exec  -ti  a3b538b3404 /bin/bash
root@a3b538b34045:/#
root@a3b538b34045:/# mysql -uroot -h127.0.0.1 -p123456
mysql: [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 10
Server version: 8.0.22 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

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> exit

常用命令

运维镜像的常用命令

搜索镜像:docker  search  [OPTIONS]  TERM
上传镜像:docker push  [OPTIONS]  NAME[:TAG]
下载镜像:docker pull  [OPTIONS]  NAME[:TAG]
提交镜像:docker commit [OPTIONS]  CONTAINER NAME[:TAG]
构建镜像:docker build  [OPTIONS]  PATH
删除镜像:docker rmi [OPTIONS]  IMAGE  [IMAGE...]
增加镜像标签:docker tag SOURCE_IMAGE[:TAG]  TARGET_IMAGE[:TAG]
查看所有镜像:docker images  [OPTIONS]  [REPOSITORY[:TAG]]

运维容器的命令

启动/重启容器:docker start/restart CONTAINER
停止/强停容器:docker stop/ kill CONTAINER
删除容器:docker rm [OPTIONS] CONTAINER [CONTAINER...]
重命名容器:docker rename CONTAINER CONTAINER_NEW
进入容器:docker attach CONTAINER
执行容器命令:docker exec CONTAINER COMMAND
查看容器日志:docker logs [OPTIONS] CONTAINER
查看容器列表:docker ps [OPTIONS]
查看正在运行的容器:docker CONTAINER ls

CONTAINER 可以是 CONTAINER_ID 或者是 容器的名称。

转载自杨奇龙博客

posted @ 2023-08-01 10:51  Cetus-Y  阅读(46)  评论(0编辑  收藏  举报