docker mysql 简书_Docker 安装 MySQL

下载 MySQL Server Docker Image

#tag代表版本号,如5.5,5.6,5.7,8.0或者latest

docker pull mysql/mysql-server:tag

#查看下载的镜像

docker images

要下载MySQL Enterprise Edition 镜像,请运行如下命令:

docker pull store/oracle/mysql-enterprise-server:tag

docker pull container-registry.oracle.com/mysql/enterprise-server:tag

开启MySQL Server 实例

使用以下命令为MySQL社区服务器启动一个新的Docker容器:

docker run --name=mysql1 -d mysql/mysql-server:tag

如果从Oracle容器注册表中下载了Docker镜像,那么就可以使用这个命令为MySQL企业服务器启动一个新的Docker容器:

docker run --name=mysql1 -d container-registry.oracle.com/mysql/enterprise-server:tag

如果Docker映像是从Docker商店下载的,那么就用这个命令为MySQL企业服务器启动一个新的Docker容器:

docker run --name=mysql1 -d store/oracle/mysql-enterprise-server:tag

--name 选项,为docker容器提供一个自定义的名称,如mysql1,这个操作是可选的。如果没有提供容器名称,则会生成一个随机的容器名。如果之前的Docker pull 或 Docker run命令没有下载指定名称和标签的Docker镜像,那么上面的命令会去下载最新的mysql镜像。下载完后,容器的初始化就开始执行。当您运行docker ps命令时,docker容器列表中会显示:

shell> docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

a24888f0d6f4 mysql/mysql-server "/entrypoint.sh my..." 14 seconds ago Up 13 seconds (health: starting) 3306/tcp, 33060/tcp mysql1

容器初始化可能需要一些时间。当服务器准备好使用时,docker ps 命令输出中的容器的状态从(health:starting)到(healthy).上面的docker run 命令中使用的 -d 选项使容器在后台运行。使用这个命令监视容器的输出:

docker logs mysql1

一旦初始化完成,命令的输出就会包含为root用户生成的随机密码。例如,检查密码。

shell> docker logs mysql1 2>&1 | grep GENERATED

GENERATED ROOT PASSWORD:Axegh3kAJyDLaRuBemecis&EShOs

从容器内连接到MySQL服务器

一旦服务器准备好了,您就可以在刚刚启动的MySQL服务器容器中运行MySQL客户端,并将其连接到MySQL服务器。使用Docker exec -it 命令在您已经启动的Docker容器中启动一个mysql客户端,如下所列:

docker exec -it mysql1 mysql -uroot -p

当被询问时,输入生成的根密码(参见上面关于如何查找密码的MySQL服务器实例的最后一步)。因为mysql onetime password选项默认为true,在您将mysql客户端连接到服务器之后,您必须通过发出以下语句重置服务器根密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

用您选择的密码替换密码。一旦密码被重置,服务器就可以使用了。

容器Shell访问

要让shell访问MySQL服务器容器,请使用docker exec -it 命令在容器内启动一个bash shell:

shell> docker exec -it mysql1 bash

bash-4.2#

然后您可以在容器内运行Linux命令。例如,要查看容器内服务器的数据目录中的内容,请使用以下命令:

bash-4.2# ls /var/lib/mysql

auto.cnf ca.pem client-key.pem ib_logfile0 ibdata1 mysql mysql.sock.lock private_key.pem server- cert.pem sys

ca-key.pem client-cert.pem ib_buffer_pool ib_logfile1 ibtmp1 mysql.sock performance_schema public_key.pem server-key.pem

停止并删除一个MySQL容器

要停止我们创建的MySQL服务器容器,请使用以下命令:

docker stop mysql1

docker stop 向mysqld进程发送SIGTERM信号,这样服务器就会优雅地关闭。

还要注意的是,当容器的主进程(MySQL服务器容器中的mysqld)停止时,Docker容器会自动停止。

再次启动MySQL服务器容器:

docker start mysql1

重启容器

docker restart mysql1

删除mysql服务容器前先停止容器:

docker stop mysql1

docker rm mysql1

如果您想要同时删除服务器数据目录的Docker卷,则将 -v 选项添加到Docker rm命令中。

致此,以上操作已经完全满足docker安装mysql的方式。如下是针对Docker的优化MySQL安装 。

