1.首先下载安装docker
step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
Step 4: 开启Docker服务
sudo service docker start
查找Docker-CE的版本:
yum list docker-ce.x86_64 --showduplicates | sort -r
2.由于国内连接docker官方镜像太慢,这里使用阿里云的docker镜像。
阿里云docker容器地址
https://dev.aliyun.com/search.html
点击管理中心,使用自己的阿里云账号进入控制台。
进入左边菜单栏的镜像加速器,按照要求进行操作。
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
{
"registry-mirrors": ["**********"]
}
然后重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
3.docker run hello-world 测试docker是否安装成功
docker 基础命令
执行命令查看运行的容器:
docker ps
进入正在运行的容器(容器id),退出后会关闭容器
docker attach 36291a40e81c
进入正在运行的容器(容器id或容器名称),退出后容器会后台运行,一般选择这种方式进入容器
docker exec -it [CONTAINER_NAME or CONTAINER_ID] /bin/bash
启动一个已有的容器(容器id)
docker start 36291a40e81c
docker 提交一个运行的容器为镜像,containerid 提交的容器id,name 生成的镜像名称
docker commit [containerId] [name]`
docker删除一个容器
docker rm [容器id]
docker删除一个镜像,-f 强制删除
docker rmi -f [镜像id]
4.安装centos7.2镜像
从仓库拉取centod7.2.1511的镜像
docker pull centos:7.2.1511
查询已下载镜像文件:
docker images
执行run命令在镜像的基础上启动容器,一旦容器启动了,我们就可以登录到容器中,安装自己所需的软件或应用程序
指定容器的某个端口映射到母机的某个端口
docker run -i -t --privileged -p ip:hostPort:containerPort -p hostPort:containerPort --name mycentos7.2 --ulimit nofile=1048576:1048576 -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash
指定以net=host的方式将端口映射到母机的
docker run -i -t --privileged --net=host --ulimit nofile=1048576:1048576 --name mycentos -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash
这条命令比较长,我们稍微分解一下,其实包含以下三个部分:
docker run <相关参数> <镜像 ID> <初始命令>
其中,相关参数包括:
- –ulimit nofile=1048576:1048576 设置容器允许打开的文件句柄数(在内部配置不生效,在启动时配置)
- –privileged 允许容器内的文件具有读写权限
- –net=host 指定启动的容器可以连接外网(此时容器的端口自动映射到宿主机的端口)
- 使用-p参数会分配宿主机的端口映射到虚拟机。IP表示主机的IP地址。(不写默认为本机) hostPort表示宿主机的端口。 containerPort表示虚拟机的端口。通过-p可以映射多个端口
- -i:表示以“交互模式”运行容器
- -t:表示容器启动后会进入其命令行
- –name: 为新启动的容器命名
- –env 设置启动容器的环境变量
- -v:表示需要将本地哪个目录挂载到容器中,格式:-v <宿主机目录>:<容器目录>
假设我们的所有安装程序都放在了宿主机的/root/software/目录下,现在需要将其挂载到容器的/mnt/software/目录下。- 需要说明的是,启动不一定要使用“镜像 ID”,也可以使用“仓库名:标签名”,
- 初始命令表示一旦容器启动,需要运行的命令,此时使用“/bin/bash”,表示什么也不做,只需进入命令行即可
注意:–net=host 和 -p 指定端口不能同时使用生效
5.进入centos7.2镜像,并安装依赖服务
首先进入已经运行的容器
docker attach 36291a40e81c
安装openjdk
在容器内安装openjdk
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
执行java -version,检查jdk安装成功
安装中文支持:由于centos7.2官方镜像不支持中文
yum -y install kde-l10n-Chinese telnet && \
yum -y reinstall glibc-common &&\
yum clean all && \
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
然后在命令行敲下面命令,使镜像支持中文:
LANG=zh_CN.UTF-8
source /etc/profile
安装wget依赖服务
yum install -y wget
最后将centod7.2.1511镜像发布到远程仓库方便下载,作为其他容器的母容器。
6.安装emq程序。
首先从阿里云下载并启动母机centos7.2.511镜像,然后启动为容器。
docker run -i -t --privileged --net=host --ulimit nofile=1048576:1048576 --name myemq -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash
将emq的rpm包下载到centos7.2.1511容器内部。以下所有操作都是在容器内部进行
按照emq官网文档进行安装部署。emq官方文档
启动emq项目,然后就可以进行连接。
修改emq配置文件emq.conf: emq官方文档测试调优
配置好后,将容器提交为镜像。
编写emq启动脚本在、/home/startEmq.sh
使用docker commit 命令生成安装和配置完emq的镜像。
docker commit 758d3c44d315 jtkj/emqttd
然后将镜像发布到远程仓库方便下载。
首先登录到阿里云远程仓库
sudo docker login --username={你的阿里云用户名} registry.cn-hangzhou.aliyuncs.com
将镜像推送到registry:
$ sudo docker login --username=[你的阿里云用户名] registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/jtkj/jtkj-emqttd:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/jtkj/jtkj-emqttd:[镜像版本号]
这样就可以将镜像推送到阿里云远程仓库。
7.从阿里云仓库下载emq镜像并运行
首先在母机上下载安装运行docker服务。
按照步骤2配置阿里云。
然后使用命令登录阿里云docker
sudo docker login --username=【你的阿里云账号】registry.cn-hangzhou.aliyuncs.com
从仓库中拉取镜像到本地:
sudo docker pull registry.cn-hangzhou.aliyuncs.com/jtkj/jtkj-emqttd:[镜像版本号]
使用docker命令运行启动容器
docker run -i -t --privileged --env LANG=zh_CN.UTF-8 --net=host --ulimit nofile=1048576:1048576 --name myemq -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash
进入容器后输入exit退出容器,然后执行命令
docker start [容器id或容器name]
然后执行命令进入容器
docker exec -it [CONTAINER_NAME or CONTAINER_ID] /bin/bash
以上面这种方式进入容器内部,在退出容器后,容器会在后台运行。
8.docker搭建mongodb集群
1.下载自己配置的centos7.2.1511镜像到本地
2.启动镜像并进入镜像
3.下载解压mongodb依赖包
cd /opt && wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.3.tgz
tar xvf mongodb-linux-x86_64-3.4.3.tgz
移动解压好的目录到usr目录下
cd /opt && mv mongodb-linux-x86_64-3.4.3/ /usr/local/mongodb
环境变量配置
echo export PATH="/usr/local/mongodb/bin:$PATH" >> /etc/profile
使环境变量生效
source /etc/profile
配置mongodb Master节点数据文件夹,日志,pid
创建主节点配置文件
mkdir -p /usr/local/var/mongodb/data/master
mkdir -p /usr/local/etc/mongodb/
mkdir -p /usr/local/var/log/mongodb/
mkdir -p /usr/local/var/mongodb/pid/
cd /usr/local/etc/mongodb && touch master.conf
echo dbpath=/usr/local/var/mongodb/data/master >> master.conf
echo logpath=/usr/local/var/log/mongodb/master.log >> master.conf
echo pidfilepath=/usr/local/var/mongodb/pid/master.pid >> master.conf
echo directoryperdb=true >> master.conf
echo logappend=true >> master.conf
echo replSet=testrs >> master.conf
echo bind_ip=127.0.0.1 >> master.conf
echo port=27017 >> master.conf
echo oplogSize=10000 >> master.conf
echo fork=true >> master.conf
echo noprealloc=true >> master.conf
创建备节点配置文件
mkdir -p /usr/local/var/mongodb/data/slaver
mkdir -p /usr/local/etc/mongodb/
mkdir -p /usr/local/var/log/mongodb/
mkdir -p /usr/local/var/mongodb/pid/
cd /usr/local/etc/mongodb && touch slaver.conf
echo dbpath=/usr/local/var/mongodb/data/slaver >> slaver.conf
echo logpath=/usr/local/var/log/mongodb/slaver.log >> slaver.conf
echo pidfilepath=/usr/local/var/mongodb/pid/slaver.pid >> slaver.conf
echo directoryperdb=true >> slaver.conf
echo logappend=true >> slaver.conf
echo replSet=testrs >> slaver.conf
echo bind_ip=127.0.0.1} >> slaver.conf
echo port=27017 >> slaver.conf
echo oplogSize=10000 >> slaver.conf
echo fork=true >> slaver.conf
echo noprealloc=true >> slaver.conf
创建仲裁节点配置文件
mkdir -p /usr/local/var/mongodb/data/arbiter
mkdir -p /usr/local/etc/mongodb/
mkdir -p /usr/local/var/log/mongodb/
mkdir -p /usr/local/var/mongodb/pid/
cd /usr/local/etc/mongodb && touch arbiter.conf
echo dbpath=/usr/local/var/mongodb/data/arbiter >> arbiter.conf
echo logpath=/usr/local/var/log/mongodb/arbiter.log >> arbiter.conf
echo pidfilepath=/usr/local/var/mongodb/pid/arbiter.pid >> arbiter.conf
echo directoryperdb=true >> arbiter.conf
echo logappend=true >> arbiter.conf
echo replSet=testrs >> arbiter.conf
echo bind_ip=127.0.0.1 >> arbiter.conf
echo port=27017 >> arbiter.conf
echo oplogSize=10000 >> arbiter.conf
echo fork=true >> arbiter.conf
echo noprealloc=true >> arbiter.conf
然后将容器提交为镜像
docker commit [containerId] jtkj-mongodb
将镜像提交到阿里云远程仓库
sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/jtkj/jtkj-mongodb:[镜像版本号]
sudo docker push registry.cn-hangzhou.aliyuncs.com/jtkj/jtkj-mongodb:[镜像版本号]
9 客户机从阿里云下载mongodb镜像并运行
sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/jtkj/jtkj-mongodb:[镜像版本号]
然后启动镜像:
docker run -i -t --privileged --net=host --env LANG=zh_CN.UTF-8 --name mongodbDocker -v /root/software/:/mnt/software/ [镜像id] /bin/bash
启动完后进入容器,首先修改一个配置文件:
cd /usr/local/etc/mongodb/
在这个目录下有三个配置文件,分别是,Master主节点服务配置,Slaver备节点服务配置,arbiter冲裁节点配置。
修改配置文件里的bind_id={宿主机ip}
然后进入到home目录下
cd /home
里面有三个脚本文件,分别是启动主节点,备节点和仲裁节点。根据需要执行脚本启动节点即可。
然后配置集群:
进入主节点的命令行控制台:
mongo 172.16.100.39 27017
use admin
cfg={ _id:"testrs", members:[ {_id:0,host:'192.168.100.101:27017',priority:2}, {_id:1,host:'192.168.100.102:27017',priority:1}, {_id:2,host:'192.168.100.103:27017',arbiterOnly:true}] };
rs.status()
此时mongodb集群节点已搭建成功
10.docker搭建redis集群
1.首先从阿里云下载并启动母机centos7.2.511镜像,然后下面命令启动作为容器
docker run -i -t --privileged --net=host --name mongodbDocker -v /root/software/:/mnt/software/ [镜像id] /bin/bash
2.进入容器安装redis依赖,然后下载安装包
yum install -y gcc
yum install -y vim
yum install -y wget
cd /opt && wget http://download.redis.io/releases/redis-4.0.2.tar.gz && tar xzf redis-4.0.2.tar.gz
yum -y install gcc automake autoconf libtool make
cd redis-4.0.2 && make && make install
3.创建主节点配置文件
mkdir -p /var/redis/data
cp /opt/redis-4.0.2/redis.conf /usr/local/etc/redis-master.conf
cd /usr/local/etc
sed -i "s#^bind 127.0.0.1.*#bind {masterip}#g" redis-master.conf
sed -i "s#^daemonize no.*#daemonize yes#g" redis-master.conf
sed -i "s#^logfile.*#logfile '6379.log'#g" redis-master.conf
sed -i "s#^dbfilename dump.rdb.*#dbfilename dump-6379.rdb#g" redis-master.conf
sed -i "s#^dir ./.*#dir /var/redis/data/#g" redis-master.conf
4.创建备节点配置文件
mkdir -p /var/redis/data
cp /opt/redis-4.0.2/redis.conf /usr/local/etc/redis-slave.conf
cd /usr/local/etc
sed -i "s#^bind 127.0.0.1.*#bind {slaveip}#g" redis-slave.conf
sed -i "s#^daemonize no.*#daemonize yes#g" redis-slave.conf
sed -i "s#^logfile.*#logfile '6379.log'#g" redis-slave.conf
sed -i "s#^dbfilename dump.rdb.*#dbfilename dump-6379.rdb#g" redis-slave.conf
sed -i "s#^dir ./.*#dir /var/redis/data/#g" redis-slave.conf
echo slaveof {masterip} 6379 >> redis-slaver.conf
5.创建仲裁节点配置文件
mkdir -p /var/redis/data
cp /opt/redis-4.0.2/sentinel.conf /usr/local/etc/redis-sentinel.conf
cd /usr/local/etc
echo bind {senip} >> redis-sentinel.conf
sed -i "s#^dir /tmp.*#dir /var/redis/data#g" redis-sentinel.conf
sed -i "s#^sentinel monitor mymaster.*#sentinel monitor mymaster {masterip} 6379 1#g" redis-sentinel.conf
6。创建启动脚本在/home目录下
touch startRedisMaster.sh
touch startRedisSlave.sh
touch startRedisSentinel.sh
7.脚本内容分别是
startRedisMaster.sh
#!/bin/bash
//修改主节点的ip地址。第一次启动容器时运行,以后可以注释掉
cd /usr/local/etc
sed -i "s#^bind {masterip}.*#bind ${masterip}#g" redis-master.conf
redis-server /usr/local/etc/redis-master.conf //启动主节点
startRedisSlave.sh
#!/bin/bash
//修改备节点的配置里主节点和备节点ip地址。第一次启动容器时运行,以后可以注释掉
cd /usr/local/etc
sed -i "s#^bind {slaveip}.*#bind ${slaveip}#g" redis-slave.conf #备节点
sed -i "s#^slaveof {masterip} 6379.*#slaveof ${masterip} 6379#g" redis-slave.conf #备节点
redis-server /usr/local/etc/redis-slave.conf //启动备节点
startRedisSentinel.sh
#!/bin/bash
//修改仲裁节点的配置里主节点和仲裁节点ip地址。第一次启动容器时运行,以后可以注释掉
cd /usr/local/etc
sed -i "s#^sentinel monitor mymaster {masterip} 6379.*#sentinel monitor mymaster ${masterip}
6379 1#g" redis-sentinel.conf #仲裁节点
sed -i "s#^bind {senip}.*#bind ${senip}#g" redis-sentinel.conf #仲裁节点
redis-server /usr/local/etc/redis-sentinel.conf --sentinel & //启动仲裁节点
8.提交容器为镜像
docker commit [容器id] jtkj-redis
11 从阿里云下载redis镜像并启动
1.从阿里云下载redis镜像到本地
2.启动redis镜像master
docker run -i -t --privileged --net=host --env LANG=zh_CN.UTF-8 --env masterip=172.16.100.39 --name redisDocker -v /root/software/:/mnt/software/ da91ade52742 /bin/bash
3.启动redis镜像slave
docker run -i -t --privileged --net=host --env LANG=zh_CN.UTF-8 --env masterip=172.16.100.39 --env slaveip=172.16.100.37 --name redisDocker -v /root/software/:/mnt/software/ da91ade52742 /bin/bash
4.启动redis镜像sentinel
docker run -i -t --privileged --net=host --env LANG=zh_CN.UTF-8 --env masterip=172.16.100.39 --env senip=172.16.100.35 --name redisDocker -v /root/software/:/mnt/software/ da91ade52742 /bin/bash
–env 指定容器启动时的环境变量
LANG=zh_CN.UTF-8 指定中文编码
masterip 主节点ip
slaveip 备节点ip
senip 仲裁节点ip
5.启动容器后,进入容器/home目录下,执行对应的脚本
6.确定主从关系
在主节点
redis-cli -h 172.16.100.39 -p 6379 INFO replication
在备节点
redis-cli -h 172.16.100.37 -p 6379 INFO replication
12 安装kafka镜像
首先从阿里云下载centos7.2.1511镜像
sudo docker pull registry.cn-hangzhou.aliyuncs.com/jtkj/jtkj-centos7.2.1511:[镜像版本号]
启动centos7.2容器
docker run -i -t --privileged --net=host --env LANG=zh_CN.UTF-8 --name mykafka -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash
通过wget下载安装kafka安装包,并解压到/opt目录下
cd /opt && wget http://mirrors.hust.edu.cn/apache/kafka/1.0.0/kafka_2.12-1.0.0.tgz && tar xvf kafka_2.12-1.0.0.tgz
创建zookeeper数据目录
cd /opt && mkdir -p zookeeper/zkdata zookeeper/zkdatalog
JVM参数优化 将kafka堆内存由1G调整为2G
cd /opt/kafka_2.12-1.0.0/bin/
sed -i "s/1G/2G/g" kafka-server-start.sh
修改zookeeper配置文件
cd /opt/kafka_2.12-1.0.0/config
sed -i "s#^dataDir=.*#dataDir=/opt/zookeeper/zkdata#g" zookeeper.properties
echo tickTime=2000 >> zookeeper.properties
echo initLimit=10 >> zookeeper.properties
echo syncLimit=5 >> zookeeper.properties
echo dataLogDir=/opt/zookeeper/zkdatalog >> zookeeper.properties
修改kakfa配置文件
cd /opt && mkdir -p kafka/kafkalogs
cd /opt/kafka_2.12-1.0.0/config
sed -i "s#^log.dirs=.*#log.dirs=/opt/kafka/kafkalogs#g" server.properties
echo log.cleanup.policy=delete >> server.properties
sed -i "s#^num.partition.*#num.partitions=12#g" server.properties
echo auto.create.topics.enable=true >> server.properties
echo delete.topic.enable=true >> server.properties
echo message.max.byte=5242880 >> server.properties
echo default.replication.factor=2 >> server.properties
echo replica.fetch.max.bytes=5242880 >> server.properties
在 /home下创建修改配置脚本(只在容器启动时执行一次) onlyRunOne.sh
#!/bin/bash #修改zookeeper配置,从环境变量读取,zookeeper的服务地址 cd /opt/kafka_2.12-1.0.0/config echo server.1=${server1} >> zookeeper.properties echo server.2=${server2} >> zookeeper.properties echo server.3=${server3} >> zookeeper.properties #从环境变量读取zkid echo ${zookeeperid} >> /opt/zookeeper/zkdata/myid #修改kafka配置 cd /opt/kafka_2.12-1.0.0/config sed -i "s#^broker.id=.*#broker.id=${brokerid}#g" server.properties echo host.name=${ip} >> server.properties sed -i "s#^log.retention.hours=.*#log.retention.hours=${hours}#g" server.properties sed -i "s#^zookeeper.connect=.*#zookeeper.connect=${zookeeper}#g" server.properties
在 /home下创建启动脚本 startZookeeperAndKafka.sh。用于启动zookeeper和kafka服务
#!/bin/bash
#启动zookeeper
cd /opt && ./kafka_2.12-1.0.0/bin/zookeeper-server-start.sh kafka_2.12-1.0.0/config/zookeeper.properties &
#启动kafka
cd /opt && ./kafka_2.12-1.0.0/bin/kafka-server-start.sh kafka_2.12-1.0.0/config/server.properties &
将容器提交为镜像
docker commit [container] jtkj-kafka
将容器提交到远程阿里云仓库’
sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/jtkj/jtkj-kafka:[镜像版本号] sudo docker push registry.cn-hangzhou.aliyuncs.com/jtkj/jtkj-kafka:[镜像版本号]
13 从阿里云下载kafka镜像并启动
sudo docker pull registry.cn-hangzhou.aliyuncs.com/jtkj/jtkj-kafka:[镜像版本号]
然后启动kafka镜像
docker run -i -t --privileged --net=host --env LANG=zh_CN.UTF-8 --env server1=172.16.100.37:2888:3888 --env server2=172.16.100.34:2888:3888 --env server3=172.16.100.35:2888:3888 --env zookeeperid=1 --env brokerid=0 --env ip=172.16.100.37 --env hours=5 --env zookeeper=172.16.100.37:2181,172.16.100.34:2181,172.16.100.36:2181 --name kafkaDocker -v /root/software/:/mnt/software/ 25c5298b1a36 /bin/bash
备注:启动kafka镜像 需要 配置环境变量。环境变量说明如下:
server1 server2 server3 位三台zo0keeper集群的ip地址
zookeeperid 为当前启动的zookeeper在集群中的唯一标识。值为1,2,3.。。
brokerid 为当前启动的kafka在集群中的标识,值为0,1,2
ip 为当前容器所在的母机ip
hours 为设置kafka日志几个小时清除一次
zookeeper 为zookeeper集群的地址
启动后进入容器执行脚本:(这个脚本时配置脚本只执行一次)
sh /home/onlyRunOne.sh
然后执行启动脚本
sh /home/startZookeeperAndKafka.sh