具体操作方法
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
- 再利用docker下载MySQL镜像,这里使用pull直接下载
puleya@root:~$ sudo docker pull mysql:5.7.35
# 因为博主习惯使用5的版本所以下载指定了版本,也可以不指定直接下载官方最新版本
- 直接利用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服务使用3306:3306
- 使用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 只查看启动的进程
- 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端口生效且启动
- 使用另外一台机器或者自己本机连接进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的创建容器验证生效等操作也同上
常见错误
- 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创建容器报错问题检查以下几点
- 端口有没有冲突
- 容器名字创建有没有重复
- 语法格式正不正确
- 命令的英文拼写有没有打错
- 用另一台机器连接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即可
- 若有些无法排查无法解决的莫名错误,这样的话试试stop docker服务重新启动一下,能解决大部分问题。
service docker restart