zoukankan      html  css  js  c++  java
  • 使用Docker-compose编排容器

      在《Docker学习实践》中,我们使用了5个容器,3个使用已有镜像,两个使用的dockerfile构建的镜像,一个个启动很麻烦。今天我们使用Docker集群管理三剑客之一的Docker-compose来编排容器。

      Compose是Docker集群管理的工具。你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,它会自动解析容器依赖关系,下载镜像,启动应用。

    安装Docker和Compose

    # 安装docker
    yum install docker -y
    
    # 安装compose
    yum install python-pip -y
    pip install -U docker-compose

    使用compose

    我们还是部署django应用,把之前的命令拿过来

    # mx_mysql
    docker run -d -p 3306:3306 --name mx_mysql -v $PWD/conf/:/etc/mysql/conf.d -v $PWD/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6
    
    # mx_redis
    docker run -d -p 6379:6379 -v $PWD/data/redis:/data --name mx_redis redis:3.2 redis-server --appendonly yes
    
    # mx_nginx
    docker run -p 80:80 --name mx_nginx -v $PWD/online/conf/mx_nginx.conf:/etc/nginx/conf.d/mx_nginx.conf --volumes-from mx_online -d nginx
    
    # mx_online
    docker run -d -p 8000:8000 -v /root/online:/online --name mx_online django uwsgi --http :8000 -w online.wsgi -p 3
    
    # mx_celery
    docker run -d -v /root/online:/online --name mx_celery --link mx_mysql:mysql --link mx_redis:redis django celery -A online worker -l info 

    Dockerfile文件还是原来的不变。

    首先,要将上面的命令转换成docker-compose.yml文件

    yaml文件语法:

    image 使用的镜像
    build 指定Dockerfile构建
    command 启动执行命令
    links 链接其他容器    
    ports 端口映射
    expose 暴露端口
    volumes 挂载路径
    volumes_from 从容器挂载
    environment 环境变量

    很容易就能转换过来。

    mx_mysql:
      restart: always
      image: mysql:5.6
      volumes:
        - /root/data/mysql:/var/lib/mysql
        - ./conf/:/etc/mysql/conf.d
      ports:
        - "3306:3306"
      environment:
        - MYSQL_DATABASE=online
        - MYSQL_ROOT_PASSWORD=123456
      
    mx_redis:
      restart: always
      image: redis:3.2
      volumes:
        - /root/data/redis:/data
      ports:
        - "6379:6379"
      command: redis-server --appendonly yes
    
    mx_nginx:
      restart: always
      image: nginx
      ports:
        - "80:80"
      volumes:
        - ./conf/mx_nginx.conf:/etc/nginx/conf.d/mx_nginx.conf
      volumes_from:
        - mx_online
      links:
        - mx_online:web
    
    mx_online:
      restart: always
      build: .
      expose:
        - "8000:8000"
      volumes:
        - .:/online
      links:
        - mx_mysql:mysql
        - mx_redis:redis
      command: uwsgi -s :8000 -w online.wsgi -p 3
    
    mx_celery:
      restart: always
      build: .
      volumes_from:
        - mx_online
      links:
        - mx_mysql:mysql
        - mx_redis:redis
      command: celery -A online worker -l info

    开始是容器名称,下面是容器配置,注意空两格,使用短线再空一格。这样就组成了应用的完整配置。目录结构:

    下一步,就是执行docker-compose up -d启动应用。先下载镜像:

    创建容器:

    使用docker-compose ps 查看容器:

    访问ip地址,显示503,说明我们基本部署成功了,只是建数据库,没有建表。下面创建表:

    docker-compose exec mx_online /usr/local/bin/python manage.py makemigrations
    docker-compose exec mx_online /usr/local/bin/python manage.py migrate

    成功就可以正常访问了。现在我们的应用完全可以一键启动了。

    下面学习一下compose命令:

    build 构建或重建服务
    help 命令帮助
    kill 杀掉容器
    logs 显示容器的输出内容
    port 打印绑定的开放端口
    ps 显示容器
    pull 拉取服务镜像
    restart 重启服务
    rm 删除停止的容器
    run 运行一个一次性命令
    scale 设置服务的容器数目
    start 开启服务
    stop 停止服务
    up 创建并启动容器

    我们要使用的是docker-compose up -d启动应用。

     docker-compose run 会再起一个新容器,要注意删除,使用docker-compose rm:

     重启,使用docker-compose restart:

    注意这是容器名,可以用docker命令操作,单个操作。这个是服务名,使用docker-compose命令操作,多个一起操作。例如:

     

     其他以后再试

  • 相关阅读:
    门面模式 Facade
    适配器模式 Adapter
    建造者模式 Builder Mode
    原型模式 ProtoType
    抽象工厂模式 Abstract Factory
    工厂方法模式 Factory Method
    简单工厂模式 SimpleFactory
    java设计模式之代理设计模式(Proxy)
    java工厂设计模式初步
    java中的接口概念
  • 原文地址:https://www.cnblogs.com/wj5633/p/6707012.html
Copyright © 2011-2022 走看看