针对Docker的优化MySQL安装

MySQL的Docker镜像针对代码的大小进行了优化,这意味着它们只包含了那些在Docker容器中运行MySQL实例的大多数用户的关键组件。在以下方面,MySQL Docker安装与普通的、非Docker的安装不同:

包含的二进制文件仅限于:

/usr/bin/my_print_defaults

/usr/bin/mysql

/usr/bin/mysql_config

/usr/bin/mysql_install_db

/usr/bin/mysql_tzinfo_to_sql

/usr/bin/mysql_upgrade

/usr/bin/mysqladmin

/usr/bin/mysqlcheck

/usr/bin/mysqldump

/usr/bin/mysqlpump

/usr/sbin/mysqld

所有的二进制被剥落,不包含调试信息。

配置MySQL Server

当你启动mysql docker容器时,您可以通过Docker run命令将配置选项传递给服务器;例如:

docker run --name mysql1 -d mysql/mysql-server:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_col

命令以utf8mb4作为默认字符集和utf8mb4col作为您的数据库的默认排序启动MySQL服务器。

另一种配置MySQL服务器的方法是准备一个配置文件,并将其挂载到容器内的服务器配置文件的位置。有关详细信息,请参阅持久数据和配置更改。

持久数据和配置更改

Docker容器在原则上是临时的,如果容器被删除或损坏,任何数据或配置都将丢失(参见讨论)。然而,Docker卷提供了一种机制,可以在Docker容器中保存数据。在初始化时,MySQL服务器容器为服务器数据目录创建Docker卷。运行docker检查容器命令的JSON输出有一个挂载键,其值提供数据目录卷的信息:

shell> docker inspect mysql1

...

"Mounts": [

{

"Type": "volume",

"Name": "4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652",

"Source": "/var/lib/docker/volumes/4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652/_data",

"Destination": "/var/lib/mysql",

"Driver": "local",

"Mode": "",

"RW": true,

"Propagation": ""

}

],

...

输出显示源文件夹

/var/lib/docker/volumes/4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652/_data,将数据持久化到主机上的数据,已经安装在/var/lib/mysql中,容器内的服务器数据目录。

保存数据的另一种方法是在创建容器时使用 --mount 选项挂载主机目录。同样的技术可以用来持久化服务器的配置。下面的命令创建一个MySQL服务器容器,并将数据目录和服务器配置文件绑定在一起:

docker run --name=mysql1 \

--mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \

--mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \

-d mysql/mysql-server:tag

配置文件path-on-host-machine/my.cnf必须存在,同时包含指定的用户:

[mysqld]

user=mysql

path-on-host-machine.datadir目录必须存在。要发生服务器初始化,目录必须是空的。您还可以安装一个带有数据的目录,并使用它启动服务器;但是,您必须确保启动Docker容器,其配置与创建数据的服务器具有相同的配置,并且启动容器时所需的任何主机文件或目录都被安装。

运行额外的初始化脚本

如果您想在创建后立即在数据库上运行任何.sh或.sql脚本,您可以将它们放入主机目录中,然后mount目录在/docker-entrypoint-initdb.d

docker run --name=mysql1 \

--mount type=bind,src=/path-on-host-machine/scripts/,dst=/docker-entrypoint-initdb.d/ \

-d mysql/mysql-server:tag

从另一个Docker容器中的应用程序连接到MySQL

通过建立一个Docker网络,你可以让多个Docker容器相互通信,这样,在另一个Docker容器中的客户端应用程序就可以在服务器容器中访问MySQL服务器。首先,创建一个Docker网络:

docker network create my-custom-net

然后,当您创建并启动服务器和客户端容器时,使用-网络选项将它们放在您创建的网络上。例如:

docker run --name=mysql1 --network=my-custom-net -d mysql/mysql-server

docker run --name=myapp1 --network=my-custom-net -d myapp

myapp1容器随后可以与mysql1主机连接到mysql1容器,反之亦然,因为Docker会自动为给定的容器名称设置一个DNS。在下面的例子中,我们从myapp1容器中运行mysql客户端,以便在自己的容器中连接主机mysql1:

docker exec -it myapp1 mysql --host=mysql1 --user=myuser --password

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值