centos7使用docker启动mysql实例

  • Post author:
  • Post category:mysql


dockerhub关于mysql的操作指南:

https://hub.docker.com/_/mysql

一、拉取官方镜像

# docker pull mysql:5.7 #拉取mysql5.7镜像
# docker pull mysql #拉取最新mysql镜像

二、查看系统中所有docker镜像

# sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 db39680b63ac        12 days ago         437MB

三、启动mysql实例

# docker run -p 3306:3306 --name mysql0 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

其中mysql0 是要分配给容器的名称, MYSQL_ROOT_PASSWORD是要为MySQL根用户设置的密码,-d 表示我们以守护试式方式(没有交互界面)启动实例,-p 端口映射,此处映射服务器3306端口到容器的3306端口。

也可以在启动时指定mysql容器的字符集

# docker run -p 3306:3306 --name mysql0 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

如果要建立目录映射关系,则使用以下命令

duso docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=hungteshun \
-d mysql:5.7

-v:主机和容器的目录映射关系。

四、查看容器运行状态

# docker container ls
或者
# docker ps -a
# docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
62776ae68d2f        mysql:5.7           "docker-entrypoint.s…"   49 minutes ago      Up 49 minutes 
# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
62776ae68d2f        mysql:5.7           "docker-entrypoint.s…"   50 minutes ago      Up 50 minutes  

五、使用交互方式进入mysql服务

# docker exec -it mysql0 bash
root@62776ae68d2f:/# mysql -uroot -phungteshun 

六、如果容器运行正常,但是无远程访问到MySQL,可能是以下原因


原因一:防火墙阻拦,CentOS 服务器需要开放 3307 端口


在 Centos 7 或 RHEL 7 或 Fedora 中防火墙由 firewalld 来管理,而不是 iptables


1、查询firewalld状态

# systemctl status firewalld


2、如果firewalld服务关闭,则通过下列命令开启 firewalld 服务

# systemctl start firewalld

没有任何提示即开启成功


3、查看已开放的端口

# firewall-cmd --zone=public --list-port
80/tcp 8080/tcp


4、添加3306端口

# firewall-cmd --zone=public --add-port=3306/tcp --permanent


5、重启firewalld服务

# firewall-cmd --reload

也可以还原传统的管理方式使用 iptables

1、屏蔽firewalld服务

# systemctl stop firewalld  
# systemctl mask firewalld  

2、安装 iptables-services

# yum install iptables-services  

3、设置开机启动

# systemctl enable iptables

4、启动iptables服务

# systemctl stop iptables  
# systemctl start iptables  
# systemctl restart iptables  
# systemctl reload iptables 

5、保存设置

# service iptables save

6、在 /etc/sysconfig/iptables 里添加需要开放的端口

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

原因二:在mysql容器中设置远程访问账号

# docker exec -it mysql0 bash
root@62776ae68d2f:/# mysql -uroot -phungteshun 
mysql> grant all privileges on *.* to root@'%' identified by "password";
mysql> flush privileges;



版权声明:本文为hjfcgt123原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。