docker

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值