使用docker一键部署项目环境

1.安装docker

2.安装docker-compose

3.拉取镜像启动容器

上传包含配置文件的压缩包,解压到要安装的目录如/home下,解压包中为编写好的docker-compose.yml文件,其中包含了多个容器的安装,可以选择把不需要安装的服务配置注释掉或者指定创建的容器

version: '3'

services:
  redis:
    image: redis:4.0.8
    container_name: redis
    restart: always
    command: redis-server /etc/redis/redis.conf
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/hosts:/etc/hosts:ro
      - ./redis/data:/data
      - ./redis/conf/redis.conf:/etc/redis/redis.conf
      - ./redis/conf:/etc/redis
    network_mode: "host"

其中需要关注的主要为volumes,其中

- ./redis/data:/data

表示将宿主机的目录./redis/data挂载到容器中的/data目录,目的是将数据保存到宿主机上,因为容器重启后/data会清空。一般需要把宿主机的目录挂在到容器来实现数据持久化。
其中默认预置了一些持久化的目录和常用的配置文件,如:

redis:./redis/conf/
zookeeper:./zookeeper/zoo.cfg
fastdfs:./fastdfs/conf/
tomcat:./tomcat/webapps

决定好启动那些服务后则可以执行命令

docker-compose up -d container_name //更新并创建container_name
or
docker-compose up -d //更新并创建全部容器

此情况以上命令会自动拉取没有的镜像到本地,当服务器无法访问外网时,需要从本上传要部署的镜像,然后执行

docker load -i xxxx.tar

启动时会优先使用本地镜像,可通过以下命令确认容器情况

docker ps //查询已启动容器
docker ps -a  //查询全部容器
docker logs imageId/container_name //查询日志
docker exec -it imageId/container_name bash //进入容器内部
docker exec -it imageId/container_name + 容器内部执行的命令 //容器内部执行命令

4.部署集群需要修改的配置

例如要部署三台机器的ip为:
A) 172.0.0.1 (主)
B) 172.0.0.2 (从)
C) 172.0.0.3 (从)

  • reidis哨兵模式
    其中只需要在两个从服务器的redis.conf中增加一行
slaveof 172.0.0.1 6379
##如果master设置了密码则需要加一行
##masterauth <master-password>
  • 以上配置实现了主从模式
    开启哨兵模式需要将docker-compose.yml中service下的sentinel注释打开,执行
docker-compose up -d sentinel //更新并创建sentinel
or
docker-compose up -d //更新并创建全部容器
  • 然后修改三台服务器中的sentinel.conf以下内容
sentinel monitor master 172.0.0.1 6379 2
  • master为自定义的主节点名称
    172.0.0.1为主服务器ip
    2为设定当有几个从服务器认为master不可用时会更换master
  • fastdfs
    需要修改三台服务器中storage.conf和client.conf的以下内容
tracker_server=172.0.0.1:22122
tracker_server=172.0.0.2:22122
tracker_server=172.0.0.3:22122
  • zookeeper
    需要修改三台服务器中zoo.cfg的以下内容
server.1=172.0.0.1:2888:3888
server.2=172.0.0.2:2888:3888
server.3=172.0.0.3:2888:3888

其中server.X中的X为自定义的服务器id,对应的,需要分别修改各自服务器下的docker-compose.yml的zookeeper路径下增加environment:ZOO_MY_ID: 1最终结果为:

zookeeper:
        image: zookeeper
        restart: always
        environment:  
          ZOO_MY_ID: 1  //
        volumes:
          - ./zookeeper/zoo.cfg:/conf/zoo.cfg/datalog              
        container_name: 'zookeeper'
        network_mode: "host"

其中ZOO_MY_ID的值应该为前面修改的zoo.cfg中ip所对应的服务器id,即172.0.0.1的ZOO_MY_ID为1,172.0.0.2为2,172.0.0.3为3