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

posted @ 2020-08-20 10:56  xiaohuazi  阅读(178)  评论(0编辑  收藏  举报