Docker安装常用服务
基础安装步骤
安装哪个服务就去docker hub搜索对应服务的镜像
点击进入该服务的docker hub,如图:
- Description:描述信息
- Tags:版本信息
确定使用的版本
docker pull mysql:5.7
安装mysql
基本启动mysql服务
1
2docker run -e MYSQL_ROOT_PASSWORD=root mysql:5.7
# -e MYSQL_ROOT_PASSWORD=root e是指环境变量;代表给root用户指定密码启动一个mysql服务,后台运行,指定映射端口,指定root用户密码,指定容器名字
1
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql mysql:5.7
启动一个mysql服务,后台运行,指定映射端口,指定root用户密码,指定容器名字,使用数据卷将数据持久化到宿主机系统
注意:通过docker hub描述得知,mysql存储数据文件目录是
/var/lib/mysql
1
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql -v mysqldata:/var/lib/mysql mysql:5.7
启动一个mysql服务,后台运行,指定映射端口,指定root用户密码,指定容器名字,使用数据卷将数据持久化到宿主机系统,用已修改之后的配置文件启动
注意:通过docker hub描述得知,mysql配置文件的路径是
/etc/mysql
1
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql -v mysqldata:/var/lib/mysql -v mysqlconfig:/etc/mysql mysql:5.7
将mysql数据库备份为sql文件
1
2
3
4
5
6
7
8#导出全部数据
docker exec mysql|容器id sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql
#导出指定库数据
docker exec mysql sh -c 'exec mysqldump --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql
#导出指定库数据不要数据
docker exec mysql sh -c 'exec mysqldump --no-data --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql执行sql文件到mysql中
1
docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /root/xxx.sql
安装tomcat
启动一个基本tomcat服务
1
docker run -d -p 8081:8080 --name tomcat tomcat:8.0-jre8
启动tomcat服务,并将部署应用目录通过数据卷挂载到宿主机系统
注意:通过docker hub描述得知,部署web应用在容器中目录为
/usr/local/tomcat/webapps
1
docker run -d -p 8081:8080 --name tomcat -v apps:/usr/local/tomcat/webapps tomcat:8.0-jre8
修改配置文件,并将部署应用目录通过数据卷挂载到宿主机系统(如果修改端口的话,需要重新起一个容器才能生效)
注意:通过docker hub描述得知,配置文件在
/usr/local/tomcat/conf
1
docker run -d -p 8081:8080 --name tomcat -v apps:/usr/local/tomcat/webapps -v confs:/usr/local/tomcat/conf tomcat:8.0-jre8
安装redis
启动一个基本redis服务
1
docker run -d -p 6379:6379 --name redis redis:5.0
开启redis持久化(
--appendonly yes
),并将持久化的目录通过数据卷挂载到宿主机系统注意:一旦开启持久化后,持久化生成的aof文件会被放入容器中
/data
目录中1
docker run -d -p 6379:6379 -v redisdata:/data --appendonly yes --name redis redis:5.0
加载外部配置文件,以配置文件方式启动
注意:
1. 默认情况下redis官方镜像中没有redis.conf配置文件 需要去官网下载指定版本的配置文件
2. 将官方安装包中配置文件进行复制到宿主机指定目录中如 /root/redis/redis.conf文件
3. 修改需要自定义的配置
1
2bind 0.0.0.0 开启远程权限
appenonly yes 开启aof持久化4. 加载配置启动,并让配置生效(
redis-server /usr/local/etc/redis/redis.conf
)1
docker run -d -p 6379:6379 -v /root/redis/redis.conf:/usr/local/etc/redis --name redis redis:5.0 redis-server /usr/local/etc/redis/redis.conf
安装nginx
启动一个基本nginx服务
1
docker run -d -p 80:80 --name mynginx nginx
挂载nginx配置文件以及html到宿主机系统
进入容器
1
docker exec -it mynginx /bin/bash
查找目录:
whereis nginx
配置文件路径:
/etc/nginx/nginx.conf
复制配置文件到宿主机
1
docker cp mynginx(容器id|容器名称):/etc/nginx/nginx.conf /root/nginx/nginx.conf(宿主机目录)
启动容器
1
docker run -d -p 80:80 --name mynginx -v /root/nginx/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/html:/usr/share/nginx/html nginx
安装elasticsearch
启动一个基础服务
1
docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch -e "discovery.type=single-node" elasticsearch:7.9.3
注意:如果启动出现如下错误的解决办法
- 在centos中修改配置
/etc/sysctl.conf
- 加入或修改如下配置
vm.max_map_count=262144
- 启用配置
sysctl -p
- 在centos中修改配置
启动服务,并持久化索引数据和配置
注意:
1. ES中所有数据都在容器中的
/usr/share/elasticsearch/data
2. ES中的配置文件在容器中的
/usr/share/elasticsearch/config
1
docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch -e "discovery.type=single-node" -v esdata:/usr/share/elasticsearch/data -v esconfig:/usr/share/elasticsearch/config elasticsearch:7.9.3
启动服务,并持久化索引数据,持久化配置,安装ik分词器
注意:ES中的分词插件路径为
/usr/share/elasticsearch/plugins
下载对应版本的IK分词器
1
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip
解压到plugins文件夹中
1
2yum install -y unzip
unzip -d ik elasticsearch-analysis-ik-7.9.3.zip添加自定义扩展词和停用词
vim plugins/elasticsearch/config/IKAnalyzer.cfg.xml
1
2
3
4
5
6
7<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典 -->
<entry key="ext_dict">ext_dict.dic</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">ext_stopwords.dic</entry>
</properties>在ik分词器目录下config目录中创建ext_dict.dic文件 编码一定要为UTF-8才能生效
vim ext_dict.dic
加入扩展词即可在ik分词器目录下config目录中创建ext_stopword.dic文件
vim ext_stopwords.dic
加入停用词即可启动容器生效
1
docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch -e "discovery.type=single-node" -v esdata:/usr/share/elasticsearch/data -v esconfig:/usr/share/elasticsearch/config -v esplugins:/usr/share/elasticsearch/plugins elasticsearch:7.9.3
加密es登录
在启动命令中加入环境变量:
1
2
3
4
5
6
7
8
9
10$ docker run -d -p 9200:9200 -p 9300:9300 \
---name elasticsearch \
-e "discovery.type=single-node" \
-v esdata:/usr/share/elasticsearch/data \
-v esconfig:/usr/share/elasticsearch/config \
-v esplugins:/usr/share/elasticsearch/plugins \
-e xpack.security.enabled=true \
-e xpack.security.transport.ssl.enabled: true \
-e ELASTIC_PASSWORD=buubiu
elasticsearch:7.9.3
安装kibana
启动一个基本的kibana服务
1
docker run -d -p 5601:5601 --name kibana kibana:7.9.3
启动kibana,并通过设置环境变量连接ES
-e ELASTICSEARCH_HOSTS
1
docker run -d -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://127.0.0.1:9200 --name kibana kibana:7.9.3
启动kibana,并通过配置文件连接ES
注意:kibana的配置文件在容器中
/usr/share/kibana/config
1
docker run -d -p 5601:5601 -v kibanaconif:/usr/share/kibana/config --name kibana kibana:7.9.3
修改宿主机中kibana的配置文件kibana.yml
若es加了用户名密码访问,则还需要追加后两行:
1
2
3
4
5
6elasticsearcch.hosts:["http://127.0.0.1:9200"]
elasticsearch.username: "kibana"
elasticsearch.password: "Aa000000"
xpack.security.enabled: true
32位以上的随机数即可,用作信息的加密
xpack.security.encryptionKey: "4297f44b13955235245b2497399d7a93"重启容器即可
登录kibana的时候,输入的用户名和密码是:elastic/Aa000000
安装mariadb
与mysql类似
1 | $ docker load -i mariadb-10.2.12.tar |
安装nacos
1 | $ docker run -d -p 8848:8848 -e MODE=standalone --name nacos nacos/nacos-server:1.4.1 |
安装apollo
初始化sql
1 | $ docker exec -i mariadb sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /opt/software/docker-images/apollo/apollo_sql/apolloconfigdb.sql |
通过sql脚本修改默认config地址:
1 | UPDATE ApolloConfigDB.ServerConfig t SET t.Value = 'http://192.168.91.100:8080/eureka/' WHERE t.Id = 1; |
导入apollo镜像,并启动:
1 | $ docker run -d -p 8080:8080 \ |
安装Zookeeper
创建挂载目录:
1 | $ mkdir -p /home/zookeeper |
先不挂载目录启动容器,然后把相应的目录拷贝出来
1 | $ docker run -d -p 2181:2181 \ |
修改配置文件:
路径:/home/zookeeper/conf/zoo.cfg
- 若是集群需要修改server.1,否则不需要变
1 | dataDir=/data |
删除zookeeper容器,重新以挂载目录启动:
1 | $ docker run -d -p 2181:2181 \ |
安装Kafka
创建挂载目录:
1 | $ mkdir -p /home/kafka |
先不挂载目录启动容器,然后把相应的目录拷贝出来
1 | $ docker run -d -p 9092:9092 \ |
删除kafka容器,重新以挂载目录启动:
1 | $ docker run -d -p 9092:9092 \ |
安装Logstash
创建挂载目录:
1 | $ mkdir -p /home/logstash |
先不挂载目录启动容器,然后把相应的目录拷贝出来
1 | $ docker run -d -p 5044:5044 -p 9600:9600 \ |
修改配置文件:
路径:/home/logstash/config/logstash.yml
- 把es地址写上,若是集群就用逗号隔开,格式[“”,””,””]
- 后面三行直接追加
1 | http.host: "0.0.0.0" |
新建配置文件
- 并修改相应的kafka地址
192.168.91.100:9092
- es地址
10.10.23.85:9200
,若是集群,格式[“”,””,””] - 日志名前缀
jnbank-logs
- 若es有安全校验,在elasticsearch配置的地方加上相应的密码即可
路径:/home/logstash/pipeline/test.conf
1 | # Sample Logstash configuration for creating a simple |
删除logstash容器,重新以挂载目录启动:
1 | $ docker run -d -p 5044:5044 -p 9600:9600 \ |
安装Filebeat
创建挂载目录:
1 | $ mkdir -p /home/filebeat |
先不挂载目录启动容器,然后把相应的目录拷贝出来
1 | $ docker run -d --name filebeat docker.elastic.co/beats/filebeat:7.9.3 |
修改配置文件:
路径:/home/filebeat/filebeat.yml
,
- 配置好收集路径规则
- /opt/boms-sc-demo/*/logs/*.log
- 配置好日志前缀
test-logs
- 配置好kafka地址
192.168.91.100:9092
1 | #=========================== Filebeat inputs ============================= |
删除filebeat容器,重新以挂载目录启动:
1 | $ docker run -d --name filebeat \ |
安装Skywalking
加载skywalking两个镜像
1 | $ docker load -i skywalking-oap-8.2.0-20210425.tar |
创建一个目录,上传文件夹skywalking-config.tar.gz
到此目录并解压缩
1 | $ mkdir -p /home/skywalking |
创建挂载目录:
1 | $ mkdir -p /home/skywalking/logs |
编辑配置:
路径:/home/skywalking/docker-compose/.env
1 | # skywalking-oap镜像的tag标签,通过docker images获得 |
运行docker compose
进入目录/home/skywalking/docker-compose
1 | $ cd /home/skywalking/docker-compose |
查看日志:
1 | docker-compose -f docker-compose-boms.yml logs -f |
查看页面是否正常:
安装seata
- 加载镜像:
1 | $ docker load -i seataio/seata-server-1.4.2.tar |
- 创建挂载目录,并且从官方下载registry.conf 和 file.conf拷贝到此目录中
1 | $ mkdir -p /home/seata/config |
- 在
registry.conf
文件中将config
配置改为以下内容,name
的值为容器中对应的路径
1 | config { |
- 启动容器:
1 | $ docker run -d --name seata-server \ |
- 查看启动日志
1 | $ docker logs -f seata-server |
安装青龙面板
项目地址:GitHub
1 | version: '2' |
安装consul
- 创建挂载目录:
1 | $ mkdir -p /home/consul |
新增配置文件:
路径:
/home/consul/config/acl.json
1 | { |
字段说明:
acl_datacenter
:该配置项指定了对ACL信息具有权威性的数据中心。 必须提供它才能启用ACL。 所有Server实例和数据中心必须就ACL数据中心达成一致。必须在整个集群的Server节点上设置该配置项。在Consul 0.8及更高版本中,还可以启用代理级别的ACL。 有关详细信息,请参阅ACL指南。acl_master_token
:该配置项只能用在acl_datacenter
中的Server节点上。 如果该令牌不存在,则将使用管理级权限创建该令牌。 它允许操作员使用众所周知的令牌ID来引导ACL系统。acl_default_policy
:该配置项可选的值为allow
和deny
。默认值为’allow’。默认的策略控制token在没有匹配的规则时的行为。在
allow
模式下,ACL规则是一个黑名单:任何没有被禁止的操作都是可以执行的。在
deny
模式下,ACL规则是一个白名单,任何没有明确指定的操作都是被禁止的。注意:该配置项只有在配置了
acl_datacenter
后才起作用
acl_down_policy
:该配置项可选的值为allow
,deny
或extend-cache
, 默认值是extend-cache
。假如不能从acl_datacenter
或Leader
节点获取一个token的acl信息,则该配置项指定的策略被使用。allow
模式下,所有的操作都允许。deny
模式下,所有的操作都被禁止。extend-cache
模式下,使用缓存的 ACL规则并忽略这些规则的过期时间。如果一个不可缓存的ACL的规则被使用,则当作deny
策略来处理。
路径:
/home/consul/config/server.json
server.json 1
2
3
4
5
6
7
8
9
10
11
12{
"datacenter": "buubiudatacentor",
"retry_join": ["0.0.0.0"],
"retry_interval": "15s",
"rejoin_after_leave": true,
"start_join": ["0.0.0.0"],
"bootstrap_expect": 1,
"server": true,
"ui": true,
"dns_config": {"allow_stale": true, "max_stale": "5s"},
"node_name": "consul"
}
- 先不挂载目录启动容器,然后把相应的目录拷贝出来
1 | # agent consul核心,运行一个agent |
- 删除consul容器,重新以挂载目录启动:
1 | $ docker run -d \ |
Docker安装常用服务