使用docker-compose来部署开发环境

docker-compose的作用

docker-comopse可以帮助我们快速搭建起开发环境,比如你可以去把redis,mongodb,rabbitmq,mysql,eureka,configserver等一次部署在本机,然后让它们做为其它项目的基础,这是可以实现的。

由于每个docker实例都是一个封闭的环境,所以默认情况下它们是不能共享的,即你的rabbit容器不能连接你的redis容器,你的configserver不能连接你的eureka容器,如果希望让它们之间进行数据通讯,需要设置links属性来实现,而在本机(宿主机)上进行连接时,使用localhost和端口是可以访问这些容器的,这个我们要清楚。

启动顺序-depends_on

而对于启动顺序来说,比如你的configserver依赖于eureka,希望先启动被依赖的容器,再运行自己,这时我们可以使用depends_on属性来实现,当然它也只是启动顺序,不能保证服务真的越来后再去启动另一个,解决的方法是使用失败重试机制restart: on-failure,当configserver失败后,你可以重启,直到成功为止(主是直到eureka启动越来为止)。

容器与容器之间要用服务名通讯

如果我们的具体项目也希望部署到docker-compose里,希望去访问其它的服务,这时,需要使用docker-compose里定义的服务名称,而不是localhost,因为当你的容器起来之后,它的localhost是自己的容器,而不是宿主机,反之在宿主机上,如果希望访问容器,可以使用localhost,这一点在前文中已经提到。

下面是我写的一个部署开发环境的例子

version: "3.3"
services:

  # 公用组件相关配置
  mongodb:
    image: mongo:3.4.10
    ports:
      - "27017:27017"
    networks:
      - dev
    volumes:
      - mongo_data:/data/db
 
  redis:
    image: redis:3.2-alpine
    networks:
      - dev
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
 
  rabbit:
    image: rabbitmq:3.6.10-management-alpine
    hostname: rabbit
    ports:
      - "5672:5672"
      - "15672:15672"
      - "61613:61613"
    networks:
      - dev
    environment:
      RABBITMQ_DEFAULT_VHOST: pilipa
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq
  
  eurekaserver:
    build: ./springcloud/eureka-server
    restart: on-failure
    ports:
      - "8761:8761"
      - "8762:8762"
    networks:
      - dev
 
  configserver:
      build: ./springcloud/config-server
      restart: on-failure
      ports:
        - "8888:8888"
        - "8889:8889"
      networks:
        - dev
      depends_on:
        - eurekaserver #依赖服务
      links:
        - eurekaserver
      environment:
        SPRING_PROFILES_ACTIVE: devops
      volumes:
        - /Users/lind.zhang/project/config-repo:/config_repo #前面是本地路径,后而是容器里的路径,在configserver里配置的是后面的容器路径

启动与更新

  1. 先打镜像
docker-compose build
  1. 再启动服务
docker-compose up -d #-d是后台运行
  1. 停止服务
docker-compose down
  1. 查看容器的日志
docker logs -f 容器ID

希望本文章对各位学者有所帮助!

posted @ 2018-11-03 16:03  张占岭  阅读(1374)  评论(1编辑  收藏  举报