# mysql8.0
```
docker run -id --restart=always-p 33806:3306 --name mysql8.0 -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password mysql:8.0
```
数据库对外的端口建议不要使用默认端口,我这里修改为33806
##### 注意:Navicat 连接MySQL 8.0.*经常会出现2059错误
如图:

原因
```
mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password
```
解决方案:
```
docker exec -it mysql8.0 /bin/bash 进入容器
mysql -uroot -ppassword #登录
use mysql; #选择数据库
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #更改加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; #更新用户密码
FLUSH PRIVILEGES; #刷新权限
exit;退出mysql
exit 退出容器
docker restart mysql8.0 重启mysql8.0
```
# redis
```
docker run -id --restart=always --name redis -p 6379:6379 -v $PWD/conf/redis.conf:/usr/local/etc/redis/redis.conf -v $PWD/data:/data redis:latest redis-server /usr/local/etc/redis/redis.conf --appendonly yes --requirepass "password"
```
个别参数解释:
```
--appendonly yes:表示redis开启持久化策略
--requirepass(可选) xxx:表示redis的密码
```
# rabbitmq
```
docker run -id --restart=always --name rabbit --hostname my-rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management
```
端口说明:
```
4369 -- erlang发现口
5672 --client端通信口
15672 -- 管理界面ui端口
25672 -- server间内部通信口
```
个别参数解释
```
-- hostname(可选):标志仅更改容器内的主机名.如果您的应用程序需要主机名的特定值,则可能需要这样做.它不会在docker之外更改DNS,也不会更改网络隔离,因此不允许其他人连接到具有该名称的容器.
-e 设置变量
RABBITMQ_DEFAULT_USER :用户名
RABBITMQ_DEFAULT_PASS :密码
```
# mongo
```
docker run -id --restart=always --name mongo -p 27017:27017 mongo
```
# portainer (dockers ui)
```
docker run -id --restart=always --name prtainer-admin -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
```
# git仓库
```
docker run -id --restart=always --name=gogs -p 10022:22 -p 3000:3000 -v /var/gogsdata:/data gogs/gogs
```
# elasticsearch
前期工作:
我们一共需要修改两处
修改/etc/security/limits.conf,追加内容
```
* soft nofile 65536
* hard nofile 65536
```
nofile是单个进程允许打开的最大文件个数
soft nofile 是软限制
hard nofile是硬限制
修改/etc/sysctl.conf,追加内容
```
vm.max_map_count=655360
```
限制一个进程可以拥有的VMA(虚拟内存区域)的数量
执行下面命令 修改内核参数马上生效
```
sysctl ‐p
````
1.新建一个elasticsearch文件夹
```
mkdir /root/elasticsearch
```
2.启动一个elasticsearch
```
docker run --rm --name=test_es -itd -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
```
###### 创建test_es实例的目的是为了获得 elasticsearch.yml
3.复制 elasticsearch.yml
```
dockers cp test_es:/usr/share/elasticsearch/config/elasticsearch.yml /root/elasticsearch/elasticsearch.yml
```
4 停止test_es实例。(为在创建时加了 --rm 所以停止实例后会自动删除)
```
dokcer stop test_es
```
5.如果需要安装kibana等其他,需要创建一个网络,名字任意取,让他们在同一个网络,使得es和kibana通信
```
docker network create esnet
```
6.运行容器
```
docker run -d --name elasticsearch --net esnet -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -v /root/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:5.6.8
```
个别参数解释
```
--network 网络名用于多个服务通信与隔离,例如用kibana连接elasticsearch就需要他们在同一个网络下
```
7.安装ik分词器(elasticsearch 与 ik 要版本兼容)
查看自己ES的版本号与之对应的IK分词器版本:
https://github.com/medcl/elasticsearch-analysis-ik/blob/master/README.md
下载与之对应的版本
https://github.com/medcl/elasticsearch-analysis-ik/releases
下载后上传并解压
```
docker cp ik elasticsearch:/usr/share/elasticsearch/plugins
```
### elasticsearch默认不允许跨域调用:
修改elasticsearch配置文件:elasticsearch.yml,增加以下两句命令:
```
http.cors.enabled: true
http.cors.allow‐origin: "*"
```
## 创建容器常用参数
```
docker run
-id i表示运行容器,表示在后台运行
--restart=always 设置实例自启动(建议每个实例就可以加)
-- name 实例名称
-p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
-v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上
-e 指定变量 如:Mysql的密码
-- rm 实例stop后自动删除
```

Docker 常用容器安装