一.pip管理工具安装

  docker-compose是python项目,所以安装需要通过python下的包管理工具pip安装。一般linux服务器都会预安装有python环境,所以优先检查python是否已经安装,pip管理工具是否已经安装

  

# wget https://bootstrap.pypa.io/get-pip.py    #下载pip脚本
# python2.7 get-pip.py                 #将pip绑定到python2.7中
# pip install --upgrade pip        #更新pip
# pip install docker-compose==1.22    #安装指定版本的docker-compose
# docker -v
Docker version 18.09.0

  当安装docker-compose可能遇到一些错误提示,如:自动删除request包失败时可以通过pip install --ignore-installed request命令忽略安装request包再安装docker-compose

二.资料准备

  创建目录如/workdir作为redis容器的工作目录。在/workdir中创建redis-master.conf(主reids配置文件)、redis-slave.conf(从reids配置文件)、redis-master.sh(主容器的redis启动脚本)、redis-slave.sh(从容器的redis启动脚本)

  redis-master.conf主要配置如下:

  

################################## NETWORK #####################################
bind 0.0.0.0  
port 6379 ################################## SECURITY ###################################
requirepass 1 ################################# REPLICATION #################################
masterauth 1            #以防以后使用哨兵切换主节点后连接不到新主节点

  redis-slave.conf主要配置如下:

################################## NETWORK #####################################
bind 0.0.0.0
port 6379 ################################## SECURITY ###################################
requirepass 1 ################################# REPLICATION #################################
slaveof 172.20.0.2 6379      #指定主节点的ip
masterauth 1

  redis-master.sh代码如下:

#!/usr/bin/bash
redis-server /workdir/redis-master.conf

  redis-slave.sh代码如下:

#!/usr/bin/bash
redis-server /workdir/redis-slave.conf

  准备docker-compose编排文件,由于当前docker引擎版本是18.09.0所以这里version使用3.7版本

version: "3.7"
services:
redis-master:
image: redis
container_name: redis-master
stdin_open: true
tty: true
networks:
redis:
ipv4_address: 172.20.0.2
volumes:
- "/workdir:/workdir"
expose:
- "6379"
command: ["/bin/bash","/workdir/redis.sh"] redis-slave:
image: redis
container_name: redis-slave
stdin_open: true
tty: true
depends_on:
- redis-master
networks:
redis:
ipv4_address: 172.20.0.3
volumes:
- "/workdir:/workdir"
expose:
- "6379"
command: ["/bin/bash","/workdir/redis.sh"] networks:
redis:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.20.0.0/16

  执行编排文件。

# docker-compose up -d
Creating network "docker-compose_redis" with driver "bridge"
Creating redis-master ... done
Creating redis-slave ... done
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f586ac5a1b8 redis "/bin/bash /workdir/…" 11 seconds ago Up 10 seconds 6379/tcp redis-slave
354d20e933bf redis "/bin/bash /workdir/…" 11 seconds ago Up 10 seconds 6379/tcp redis-master

  备注:

  1.如果在编排文件测试的过程中遇到error等错误,经重新编写后不能马上执行docker-compose up -d执行编排任务。因为之前的命令中很可能已经创建了指定的容器或网络等。需要执行 docker-compose down先停掉编排任务再执行 docker-compose up -d执行编排任务。

  2.写编排文件的时候曾经踩了一个大坑,容器建立完后使用bash脚本启动主、从redis服务时曾经尝试公用一个配置文件来启动。后来一台启动成功一台启动不成功。经过docker logs redis-slave查看日志后发现是

':C 15 Dec 09:43:39.423 # Fatal error, can't open config file '/workdir/docker-compose/redis-master.conf

  经过测试发现当一个redis服务通过一个配置文件启动后会把该配置文件的权限修改并且在服务执行的过程中会主动根据环境配置(如:哨兵或客户端设置环境变量时)的变动修改配置文件的值。所以两个redis服务不能共用一个配置文件,需要独立拥有自己的配置文件。

  3.根据上面的道理,在容器的使用过程中,不同容器尽量不要共用同一个文件或脚本,尽量分开使用,尽管使用的脚本内容一样也不要自己去跳这些坑。

