Docker安装常见应用大集合(Tomcat、Nginx、Mysql、Redis、Web应用、MQ、Portainer、MongoDB ......)

452 阅读11分钟

Docker安装常见应用大集合

部署Tomcat

(1)拉取镜像

docker image pull tomcat

在这里插入图片描述
(2)创建容器

 docker run -id --name tomcat666 -p 8081:8080 -v /usr/local/docker/tomcat1:/usr/local/tomcat/webapps tomcat

在这里插入图片描述
(3)浏览器访问查看
在这里插入图片描述

部署Nginx

1)拉取镜像

docker pull nginx

在这里插入图片描述

(2)创建Nginx容器

docker run --name nginx-test -p 8080:80 -d nginx

在这里插入图片描述
(3)浏览器查看
在这里插入图片描述
(4)对nginx部分目录进行挂载

docker run  -id -p 8080:80 --name nginx
 -v  /usr/local/docker/nginx/index:/usr/share/nginx/html 
 -v  /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
 -v /usr/local/docker/nginx/logs:/var/log/nginx nginx

在进行目录挂载时,如果不是手动创建相关目录文件时可能报错 原因在于nginx.conf在创建时会创建成文件夹 删除nginx.conf 从新 touch nginx.conf创建
在这里插入图片描述
映射成功!
在这里插入图片描述

部署Mysql

(1)拉取mysql镜像

docker pull mysql

在这里插入图片描述
(2)创建容器

docker run -di --name=mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

在这里插入图片描述
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 就是root用户的登陆密码

(3)远程登录mysql

进入容器

docker exec -it mysql8 /bin/bash

登录MySQL

mysql -u root -p123456

执行status查看mysql信息,以及更改刷新mysql权限

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

flush privileges;

远程登陆
在这里插入图片描述
(4)对数据库某些目录作映射

docker run -di -p 3306:3306 --name mysql 
-v /usr/local/docker/mysql/conf:/etc/mysql
-v /usr/local/docker/mysql/logs:/var/log/mysql
-v/usr/local/docker/mysql/data:/var/lib/mysql -e 
MYSQL_ROOT_PASSWORD=123456  mysql

在这里插入图片描述

部署Redis

(1)拉取镜像

docker pull redis

在这里插入图片描述
(2)创建容器

docker run -id --name=redis666 -p 6379:6379 redis

在这里插入图片描述
(3) 远程连接Redis
在这里插入图片描述

部署Redis集群

创建容器

redis官网要求: docker搭建redis集群必须使用docker的主机联网模式( --net host)

docker create --name redis-node01 --net host -v redis-node01:/data redis --cluster-enabled yes --cluster-config-file nodes-node-01.conf --port 6379

docker create --name redis-node02 --net host -v redis-node02:/data redis  --cluster-enabled yes --cluster-config-file nodes-node-02.conf --port 6380

docker create --name redis-node03 --net host -v redis-node03:/data redis  --cluster-enabled yes --cluster-config-file nodes-node-03.conf --port 6381

启动容器

 docker start redis-node01 redis-node02 redis-node03

进入任意容器

docker exec -it  redis-node01 /bin/bash

组建集群

遇到一直Waiting for the cluster to join,后修改组建集群IP为内外IP即可解决

root@administrator:/data# redis-cli --cluster create IP:6379 IP:6380 IP:6381 --cluster-replicas 0
>>> Performing hash slots allocation on 3 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
M: 3a14f73f21646f4e659e7f963378216912cf444a 119.23.62.62:6379
   slots:[0-5460] (5461 slots) master
M: 0087956b2d447ddc404372c33284b1e81eb4d755 119.23.62.62:6380
   slots:[5461-10922] (5462 slots) master
