Centos7.8下安装Docker,MySQL5.7,Redis,Elasticsearch7.4.2,Nginx

前言

遇到问题

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

解决思路

  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

1.7 文件目录挂载(类似快捷方式)

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 创建容器Container并启动

每run一下就启动一个容器,容器与容器间是隔离的状态

$ 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  Contatiner_ID/Container_Name bash #进入容器终端并且保留为容器终端的输入形式(-it和bash的结合作用)

官方解释:

       exec:                                     Run a command in a running container(在运行的容器中运行命令)
       exec -i:  --interactive(相互作用的)       Keep STDIN open even if not attached(即使没有连接,也要保持STDIN打开)
       exec -t:   --tty                          Allocate a pseudo-TTY(分配一个 冒充的终端设备)

$ docker exec -it mysql /bin/bash # 进入容器终端并且的保留为容器终端的输入形式(-it和bash的结合作用)

官方解释:
       exec: Run a command in a running container(在运行的容器中运行命令)
       exec -i:  --interactive(相互作用的)  Keep STDIN open even if not attached(即使没有连接,也要保持STDIN打开)
       exec -t:   --tty   Allocate a pseudo-TTY(分配一个 冒充的终端设备)
       /bin/bash 进入容器名为mysql的Linux系统的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 创建配置文件

如果不预先创建好外部文件,在执行启动容器的run命令时创建的是目录文件夹不是文件!!!

$ 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. Elasticsearch

4.1 下载镜像


[root@OKGO ~]# docker pull elasticsearch:7.4.2
7.4.2: Pulling from library/elasticsearch
d8d02d457314: Pull complete
f26fec8fc1eb: Pull complete
8177ad1fe56d: Pull complete
d8fdf75b73c1: Pull complete
47ac89c1da81: Pull complete
fc8e09b48887: Pull complete
367b97f47d5c: Pull complete
Digest: sha256:543bf7a3d61781bad337d31e6cc5895f16b55aed4da48f40c346352420927f74
Status: Downloaded newer image for elasticsearch:7.4.2
docker.io/library/elasticsearch:7.4.2
[root@OKGO ~]# docker pull kibana:7.4.2
7.4.2: Pulling from library/kibana
d8d02d457314: Already exists
bc64069ca967: Pull complete
c7aae8f7d300: Pull complete
8da0971e3b41: Pull complete
58ea4bb2901c: Pull complete
b1e21d4c2a7e: Pull complete
3953eac632cb: Pull complete
5f4406500758: Pull complete
340d85e0d1c7: Pull complete
1768564d16fb: Pull complete
Digest: sha256:355f9c979dc9cdac3ff9a75a817b8b7660575e492bf7dbe796e705168f167efc
Status: Downloaded newer image for kibana:7.4.2
docker.io/library/kibana:7.4.2
[root@OKGO ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1819        1119         212          14         486         502
Swap:          2047         303        1744
[root@OKGO ~]#


4.2 安装及配置


[root@OKGO ~]# mkdir -p /mydata/elasticsearch/config
[root@OKGO ~]# mkdir -p /mydata/elasticsearch/data
[root@OKGO ~]# echo "http.host:0.0.0.0">>/mydata/elasticsearch/config/elasticsearch.yml
[root@OKGO ~]# cd /mydata/
[root@OKGO mydata]# cd elasticsearch/
[root@OKGO elasticsearch]# cd config/
[root@OKGO config]# ll
total 4
-rw-r--r--. 1 root root 18 Sep 13 11:44 elasticsearch.yml
[root@OKGO config]# cat elasticsearch.yml
http.host:0.0.0.0

$ docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2


问题1

ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]];

参考文章,修改 Elastic 安装目录的config/elasticsearch.yml文件,去掉network.host的注释,将它的值改成0.0.0.0。
这个错就是参数的冒号前后没有加空格,加了之后就好:network.host: 0.0.0.0

问题2
"Caused by: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes"
使用命令:
[root@OKGO elasticsearch]# chmod -R 777 /mydata/elasticsearch/
[root@OKGO elasticsearch]# ll
total 0
drwxrwxrwx. 2 root root 31 Sep 13 12:15 config
drwxrwxrwx. 3 root root 19 Sep 13 12:21 data
drwxrwxrwx. 2 root root  6 Sep 13 12:04 plugins
[root@OKGO elasticsearch]#

4.3 安装Kibana

$ docker run --name kibana -p 5601:5601 \
-e ELASTICSEARCH_HOSTS=http://192.168.107.130:9200 \
-d kibana:7.4.2

$ docker logs kibana

4.4 安装ik分词器

[root@OKGO mydata]# cd elasticsearch/
[root@OKGO elasticsearch]# ls
config  data  plugins
[root@OKGO elasticsearch]# cd plugins/
[root@OKGO plugins]# docker exec -it elasticsearch /bin/bash

[root@25344902477f elasticsearch]# wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
bash: wget: command not found
[root@25344902477f elasticsearch]# cd ..
[root@25344902477f share]# exit;
exit
read unix @->/var/run/docker.sock: read: connection reset by peer
[root@OKGO plugins]# wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
...
[root@OKGO plugins]# unzip elasticsearch-analysis-ik-7.4.2.zip