docker-compose编排项目redis容器实现主从复制的更多相关文章

  1. Docker Compose部署项目到容器-基于Tomcat和mysql的项目yml配置文件代码

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  2. Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  3. 使用Docker compose编排Laravel应用

    前言 Laravel官方开发环境推荐的是Homestead(其实就是一个封装好的Vagrant box),我感觉这个比较重,于是自己用Docker compose编排了一套开发环境,在这里分享下. 环 ...

  4. 使用docker compose编排容器

    一.安装docker compose 二进制包安装 1.安装 Docker Compose 从 官方 GitHub Release 处直接下载编译好的二进制文件即可 # curl -L https:/ ...

  5. docker之compose 编排项目

    一.docker-compose 的介绍 docker-compose是一种容器编排工具,可以将多个docker容器关联部署.通过yaml文件,可以描述应用的架构,如使用什么镜像.数据卷.网络.绑定服 ...

  6. Docker(二十六)-Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...

  7. Docker系列之(五):使用Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...

  8. docker compose 编排

    Compose是Docker的服务编排工具,主要用来构建基于Docker的复杂应用,Compose 通过一个配置文件来管理多个Docker容器,非常适合组合使用多个容器进行开发的场景. 说明:Comp ...

  9. 使用Docker Compose编排Spring Cloud微服务

    文章目录 微服务构建实例 简化Compose的编写 编排高可用的Eureka Server 编排高可用Spring Cloud微服务集群及动态伸缩 微服务项目名称 项目微服务中的角色 microser ...

随机推荐

  1. IDEA激活码(2019)

    如您激活出现问题,请点击这里加入:软件激活问题解决群 前言 IDEA已然成为我最热爱的一款编辑器,作为一个从Eclipse阵营转过来的coder,确实能感受到IDEA的强大,而我电脑桌面的Eclips ...

  2. Linux查看系统、核数、CPU、位数

    查看系统: cat /etc/os-release 结果为 centOS Linux 7 查看核数和CPU: lscpu 40 个核,处理器为 Intel(R) Xeon(R) CPU E7-8891 ...

  3. Scala安装教程

    首先去Java官网下载Java的安装包 jdk-8u121-windows-x64.exe 再去Scala官网下载Scala的安装包 Scala2.12.1 安装Java: 配置Java环境变量(系统 ...

  4. Ocelot统一权限验证

    Ocelot作为网关,可以用来作统一验证,接上一篇博客,我们继续 前一篇,我们创建了OcelotGateway网关项目,DemoAAPI项目,DemoBAPI项目,为了验证用户并分发Token,现在还 ...

  5. 【朝花夕拾】Android编码风格篇

    结合51CTO学院中张凌华老师讲的编码风格课程,对自己平时工作中的形成的一些编码风格做一些总结. 一. 项目开发目录命名: Requirement - 需求相关文档 Design - 设计 Plann ...

  6. Python:Selenium 1:浏览器驱动

    Selenium是一个用于测试网站的自动化测试工具,爬虫中也经常用到,支持各种浏览器包括Chrome.Firefox.Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器. 自Web ...

  7. RSA签名的PSS模式

    本文由云+社区发表 作者:mariolu 一.什么是PSS模式? 1.1.两种签名方式之一RSA-PSS PSS (Probabilistic Signature Scheme)私钥签名流程的一种填充 ...

  8. mysqladmin实用工具

    mysqladmin命令行实用工具是命令行工具套件中的重量级工具.这个工具可以执行很多选项和工具(被称为命令). 因为这个实用工具是从命令行启动运行的,它使得管理员可以编写一系列操作脚本,这比直接运行 ...

  9. .Net Core SDK 命令介绍

    前言 本篇主要介绍 asp.net core 中,使用 dotnet tools 运行 dotnet run 之后的系统执行过程. 如果你觉得对你有帮助的话,不妨点个[推荐]. 目录 dotnet r ...

  10. Spark框架详解

    一.引言 作者:Albert陈凯链接:https://www.jianshu.com/p/f3181afec605來源:简书 Introduction 本文主要讨论 Apache Spark 的设计与 ...