M: 7de5e3e07654ebdc928f96dffd029bd0f7bf45d6 119.23.62.62:6381
   slots:[10923-16383] (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
...............................................................................................................
root@administrator:/data# redis-cli --cluster create 172.17.0.1:6379 172.17.0.1:6380 172.17.0.1:6381 --cluster-replicas 0
>>> Performing hash slots allocation on 3 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
M: 3a14f73f21646f4e659e7f963378216912cf444a 172.17.0.1:6379
   slots:[0-5460] (5461 slots) master
M: 0087956b2d447ddc404372c33284b1e81eb4d755 172.17.0.1:6380
   slots:[5461-10922] (5462 slots) master
M: 7de5e3e07654ebdc928f96dffd029bd0f7bf45d6 172.17.0.1:6381
   slots:[10923-16383] (5461 slots) master
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join

>>> Performing Cluster Check (using node 172.17.0.1:6379)
M: 3a14f73f21646f4e659e7f963378216912cf444a 172.17.0.1:6379
   slots:[0-5460] (5461 slots) master
M: 0087956b2d447ddc404372c33284b1e81eb4d755 172.18.255.237:6380
   slots:[5461-10922] (5462 slots) master
M: 7de5e3e07654ebdc928f96dffd029bd0f7bf45d6 172.18.255.237:6381
   slots:[10923-16383] (5461 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
root@administrator:/data# 

查看集群信息

root@administrator:/data# redis-cli
127.0.0.1:6379> cluster nodes
0087956b2d447ddc404372c33284b1e81eb4d755 172.18.255.237:6380@16380 master - 0 1630076325108 2 connected 5461-10922
7de5e3e07654ebdc928f96dffd029bd0f7bf45d6 172.18.255.237:6381@16381 master - 0 1630076326120 3 connected 10923-16383
3a14f73f21646f4e659e7f963378216912cf444a 172.17.0.1:6379@16379 myself,master - 0 1630076325000 1 connected 0-5460
127.0.0.1:6379> 

测试

root@administrator:/data# reids-cli -c
bash: reids-cli: command not found
root@administrator:/data# redis-cli -c
127.0.0.1:6379> set test 123
-> Redirected to slot [6918] located at 172.18.255.237:6380
OK
172.18.255.237:6380> get test
"123"
172.18.255.237:6380> 

部署web应用

(1)拉取镜像

docker image pull tomcat

在这里插入图片描述
(2)创建容器

 docker run -id --name tomcat666 -p 8081:8080 -v /usr/local/docker/tomcat1:/usr/local/tomcat/webapps tomcat

在这里插入图片描述
(3)向挂载目录上传war
在这里插入图片描述
(4)验证
在这里插入图片描述

部署Node

(1)拉取镜像
docker pull node
在这里插入图片描述
(2)创建容器
在这里插入图片描述
(3)查看node版本
在这里插入图片描述

部署Rabbitmq

(1)搜索并拉取镜像

docker search rabbitmq

docker pull rabbitmq (镜像不带控制台)

docker pull rabbitmq:management (镜像带控制台)

在这里插入图片描述

(2)创建容器

5672: rabbitMQ 的服务端口
15672: RabbitMQ 的控制台端口

docker run -id --name mq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin123 -p 15672:15672 -p 5672:5672 rabbitmq:management

 -e RABBITMQ_DEFAULT_USER=admin 管理者用户名
 -e RABBITMQ_DEFAULT_PASS=admin123 管理者密码

在这里插入图片描述
(3)浏览器访问验证
http://x:x:x:x:15672/
在这里插入图片描述
RabbitMQ默认的用户名:guest,密码:guest (使用guest将登陆失败)
在这里插入图片描述

当然刚才启动容器时已经指定了用户名和密码,试试指定用户名与密码

-e RABBITMQ_DEFAULT_USER=admin 管理者用户名
 -e RABBITMQ_DEFAULT_PASS=admin123 管理者密码

在这里插入图片描述

安装ActiveMQ

1.搜索镜像

docker search ActiveMQ

在这里插入图片描述
2.拉取镜像

docker pull webcenter/activemq

在这里插入图片描述
3创建容器

 docker run -d --name activemq -p 61617:61616 -p 8162:8161 webcenter/activemq

在这里插入图片描述
4.浏览器访问

访问地址:http://IP:8161/

在这里插入图片描述

部署RocketMQ

拉取镜像

docker pull foxiswho/rocketmq 

进入目录

/usr/local/program/docker/rocketmq/

注意:凡是涉及映射本地目录权限一定要设置为 777 权限,否则启动不成功

chmod 777 logs
chmod 777 conf
chmod 777 store

创建启动nameserver容器

docker  run -d -v $(pwd)/logs:/home/rocketmq/logs       --name rmqnamesrv       -e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m"       -p 9876:9876       foxiswho/rocketmq:4.8.0       sh mqnamesrv

创建conf目录并进入,创建broker.conf文件

vim /usr/local/program/docker/rocketmq/broker.conf

brokerIP1=IP
namesrvAddr=IP:9876
brokerName=broker_name

创建启动broker容器

 docker run -d  -v $(pwd)/logs:/home/rocketmq/logs -v $(pwd)/store:/home/rocketmq/store       -v $(pwd)/conf:/home/rocketmq/conf       --name rmqbroker       -e "NAMESRV_ADDR=IP:9876"       -e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m"       -p 10911:10911 -p 10912:10912 -p 10909:10909       foxiswho/rocketmq:4.8.0       sh mqbroker -c /home/rocketmq/conf/broker.conf

拉取RocketMQ的管理工具

docker pull styletang/rocketmq-console-ng

创建启动rocketmq-console

docker run -d --name rocketmq-console -e "JAVA_OPTS=-Drocketmq.namesrv.addr=IP:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Duser.timezone='Asia/Shanghai' " -v /etc/localtime:/etc/localtime -p 8082:8080 -t styletang/rocketmq-console-ng

查看管理工具
在这里插入图片描述

部署Minion对象存储服务

基于Docker安装部署Minion对象存储服务

部署zookeeper

1.拉取镜像

docker pull zookeeper

2.创建容器

docker run  -id --name zookeeper -p 2181:2181  zookeeper

3.执行验证
在这里插入图片描述

在这里插入图片描述

部署dobbo-admin

1.拉取镜像

 docker pull apache/dubbo-admin

2.创建容器

必须指定zookeeper地址,不能是默认的127.0.0.1,否则报错连接超时

docker run -it  --name dubbo-admin -e  admin.registry.address=zookeeper://119.23.62.62:2181 -e admin.config-center=zookeeper://119.23.62.62:2181 -e  admin.metadata-report.address=zookeeper://119.23.62.62:2181 -p 8080:8080 apache/dubbo-admin

在这里插入图片描述

3.浏览器访问
在这里插入图片描述

部署Portainer

Portainer是Docker的可视化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。

docker search portainer

docker pull portainer/portainer
 docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/docker/portainer:/data --name portainer portainer/portainer

第一次访问需要设置账号密码
在这里插入图片描述
若创建失败,报错:Failure Unable to create administrator user

1.关闭并删除portainer容器
2.重新创建容器,同时指定用户名与密码

docker run -d -p 9000:9000 --env ADMIN_USERNAME=Administrator --env ADMIN_PASS=Administrator -v /var/run/docker.sock:/var/run/docker.sock -v /usr/local/docker/portainer:/data --name portainer portainer/portainer

3.输入命令行中的账户密码,即可创建成功

管理本地docker
在这里插入图片描述
在这里插入图片描述

部署Canal

拉取canal容器

docker pull canal/canal-server:v1.1.5

启动容器

docker run -p 11111:11111 --name canal -id 0c7f1d62a7d8

进入canal容器

docker exec -it canal bash

编辑canal容器的配置

vi canal-server/conf/example/instance.properties

修改3处:

# 与server_id的值不重复即可
 canal.instance.mysql.slaveId=666

# 数据库地址
canal.instance.master.address=IP:3306

# 创建的账号、密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal

详细配置文档

[root@064fb8202b09 admin]# cat canal-server/conf/example/instance.properties
#################################################
## mysql serverId , v1.0.26+ will autoGen
# 与server_id的值不重复即可
 canal.instance.mysql.slaveId=666

# enable gtid use true/false
canal.instance.gtidon=false

# position info
# 数据库地址
canal.instance.master.address=IP:3306
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=

# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=

# table meta tsdb info
canal.instance.tsdb.enable=true
#canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
#canal.instance.tsdb.dbUsername=canal
#canal.instance.tsdb.dbPassword=canal

#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#canal.instance.standby.gtid=

# 创建的账号、密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==

# table regex
canal.instance.filter.regex=.*\\..*
# table black regex
canal.instance.filter.black.regex=mysql\\.slave_.*
# table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.field=test1.t_product:id/subject/keywords,test2.t_company:id/name/contact/ch
# table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch

# mq config
canal.mq.topic=example
# dynamic topic route by schema or table regex
#canal.mq.dynamicTopic=mytest1.user,mytest2\\..*,.*\\..*
canal.mq.partition=0
# hash partition config
#canal.mq.partitionsNum=3
#canal.mq.partitionHash=test.table:id^name,.*\\..*
#canal.mq.dynamicTopicPartitionNum=test.*:4,mycanal:6
#################################################

重启docker

docker restart canal

查看日志

tail -n60 -f canal-server/logs/example/example.log 

在这里插入图片描述

部署MongoDB

拉取镜像

 docker pull mongo

创建容器

docker create --name mongodb -p 27017:27017 -v mongodb:/data/db mongo

docker create --name mongodb --restart=always -p 27017:27017 -v mongodb:/data/db mongo

启动容器

docker start mongodb

进入容器

docker exec -it mongodb /bin/bash

操作测试

root@b3079ea93c31:/# mongo
MongoDB shell version v5.0.2
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c1b0e71c-23f9-4440-9bce-398dddb96a8a") }
MongoDB server version: 5.0.2
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
We recommend you begin using "mongosh".
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
        https://community.mongodb.com
---
The server generated these startup warnings when booting: 
        2021-08-28T08:23:05.880+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
        2021-08-28T08:23:05.880+00:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
---
---
        Enable MongoDB's free cloud-based monitoring service, which will then receive and display
        metrics about your deployment (disk utilization, CPU, operation statistics, etc).

        The monitoring data will be available on a MongoDB website with a unique URL accessible to you
        and anyone you share the URL with. MongoDB may use this information to make product
        improvements and to suggest MongoDB products and deployment options to you.

        To enable free monitoring, run the following command: db.enableFreeMonitoring()
        To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
> 

部署单机Nacos

docker pull nacos/nacos-server:1.4.2

# MODE	cluster模式/standalone模
docker run --name nacos -e MODE=standalone -p 8848:8848 -d nacos/nacos-server:1.4.2

访问: IP:8848/nacos/index.html
在这里插入图片描述
使用账号: nacos 密码: nacos登录
在这里插入图片描述

部署Sentinel

docker pull bladex/sentinel-dashboard:1.8.0

docker run --name sentinel  -d -p 8858:8858 -d bladex/sentinel-dashboard:1.8.0

访问:http://112.74.96.150:8858
在这里插入图片描述
使用账号/密码: sentinel/sentinel 登录
在这里插入图片描述
在这里插入图片描述

部署其他应用

到此为止,可以发现,docker部署应用非常简单、高效,其他应用部署也类似。