centos mysql 实战 第二十七节课 mysql in docker
centos mysql 实战 第二十七节课 mysql in docker
删除系统自带的 Docker
yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
安装官方的 docker repo
#安装一些依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 #下载repo文件,#把软件仓库地址替换为 TUNA wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo yum makecache fast yum list |grep docker-ce centos7 yum install -y docker-ce docker-ce-cli containerd.io centos8 报错的原因是因为docker-ce里面的runc和podman(红帽的容器实现)底层的软件包在支持上冲突了,所以我们使用--allowerasing参数,替换掉冲突的软件包 yum -y install docker-ce docker-ce-cli containerd.io --allowerasing
Docker 配置
这个动作在 docker 启动之前执行
1. 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce 2. 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://dcegczfk.mirror.aliyuncs.com"], "data-root": "/data/docker" } EOF sudo systemctl daemon-reload sudo systemctl restart docker
这里只是配置一个利用腾讯云的 docker repo 镜像加速器(这里也可以自行换为阿里云的 repo), 同时指定了 Docker image,container 存储的位置。
可以配置参数参考:
https://docs.docker.com/engine/reference/commandline/dockerd
启动关闭 Docker
启动 Docker
systemctl start docker
关闭 Docker
systemctl stop docker
查看 Images
docker images
查看运行中的 container
docker ps
查看本机上所有 container
docker ps -a
利用 Oracle 官方的 Image 启动 MySQL
Docker image 搜索点: https://hub.docker.com/
官方的 Image: https://hub.docker.com/r/mysql/mysql-server
1. 拉取官方 Image
docker pull mysql/mysql-server:latest
查看 image
docker images
查看该 image 的大概信息
docker inspect mysql/mysql-server:latest
略
2. 基于该 Image: mysql-server:latest 启动 container
docker run --name=mysql3306 -d mysql/mysql-server:latest
查看运行的 container
docker ps
3. 查看 MySQL 的密码并连接上去
docker logs mysql3306 2>&1 |grep PASSWORD mavax10GEsAw#umQiPyL@P4zvUh
但现在这个 container 没办法从外面连接上去, 需要进入行 docker 后连接
docker exec -it mysql3306 mysql -uroot -p
接下来我们想要做一个可以用于做功能测试的 MySQL。
上面的 container 到这里就可以干掉不要了。
docker stop mysql3306 docker rm mysql3306 docker ps -a #确认无 mysql3306
指定配置启动 3306
docker run --name=mysql3306 -p3306:3306 -p33060:33060 -v \ /data/mysql/zst1_mysql_3306.cnf:/etc/my.cnf -v \ /etc/localtime:/etc/localtime -e \ MYSQL_ALLOW_EMPTY_PASSWORD=1 -e MYSQL_USER='zst' -e \ MYSQL_PASSWORD='wubxwubx' -e MYSQL_DATABASE='zst' -d \ mysql/mysql-server:latest
参数说明:
-p3306:3306,指定端口,格式为:-p 宿主机端口:Container 端口。
-v /data/mysql/zst1_mysql_3306.cnf:/etc/my.cnf,配置文件
bind(映射),把本地的/data/mysql/zst1_mysql_3306.cnf 映射到mysql3306 这个实例中的/etc/my.cnf
/etc/localtime:/etc/localtime -e,把宿主机的时区给带进去容器
确认端口监听是不是 Ok
ss -lnt |egrep "3306|33060" docker logs mysql3306 2>&1 |grep PASSWORD [Entrypoint] GENERATED ROOT PASSWORD: 0b)3gmoHYlraqkUpedEnBIM@G0s
登录 MySQL 并创建帐号
docker exec -it mysql3306 mysql -uroot -p grant all privileges on *.* to 'nihao'@'%' identified by '123456' with grant option;
通过宿主机登录 MySQL
mysql -h 172.17.0.2 -unihao -p123456
同时可以执行 show global variables 确认几个关键参数是不是我们指定的值。
到这里 3306 实例创建完事。
但这里还有一个问题:Container 中时间和我们宿主机的时间差了 8 个小时,这个主要是 Image 的时
间设置有问题,我们可以在初始化 3307 实例时把宿主机的时区给带过去就可以解决了。
select sysdate(),now(),@@timezone; mysql -h192.168.11.111 -P3307 -uzst -pwubxwubx
https://www.toutiao.com/i6805798581971190276/
美团面试官:为什么不建议把数据库部署在Docker容器内?
Docker不适合部署数据库的7大原因
当docker服务挂掉,会自动启动新容器,而不是继续重启容器服务,导致问题是Docker 快速扩展的一个重要特征就是无状态,具有数据状态的应用都不适合直接放在 Docker 里面,如果 Docker 中安装数据库,存储服务需要单独提供
目前TX云的TDSQL和阿里的Oceanbase都是直接部署在物理机器,而非Docker
f