[root@OKGO plugins]# mv /mydata/elasticsearch/plugins/* /mydata/elasticsearch/plugins/ik/
mv: cannot move ‘/mydata/elasticsearch/plugins/ik’ to a subdirectory of itself, ‘/mydata/elasticsearch/plugins/ik/ik’
[root@OKGO plugins]# ll
total 4
drwxr-xr-x. 3 root root 4096 Sep 13 23:24 ik
[root@OKGO plugins]# cd ik/
[root@OKGO ik]# ll
total 5832
-rw-r--r--. 1 root root  263965 May  6  2018 commons-codec-1.9.jar
-rw-r--r--. 1 root root   61829 May  6  2018 commons-logging-1.2.jar
drwxr-xr-x. 2 root root    4096 Oct  7  2019 config
-rw-r--r--. 1 root root   54643 Nov  4  2019 elasticsearch-analysis-ik-7.4.2.jar
-rw-r--r--. 1 root root 4504487 Nov  4  2019 elasticsearch-analysis-ik-7.4.2.zip
-rw-r--r--. 1 root root  736658 May  6  2018 httpclient-4.5.2.jar
-rw-r--r--. 1 root root  326724 May  6  2018 httpcore-4.4.4.jar
-rw-r--r--. 1 root root    1805 Nov  4  2019 plugin-descriptor.properties
-rw-r--r--. 1 root root     125 Nov  4  2019 plugin-security.policy

[root@OKGO ik]# docker exec -it elasticsearch /bin/bash
[root@25344902477f elasticsearch]# pwd
/usr/share/elasticsearch
[root@25344902477f elasticsearch]# cd plugins/
[root@25344902477f plugins]# ls
ik
[root@25344902477f plugins]# cd ../
[root@25344902477f elasticsearch]# ls
LICENSE.txt  NOTICE.txt  README.textile  bin  config  data  jdk  lib  logs  modules  plugins
[root@25344902477f elasticsearch]# cd bin/
[root@25344902477f bin]# elasticsearch-plugin -h


A tool for managing installed elasticsearch plugins

Commands
--------
list - Lists installed elasticsearch plugins
install - Install a plugin
remove - removes a plugin from Elasticsearch

Non-option arguments:
command

Option         Description
------         -----------
-h, --help     show help
-s, --silent   show minimal output
-v, --verbose  show verbose output
[root@25344902477f bin]# elasticsearch-plugin list
ik
[root@25344902477f bin]#






5. 安装Nginx(为自定义词库创建)

  • 随便启动一个nginx实例,只是为了复制出配置

    • docker run -p 80:80 --name nginx -d nginx:1.10
  • 将容器内的配置文件拷贝到当前目录;docker container cp nginx:/etc/nginx . (后面还有个点,且点前面有空格)

  • 修改文件名称:mv nginx conf 把这个conf移动到/mydata/nginx下

[root@OKGO mydata]# mv nginx conf
[root@OKGO mydata]# ls
conf  elasticsearch  mysql  redis
[root@OKGO mydata]# mkdir nginx
[root@OKGO mydata]# mv conf nginx/
[root@OKGO mydata]# ls
elasticsearch  mysql  nginx  redis
[root@OKGO mydata]# cd nginx/
[root@OKGO nginx]# ls
conf
[root@OKGO nginx]#
  • 终止原容器:docker stop nginx

  • 删除容器 docker rm 容器id

  • 创建新的nginx

docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10

前提条件:

[root@OKGO nginx]# pwd
/mydata/nginx
  • 访问 主机地址

在/mydata/nginx/html中创建index.html

  • 创建分词文本

mkdir es
vi fenci.txt

[root@OKGO nginx]# cd html/
[root@OKGO html]# ls
[root@OKGO html]# vi index.html
[root@OKGO html]# ls
index.html
[root@OKGO html]# pwd
/mydata/nginx/html
[root@OKGO html]# mkdir es
[root@OKGO html]# cd es/
[root@OKGO es]# vi fenci.txt
[root@OKGO es]#

访问:
http://192.168.80.133/es/fenci.txt

  • 注意问题:我使用的docker需要像之前安装kibana找到ealsticsearch一样,需要得到docker帮它创建的ip,不能直接使用主机ip修改IKAnalyzer.cfg.xml

如图

在这里插入图片描述
在这里插入图片描述

这样就可以配置成功。

  • 新的词汇在下面路径添加
[root@OKGO config]# cd ../
[root@OKGO ik]# cd /mydata/nginx/html/es/
[root@OKGO es]# ls
fenci.txt

6. 设置随Docker启动

$ docker update mysql --restart=always

$ docker update redis --restart=always

$ docker update elasticsearch --restart=always

$ docker update kibana --restart=always

$ docker update nginx --restart=always

移除并更新 

[root@OKGO ik]# docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                            NAMES
bbfddb07ee0f        kibana:7.4.2          "/usr/local/bin/dumb…"   20 hours ago        Up 20 hours         0.0.0.0:5601->5601/tcp                           kibana
25344902477f        elasticsearch:7.4.2   "/usr/local/bin/dock…"   20 hours ago        Up 9 hours          0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch
25ce0a7c7ab3        redis                 "docker-entrypoint.s…"   2 months ago        Up 20 hours         0.0.0.0:6379->6379/tcp                           redis
92823e142fcb        mysql:5.7             "docker-entrypoint.s…"   2 months ago        Up 20 hours         0.0.0.0:3306->3306/tcp, 33060/tcp                mysql
[root@OKGO ik]# docker stop elasticsearch
elasticsearch
[root@OKGO ik]# docker rm elasticsearch
elasticsearch
[root@OKGO ik]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
bbfddb07ee0f        kibana:7.4.2        "/usr/local/bin/dumb…"   20 hours ago        Up 20 hours         0.0.0.0:5601->5601/tcp              kibana
25ce0a7c7ab3        redis               "docker-entrypoint.s…"   2 months ago        Up 20 hours         0.0.0.0:6379->6379/tcp              redis
92823e142fcb        mysql:5.7           "docker-entrypoint.s…"   2 months ago        Up 20 hours         0.0.0.0:3306->3306/tcp, 33060/tcp   mysql
[root@OKGO ik]#

转载请标明来源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值