Docker中常用Java开发框架的安装

Docker 安装 MySQL 及MySQL主从复制搭建

参考链接 : https://www.cnblogs.com/songwenjie/p/9371422.html

  1. 拉取镜像
docker pull mysql:5.7
  1. 启动容器,启动两个容器,一主一从
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -p 3307:3306 --name mysqlDev -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  1. 进入容器内部,修改主从服务器my.cnf配置文件,创建同步用户。
  • 进入MySQL容器
docker exec -it mysql /bin/bash
  • 修改my.cnf配置文件
安装vim命令
apt-get update
apt-get install vim

vi /etc/mysql/my.cnf

my.cnf配置如下:

[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
## 修改大小写敏感配置
lower_case_table_names=1
  • 重启mysql
service mysql restart
  • exit退出容器,重启MySQL容器
docker restart mysql
  • 通过SQL工具连接SQL数据库,在SQL数据库中创建同步用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
  • 以同样的方式修改从服务器
docker exec -it mysqlDev /bin/bash
apt-get update
apt-get install vim

vi /etc/mysql/my.cnf

[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## 修改大小写敏感配置
lower_case_table_names=1

service mysql restart

exit

docker restart mysqlDev
  1. 链接从服务器
  • 在master服务器进入MySQL,执行show master status; 记录File和Position字段。

  • 在从服务器SQL中执行,注意修改master_log_file、master_host、master_log_pos字段

change master to master_host='192.168.137.128', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;
  • 在Slave中的mysql终端执行show slave status;用于查看主从同步状态。

正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。

  • 使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status。 SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。

  • 在主服务器中创建一个数据库,在从服务器中检查是否存在该数据库,若存在则主从复制建立完成。

Docker 安装 Redis

单机部署参考链接:https://www.jianshu.com/p/4413f484789d
哨兵模式部署参考链接:https://www.jianshu.com/p/ce1d78cd368a

以下是哨兵模式部署方法:
哨兵模式部署采用1主2从1哨兵模式

  1. 拉取镜像
docker pull redis
  1. 在服务器中创建映射目录及配置文件
  • 创建映射目录
mkdir -p /data/redis/redis-6379-data
mkdir -p /data/redis/redis-6380-data
mkdir -p /data/redis/redis-6381-data
mkdir -p /data/redis/sentinel-26379-data
  • 创建配置文件
cd /data/redis(可自己按照实际情况决定路径)
vi redis-6379.conf

redis-6379.conf配置文件如下:

port 6379

logfile "redis-6379.log"

dir /data

appendonly yes

appendfilename appendonly.aof

masterauth 123456

requirepass 123456

创建redis-6380.conf、redis-6381.conf配置文件,内容与redis-6379一致,不需要修改。

创建sentinel-26379.conf配置文件,配置文件如下:

port 26379

dir "/data"

logfile "sentinel-26379.log"

sentinel monitor mymaster 192.168.137.128 6379 1

sentinel down-after-milliseconds mymaster 10000

sentinel failover-timeout mymaster 60000

sentinel auth-pass mymaster 123456
  1. 创建容器
docker run -p 6379:6379 --net=host --restart=always --name redis-6379 -v /data/redis/redis-6379.conf:/etc/redis/redis-6379.conf -v /data/redis/redis-6379-data:/data -d redis redis-server /etc/redis/redis-6379.conf

docker run -p 6380:6379 --net=host --restart=always --name redis-6380 -v /data/redis/redis-6380.conf:/etc/redis/redis-6380.conf -v /data/redis/redis-6380-data:/data -d redis redis-server /etc/redis/redis-6380.conf
docker run -p 6381:6379 --net=host --restart=always --name redis-6381 -v /data/redis/redis-6381.conf:/etc/redis/redis-6381.conf -v /data/redis/redis-6381-data:/data -d redis redis-server /etc/redis/redis-6381.conf

哨兵

docker run -p 26379:26379 --restart=always --name sentinel-26379 -v /data/redis/sentinel-26379.conf:/etc/redis/sentinel.conf -v /data/redis/sentinel-26379-data:/data -d redis redis-sentinel /etc/redis/sentinel.conf
  1. 登录容器查看redis运行情况
docker exec -it redis-6379 /bin/bash
redis-cli -h 192.168.137.128 -p 6379 -a "123456"
info replication

redis-cli -h 192.168.137.128 -p 6380 -a "123456"
info replication

docker exec -it sentinel-26379 /bin/bash
redis-cli -p 26379
info sentinel

docker 安装 Zookeeper

拉取镜像

docker pull docker.io/zookeeper

单机部署:

docker run --privileged -p 2181:2181 -p 2887:2888 -p 3887:3888 --name zookeeper --restart always -d docker.io/zookeeper

集群部署:
集群部署参考链接: https://blog.csdn.net/ypp91zr/article/details/89423878

  1. 创建挂载目录
mkdir -p /data1/zookeeper1/conf
mkdir -p /data1/zookeeper1/data
  1. 在conf目录创建zoo.cfg配置文件
vi /data1/zookeeper1/conf/zoo.cfg

zoo.cfg配置文件如下:

#客户端连接端口,监听客户端连接的端口
clientPort=2181
#数据文件目录+数据持久化路径
dataDir=/data
#日志文件目录
dataLogDir=/data/log
#通信心跳数
tickTime=2000
#集群中的follower与leader之间初始连接时能容忍的最多心跳数
initLimit=5
#集群中leader与follower之间的最大响应时间单位
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
4lw.commands.whitelist=*
server.111=192.168.137.128:2888:3888
server.222=192.168.137.128:2889:3889
server.333=192.168.137.128:2890:3890
  1. 在data目录下创建myid文件,写入myid
vi /data1/zookeeper1/data/myid

111
  1. 仿照以上配置,在其他服务器上创建同样的配置信息

  2. 启动容器

docker run  --network host -p 2181:2181 -p 2888:2888 -p 3888:3888 -v /data1/zookeeper1/data:/data -v /data1/zookeeper1/conf:/conf --name zookeeper-2181 -d docker.io/zookeeper
docker run  --network host -p 2182:2182 -p 2889:2889 -p 3889:3889 -v /data1/zookeeper2/data:/data -v /data1/zookeeper2/conf:/conf --name zookeeper-2182 -d docker.io/zookeeper
docker run  --network host -p 2183:2183 -p 2890:2890 -p 3890:3890 -v /data1/zookeeper3/data:/data -v /data1/zookeeper3/conf:/conf --name zookeeper-2183 -d docker.io/zookeeper

docker 安装 Kafka 及 Kakfa-manager

部署Kafka必须先部署Zookeeper 使用--link zookeeper进行与zookeeper的容器连接
kafka-manager安装如下:

docker pull sheepkiller/kafka-manager

docker run -d --privileged --name kafka-manager -p 9000:9000 -e ZK_HOSTS="192.168.137.128:2181" docker.io/sheepkiller/kafka-manager

Kafka单机部署:

docker pull wurstmeister/kafka

docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=192.168.137.128 --env KAFKA_ADVERTISED_PORT=9092 --volume /etc/localtime:/etc/localtime wurstmeister/kafka:latest
(以下命令也可进行单机部署)
docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_BROKER_ID=0 --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.137.128:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 --volume /etc/localtime:/etc/localtime wurstmeister/kafka:latest

Kafka集群部署
只需要改变brokerId和端口即可用于搭建集群

docker run -d --name kafka2 --publish 9093:9093 --link zookeeper --env KAFKA_BROKER_ID=1 --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.137.128:9093 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9093 --volume /etc/localtime:/etc/localtime wurstmeister/kafka:latest

docker 安装 es 及 elasticsearch-head

安装elasticsearch-head:

  1. 拉取镜像
docker pull mobz/elasticsearch-head:5
  1. 创建容器
docker create --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
  1. 启动容器
docker start elasticsearch-head
  1. 访问测试:http://IP:9100

安装elasticsearch
参考链接 https://zhuanlan.zhihu.com/p/140746436

  1. 拉取镜像
docker pull elasticsearch:7.7.0
  1. 在服务器中创建配置文件(由于笔者在实际部署过程中出现目录映射失败问题,故未进行data、log目录映射,仅做了配置文件映射)
mkdir -p /data/elasticSearch/config

vi es-a.yml 

es-a.yml配置文件如下:

cluster.name: es_test_cluster
# 节点名称, 本集群节点名
node.name: node-a
# 是不是有资格竞选主节点
node.master: true
# 是否存储数据
node.data: true
# 最大集群节点数
node.max_local_storage_nodes: 10
# ============= 网络相关 ===============
# 本节点 主机ip
network.host: 0.0.0.0
# 在docker中可以通过 -p out-port:9200 暴露为宿主网卡的别的端口
# 本服务节点的服务端口
http.port: 9200
# 本服务节点暴露出为集群节点之间的沟通端口
transport.tcp.port: 9300

# es6.x的集群配置
discovery.zen.ping.unicast.hosts: ["192.168.137.128:9300", "192.168.137.128:9301", "192.168.137.128:9302"]

discovery.zen.minimum_master_nodes: 2

# es7.x 之后新增的配置,写入候选主节点的设备地址,在开启服务后可以被选为主节点(分别是noda-a node-b node-c 节点的 沟通服务地址)
discovery.seed_hosts: ["192.168.137.128:9300","192.168.137.128:9301","192.168.137.128:9302"]
# es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举master
cluster.initial_master_nodes: ["node-a", "node-b","node-c"]
http.cors.enabled: true
http.cors.allow-origin: "*"

其中

http.cors.enabled: true
http.cors.allow-origin: "*"

用于提供elasticsearch-head的访问,否则elasticsearch-head将无法连接es成功

vi es-b.yml
vi es-c.yml
仅需要修改node.name参数,其他可不做改动

  1. 创建容器互联网络
docker network create -d bridge elastic-router
  1. 创建容器,如果服务器内存有限,则去掉ES_JAVA_OPTS参数。
docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d \
-p 9200:9200 -p 9300:9300 --net elastic-route \
-v /data/elasticSearch/config/es-a.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
--name es_1 elasticsearch:6.4.0

docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d \
-p 9201:9200 -p 9301:9300 --net elastic-route \
-v /data/elasticSearch/config/es-b.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
--name es_2 elasticsearch:6.4.0

docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d \
-p 9202:9200 -p 9302:9300 --net elastic-route \
-v /data/elasticSearch/config/es-c.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
--name es_3 elasticsearch:6.4.0
  1. 访问测试:访问http://IP:9100 进入elasticsearch-head ip输入http://IP:9200 是否有节点存在,若节点存在则部署成功

docker 安装 mongoDB

单机部署参考链接:http://www.apgblogs.com/docker-mongodb/

  1. 拉取镜像
docker pull mongo
  1. 创建容器
docker run -p 27017:27017 --name mongoDb -d mongo
  1. 进入容器内部,创建管理员用户
docker exec -it mongoDb mongo

use admin

db.createUser({user:"admin",pwd:"admin",roles:[{role:"root",db:"admin"}]}); 
  1. 用刚创建的管理用户登录在创建个普通用户
docker exec -it /bin/bash
mongo --port 27017 -u admin -p admin --authenticationDatabase admin

db.createUser({user:"alp",pwd:"alp",roles:[{role:"readWrite",db:"alp"}]});

复制集部署参考链接:https://www.cnblogs.com/jay54520/p/8433515.html
本部署采用1主2从1仲裁模式

  1. 创建容器互联网络
docker network create -d bridge mongo-router
  1. 创建容器
    主、从、仲裁基本一致:
docker run -p 27018:27017 --name mongoMaster -d mongo  --replSet "rs0" --net mongo-route

docker run -p 27019:27017 --name mongoDev1 -d mongo  --replSet "rs0" --net mongo-route

docker run -p 27020:27017 --name mongoDev2 -d mongo  --replSet "rs0" --net mongo-route

docker run -p 27021:27017 --name mongoArb -d mongo  --replSet "rs0" --net mongo-route
  1. 进入任一容器,初始化复制集,将其余节点加入复制集
docker exec -it mongoMaster mongo

## 副本集初始化
rs.initiate()

## 将其余的节点加入副本集
rs.add("192.168.137.128:27019")
rs.add("192.168.137.128:27020")

## 将仲裁节点加入副本集
rs.addArb("192.168.137.128.27021")

## 查看副本集的状态
rs.status()

注:此时若主节点的syncSourceHost为空,连接出现问题,则将主节点的容器关闭(docker stop mongoMaster),在推举成新主节点的从节点容器中,删除原主节点(rs.remove("(rs.status中显示的原主节点name)")),重新按IP加入原主节点(rs.add("192.168.137.128:27018"))即可。

  1. 创建用户(参照单机部署即可)

docker 安装 Hadoop集群及spark

参考链接: https://zhuanlan.zhihu.com/p/59758201

sudo docker run -it --network hadoop -v /data/hadoop/bin:/usr/local/hadoop/bin -h "h01" --name "h01" -p 9870:9870 -p 8088:8088 -p 8020:8020 hadoop /bin/bash
docker run -it --network hadoop -h "h01" --name "h01" -p 9870:9870 -p 8088:8088 -p 8020:8020 -p 9866:9866 -p 6060:8080 -p 6061:8081 -p 7077:7077 spark_hadoop /bin/bash

注意有时候hdfs无法写入,检查hdfs是否是安全模式造成的影响,如果是安全模式,需要退出安全模式。

../bin/hdfs dfsadmin -safemode get
../bin/hdfs dfsadmin -safemode leave

docker 安装 tomcat

docker pull tomcat

(注意:docker安装的tomcat时区是UTC 而服务器上的时区一般为CST,需要调整时区(笔者在连接oracle时出现了ORA-01882: timezone region not found) 首先在启动时加上 -v /etc/localtime:/etc/localtime)

docker run --name tomcat -p 8080:8080  -v /data/tomcat/webapps:/usr/local/tomcat/webapps -v /data/tomcat/logs:/usr/local/tomcat/logs  -v /etc/localtime:/etc/localtime -d tomcat

进入系统修改本地时间

docker exec -it tomcat /bin/bash 
echo "Asia/Shanghai" > /etc/timezone

重启tomcat容器即可(简单点的话可以直接进容器/etc/timezone 修改UTC为UTC+8即可,不需要加参数)

docker 部署自定义容器

以zkui为例, 举例说明假设在原有系统中已存在指定项目,如何将项目在docker中部署

  1. 下载ubuntu镜像
docker pull ubuntu:16.04
  1. 启动一个ubuntu镜像
docker run -it --name myProject ubuntu:16.04 /bin/bash

此时已经进入容器中了 根据自身需要进行基本命令行的下载(例如vi命令、Java运行环境等)。再退出容器后,启动容器。

docker start myProject
  1. 将服务器上的项目,复制到容器中
docker cp /home/zkui/ myProject:/home

此时执行 docker exec -it myProject /bin/bash 进入容器内部,可在/home目录下看到对应的文件
4. 在容器根目录创建执行脚本

 vi start.sh

start.sh配置文件如下:

sh /home/zkui/startZKui.sh
/bin/bash
  1. 将容器打包成镜像
docker commit myProject zkui
  1. 启动镜像,绑定端口
docker run -it --restart=always --name myZkui -p 9090:9090 zkui bash ./start.sh
  1. 访问9090端口,访问成功则部署成功
    http://192.168.137.128:9090/home
    其他自定义容器的配置方式可参照此方式进行配置
posted @ 2021-05-10 08:54  cos晓风残月  阅读(33)  评论(0编辑  收藏  举报
*