Centos7.8下安装Docker, MySQL5.7, Redis

前言

遇到问题

Centos 选用7.4以下的版本(以7.2为例),在通过xshell等工具访问docker里的mysql等容器时,会产生网络错误如下:

使用Navicat远程服务器mysql数据库时报错误:2013-Lost connection to MYSQL server at 'reading for initial communication packet',system error:0

Centos7.8下安装Docker, MySQL5.7, Redis_第1张图片

解决思路

  1. 网友说要找到配置文件 my.cnf,中的bind-address = 127.0.0.1注释掉,但是发现自己并没有写这个(这个的意思是只能本机连接,不允许别人连接),但是并没有用。
  2. 配置文件my.cnf,中[mysqld]部分的参数,在配置后面建立一个新行,添加下面这个参数:skip-name-resolve(禁用dns解析)保存文件并重启MySQL,问题还是没有解决。
  3. 有人说可能是网络问题。顺着这个思路去找,先telnet docker的宿主机端口是通的,然后在宿主机里面telnet 容器端口,就不通了。这就基本确定是网络问题了。然后去查这方面的资料,说centos7.4以上版本对docker支持友好,就换了宿主机的系统,换成centos7.8(http://mirrors.aliyun.com/centos/7.8.2003/isos/x86_64/,果然就好了。到此问题就解决了。

Centos 官网镜像下载地址:https://www.centos.org/download/

国内加速镜像下载地址:http://isoredirect.centos.org/centos/7/isos/x86_64/

Aliyun下载Centos7.8地址(同解决思路3):http://mirrors.aliyun.com/centos/7.8.2003/isos/x86_64/

1. 安装Docker

Centos7下,Docker安装文档 https://docs.docker.com/engine/install/centos/

1.1 卸载系统之前的Docker

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

sudo: 以centos下超级管理员的权限执行

No Match for argument: docker...: 之前未安装过docker

1.2 设置仓库

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装依赖的包,配置Docker包所在的仓库地址

1.3 安装Docker引擎

$ sudo yum install docker-ce docker-ce-cli containerd.io

 1.4 启动Docker

$ sudo systemctl start docker

$ docker -v
Docker version 19.03.12, build 48a66213fe

$ docker images
REPOSITORY          TAG        IMAGE ID            CREATED      SIZE 

1.5 设置开机自启动

$ sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

1.6 配置Docker镜像加速

通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

$ sudo mkdir -p /etc/docker

$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://8g75r3kq.mirror.aliyuncs.com"]
}
EOF

$ sudo systemctl daemon-reload # 重启docker后台线程

$ sudo systemctl restart docker # 重启docker

2. 安装MySQL5.7

官方镜像:https://hub.docker.com/_/mysql,可查看安装的版本等信息

2.1 下载镜像文件

$ docker pull mysql:5.7 # :后为版本号,不加默认为最新版本

$ sudo docker images # 查看镜像是否下载好
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7                 9cfcce23593a        4 weeks ago         448MB

2.2 创建实例并启动

$ docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
ae0c62e2bdaca498bb3acc40fbee05cda617e7821fe2359e5416b5f7793f6488

# 参数说明
    --name mysql: 为当前容器命名
    -p 3306:3306: 将主机的3306端口(前者)映射到容器的3306端口(后者)
    -v /mydata/mysql/log:/var/log/mysql: 将容器配置文件夹(后者)挂载到主机(前者)
    -v /mydata/mysql/data:/var/lib/mysql: 将数据文件夹挂载到主机
    -v /mydata/mysql/conf:/etc/mysql: 将配置文件夹挂载到主机
    -e MYSQL_ROOT_PASSWORD=root: 初始化root用户的密码
    -d mysql:5.7: 启动镜像mysql5.7版本,并以后台方式运行

$ docker ps # 查看docker正在运行中的容器
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                               NAMES
ae0c62e2bdac        mysql:5.7           "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

2.3 进入容器内部

$ docker exec -it mysql /bin/bash
[root@localhost ~]# docker exec -it mysql /bin/bash
root@ae0c62e2bdac:/# ls
bin  boot  dev  docker-entrypoint-initdb.d  entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

$ whereis mysql
root@ae0c62e2bdac:/# whereis mysql
mysql: /usr/bin/mysql /usr/lib/mysql /etc/mysql /usr/share/mysql

$ exit;
root@ae0c62e2bdac:/# exit;
exit
[root@localhost ~]#

2.4 查看挂载文件夹

[root@localhost ~]# cd /mydata/
[root@localhost mydata]# ls
mysql
[root@localhost mydata]# cd mysql/
[root@localhost mysql]# ls
conf  data  log
[root@localhost mysql]#

# 主机配置文件修改,直接影响容器配置文件,主机配置文件相当于“快捷方式”

2.5 修改MySQL配置

$ vi /mydata/mysql/conf/my.cnf

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

2.6 重启MySQL容器

$ docker restart mysql
[root@localhost mysql]# docker restart mysql
mysql
[root@localhost mysql]# docker exec -it mysql /bin/bash
root@ae0c62e2bdac:/# cd /etc/mysql/
root@ae0c62e2bdac:/etc/mysql# ls
my.cnf
root@ae0c62e2bdac:/etc/mysql# cat my.cnf
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
root@ae0c62e2bdac:/etc/mysql#

3. 安装Redis最新版

官方镜像:https://hub.docker.com/_/redis,可查看安装的版本等信息

3.1 下载 redis 镜像

$ docker pull redis

3.2 创建配置文件

$ mkdir -p /mydata/redis/conf
$ touch /mydata/redis/conf/redis.conf

3.3 启动容器

$ docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

3.4 运行 Redis

$ docker exec -it redis redis-cli
[root@localhost conf]# docker exec -it redis redis-cli
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> get a
"b"
127.0.0.1:6379> exit
[root@localhost conf]#

3.5 持久化Redis

$ vi redis.conf
[root@localhost conf]# pwd
/mydata/redis/conf
[root@localhost conf]# ls
redis.conf
[root@localhost conf]# vi redis.conf
# 添加如下内容
appendonly yes

[root@localhost conf]# docker restart redis
redis

更多配置参考:https://raw.githubusercontent.com/antirez/redis/5.0/redis.conf

4. 设置随Docker启动

$ docker update mysql --restart=always

$ docker update redis --restart=always

转载请标明来源。

你可能感兴趣的:(Centos7.8下安装Docker, MySQL5.7, Redis)