Docker系列文—— 在Centos和Ubuntu系统中利用 docker 安装 MySQL 镜像环境且利用别的机器进入docker中创建的MySQL容器详细步骤过程!!!

Docker系列文—— 在Centos和Ubuntu系统中利用 docker 安装 MySQL 镜像环境且利用别的机器进入docker中创建的MySQL容器详细步骤过程!!!

具体操作方法

1.如果是全新的乌班图机器,没有下载MySQL的可以先下载mariadb

puleya@root:~$ sudo apt install mariadb-server
# 页面能进入说明成功
puleya@root:~$ sudo mariadb 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 50
Server version: 10.3.30-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

Tips:如果不习惯乌班图的普通用户,不习惯敲sudo,可以使用乌班图的root用户

puleya@root:~$ sudo passwd root
New password: # 设置密码
Retype new password: 
passwd: password updated successfully
puleya@root:~$ su root  # 进入root
  1. 再利用docker下载MySQL镜像,这里使用pull直接下载
puleya@root:~$ sudo docker pull mysql:5.7.35
# 因为博主习惯使用5的版本所以下载指定了版本,也可以不指定直接下载官方最新版本
  1. 直接利用docker建立并且启动一个MySQL容器
docker run --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

  • -e 表示宿主机往容器里传递环境变量 environment
  • MYSQL_ROOT_PASSWORD 是变量名
  • my-secret-pw 变量的值 即想设置的密码
root@root:/home/puleya# docker run --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD='sc123456' -d -p 3308:3306  mysql:5.7.35
2181654cd5e88a1f12f3831bbc8ad4cfdc41dde6993b0b4a87c24cb1b702798f
# 建立成功会返回一串数字与字母
  • 这里的 -d是 在后台启动一个容器进程 deamon
  • -p 是端口的映射:iptables的DNAT 3308端口(注意:这里不能选取已经被占用的端口号,若宿主机开启了MySQL同时开启了3306端口则这里不能建立3306:3306只能建立3308等别的端口:3306去开启映射)
# 这里我们使用ss查询端口号
root@root:/home/puleya# ss -anplut|grep mysql
tcp    LISTEN  0       80                 127.0.0.1:3306          0.0.0.0:*      users:(("mysqld",pid=2130,fd=21))     
# 说明我们外面宿主机开启了3306端口,所以这里我们使用3308:3306,也可以关闭宿主机的MySQL服务使用33063306
  1. 使用docker查看启动的进程
root@root:/home/puleya# docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
2181654cd5e8   mysql:5.7.35   "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp   sc-mysql-1
root@root:/home/puleya# docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
2181654cd5e8   mysql:5.7.35   "docker-entrypoint.s…"   9 seconds ago   Up 8 seconds   33060/tcp, 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp   sc-mysql-1

  • dockers ps -a 查看全部进程
  • docker ps 只查看启动的进程
  1. ss查看容器的mysql启动情况
root@root:/home/puleya# ss -anplut  # 以下截取核心的内容
tcp           LISTEN         0              80                              127.0.0.1:3306                      0.0.0.0:*            users:(("mysqld",pid=2130,fd=21))                
tcp           LISTEN         0              4096                              0.0.0.0:3308                      0.0.0.0:*            users:(("docker-proxy",pid=6230,fd=4))  ))   
# 此处"docker-proxy"成功创建启动 说明我们的容器内部3308端口生效且启动
  1. 使用另外一台机器或者自己本机连接进docker建立的MySQL容器
# -h 指定连接服务器的ip地址 -P 指定访问的端口
[root@kafka02 web]# mysql -h 192.168.2.24 -uroot -psc123456 -P 3308
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 2
Server version: 5.7.35 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> 

# 这样即成功建立且连接上,Centos的创建容器验证生效等操作也同上

常见错误

  1. docker 创建报错
root@root:/home/puleya# docker run --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD='sc123456' -d -p 3306:3306  mysql:5.7.35
74ff621b94228958000d46aea12e0048330ff5d95f00750d2a29289fa2623061
docker: Error response from daemon: driver failed programming external connectivity on endpoint sc-mysql-1 (f080450ae578e4203f39a446b9fc6f0c1020932f835ad27ab25d2dde627a8d3f): Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use.

一切关于docker创建容器报错问题检查以下几点

  • 端口有没有冲突
  • 容器名字创建有没有重复
  • 语法格式正不正确
  • 命令的英文拼写有没有打错
  1. 用另一台机器连接MySQL连接不上的问题
[root@kafka02 web]# mysql -h 192.168.2.32 -P 3308 -uroot rootroot
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.2.32' (111)
  • 检查本机防火墙有没有关闭
  • 检查防火墙的规则

解决:

# 乌班图系统关闭防火墙
sudo ufw disable 
# 查看防火墙状态
ufw status
# Centos关闭防火墙
[root@kafka02 web]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
# Centos查看防火墙状态
[root@kafka02 web]# service firewalld status
Redirecting to /bin/systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)
# Centos关闭selinux
[root@kafka02 web]# setenforce 0
setenforce: SELinux is disabled
# Centos查看selinux状态
[root@kafka02 web]# getenforce
Disabled

查看防火墙规则

root@root:/home/puleya# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             172.17.0.2           tcp dpt:mysql

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere           

这里有关于docker等的规则说明没有问题
没有的话,直接重新启动docker即可

  1. 若有些无法排查无法解决的莫名错误,这样的话试试stop docker服务重新启动一下,能解决大部分问题。
service docker restart
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值