zoukankan      html  css  js  c++  java
  • Docker-compose

    准备工作:安装docker

    同基础上

    Docker Compose


    Docker-Compose(优缺点) Docker-Compose 是用来管理你的容器的,有点像一个容器的管家,想象一下当你的Docker中有成百上千的容器需要启动,如果一个一个的启动那得多费时间。有了Docker-Compose你只需要编写一个文件,在这个文件里面声明好要启动的容器,配置一些参数,执行一下这个文件,Docker就会按照你声明的配置去把所有的容器启动起来,但是Docker-Compose只能管理当前主机上的Docker,也就是说不能去启动其他主机上的Docker容器docker compose 来轻松高效管理容器。定义运行多个容器。

    作用:批量容器编排。

    compose是官方的开源项目,需要安装!

    Compose :重要的概念

    • 服务services,容器,应用,(web/redis/mys,,)

    • 项目 project。 一组关联的容器,博客,web,mysql,wp。

       

    安装compose

    1、下载

    #官网
    curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

    #这个可能会快点??
    curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > usr/local/bin/docker-compose    

    image-20200914143537857

    2、安装成功

    image-20200914143742812

    多看官网!!

    3、体验

    地址:https://docs.docker.com/compose/gettingstarted/

    通过Docker Compose上构建一个简单的Python web应用程序,使用Flask框架并在Redis中维护一个计数器,用来记录改web应用被访问的次数。

    1、准备工作

    yum -y install python-pip  #pip是Python 包管理工具
    yum -y install epel-release #报错执行安装依赖

    2、为项目创建目录

    mkdir composetest
    cd -

    3、在项目目录中创建一个名为app.py

    import time

    import redis
    from flask import Flask

    app = Flask(__name__)
    cache = redis.Redis(host='redis', port=6379)


    def get_hit_count():
      retries = 5
       while True:
          try:
              return cache.incr('hits')
          except redis.exceptions.ConnectionError as exc:
               if retries == 0:
                  raise exc
              retries -= 1
              time.sleep(0.5)


    @app.route('/')
    def hello():
      count = get_hit_count()
      return 'Hello World! I have been seen {} times. '.format(count)

    4、在项目目录中创建另一个名为requirements.txt的文件

    flask
    redis

    5、在项目目录中,创建名为Dockerfile的文件:

    FROM python:3.7-alpine
    WORKDIR /code
    ENV FLASK_APP app.py
    ENV FLASK_RUN_HOST 0.0.0.0
    RUN apk add --no-cache gcc musl-dev linux-headers
    COPY requirements.txt requirements.txt
    RUN pip install -r requirements.txt
    EXPOSE 5000
    COPY . .
    CMD ["flask", "run"]  # CMD ["python", "app.py"]
    #从Python 3.7映像开始构建映像。
    #将工作目录设置为/code。
    #设置flask命令使用的环境变量。
    #安装gcc和其他依赖项
    #复制requirements.txt并安装Python依赖项。
    #向图像添加元数据以描述容器正在侦听端口5000
    #将.项目中的当前目录复制到.映像中的工作目录。
    #将容器的默认命令设置为flask run。

    6、在项目目录中创建一个名为docker-compose.yml的文件:

    #定义了两个服务:web和redis
    version: '3'
    services:
    web:
      build: .
      ports:
         - "5000:5000"
    redis:
      image: "redis:alpine"  

    大概流程:

    1. 应用 app.py

    2. Dockerfile 将应用打包为镜像

    3. Docker-compose yaml 文件(定义整个服务,需要的一些环境。web/redis)完整的上线服务

    4. 启动 compose 项目 (docker-compose up)

    流程:

    1. 创建网络

    2. 执行 Docker-compose yaml

    3. 启动服务:(很慢)

      • Creating composetest_redis_1 ... done Creating composetest_web_1 ... done

    • 文件名 composetest

      version: '3'
      services:
      web:
        build: .
        ports:
           - "5000:5000"
      redis:
        image: "redis:alpine"  

      自动默认规则

     

    测试成功!

    [root@localhost ~]# docker ps
    CONTAINER ID       IMAGE               COMMAND                 CREATED             STATUS             PORTS                               NAMES
    188f23975dd3       composetest_web     "flask run"              58 minutes ago     Up 2 minutes        0.0.0.0:5000->5000/tcp             composetest_web_1
    8fe4249f2093       redis:alpine        "docker-entrypoint.s…"   58 minutes ago     Up 2 minutes        6379/tcp                           composetest_redis_1  
    [root@localhost ~]# curl localhost:5000
    Hello World! I have been seen 5 times.
    [root@localhost ~]# curl localhost:5000
    Hello World! I have been seen 6 times.
    [root@localhost ~]# curl localhost:5000
    Hello World! I have been seen 7 times.
    [root@localhost ~]# docker service ls
    Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

    默认的服务名 文件名-服务名-num

    多个服务器 集群 A B _num 副本数量

    服务redis服务=>4个副本

    集群状态,弹性、HA 高并发 (kubetctl service 负载均衡)

    网络规则:

    image-20200914180730434

    10个服务=》项目 (项目中的内容都在同一个网络下,域名访问 )

    image-20200914181146729

     

    image-20200914181018123

    如果在同一网络下,可以通过域名来访问。HA!

    停止:docker-compose down(在对应的文件下) 或者: Ctrl+C

    image-20200914181527305

    Docker-Compose

    以前都是单个docker run 启动容器

    docker-compose、通过docker-compose编写yaml配置文件、可以通过compose一键启动所有服务,停止!

     

    Docker小结:

    1. Docker镜像,run=》容器

    2. Dockerfile构建镜像 (服务打包)

    3. Docker-Compose启动项目(编排、多个微服务/环境)

    4. Docker网络!

    5.  

    Yaml规则:


    docker-compose.yaml 核心

    官方文档地址:https://docs.docker.com/compose/compose-file

    # 3层
    version:      #版本   1   向下兼容
    services:     #服务   2
      服务1: web
      #服务配置
      images
      build
      network
      ....
      服务2:Redis
      ...
    #其他配置 网络/卷、全局规则 3
    networks
    vloume
    configs
    ......

    image-20200914182518131

    多写,多练,多看,compose.yaml文件!官方文档 、开源项目。

     

    开源项目(博客)


    下载程序、安装数据库、配置......

    compose 应用=>一键启动!

    1. 下载项目(docker-compose.yaml)

    2. 如果需要文件。Dockerfile

    3. 文件准备齐全(直接一键启动项目)

    # 1、创建一个空的项目目录my_wordpress,并进入目录;
    [root@localhost home]# mkdir my_wordpress
    [root@localhost home]# cd my_wordpress
    # 2、创建一个docker-compose.yml文件来启动您的 WordPress博客,并创建一个单独的MySQL实例,该实例具有用于数据持久性的卷挂载:
    version: '3.3'

    services:
      db:
        image: mysql:5.7
        volumes:
          - db_data:/var/lib/mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: somewordpress
          MYSQL_DATABASE: wordpress
          MYSQL_USER: wordpress
          MYSQL_PASSWORD: wordpress

      wordpress:
        depends_on:
          - db
        image: wordpress:latest
        ports:
          - "8000:80"
        restart: always
        environment:
          WORDPRESS_DB_HOST: db:3306
          WORDPRESS_DB_USER: wordpress
          WORDPRESS_DB_PASSWORD: wordpress
          WORDPRESS_DB_NAME: wordpress
    volumes:
      db_data: {}
    #Docker卷db_data将WordPress所做的所有更新持久化到数据库。WordPress Multisite仅适用于port 80和443。
    3、启动docker-compose up
    [root@localhost my_wordpress]# docker-compose up
    Status: Downloaded newer image for wordpress:latest
    Creating my_wordpress_db_1 ... done
    Creating my_wordpress_wordpress_1 ... done
    Attaching to my_wordpress_db_1, my_wordpress_wordpress_1
    [root@localhost composetest]# docker ps
    CONTAINER ID       IMAGE               COMMAND                 CREATED             STATUS             PORTS                               NAMES
    6d0cc0d74fd6       wordpress:latest    "docker-entrypoint.s…"   31 seconds ago     Up 30 seconds       0.0.0.0:8000->80/tcp               my_wordpress_wordpress_1
    cc754e2eae77       mysql:5.7           "docker-entrypoint.s…"   32 seconds ago     Up 31 seconds       3306/tcp, 33060/tcp                 my_wordpress_db_1
    a86d12bfa37e       mysql:5.7           "docker-entrypoint.s…"   3 days ago         Up 3 days           0.0.0.0:3306->3306/tcp, 33060/tcp   dq-mysql

    image-20200914184345553

     

    前台启动 : docker -d 、docker-compose up -d

    [root@localhost my_wordpress]# docker-compose up -d
    Starting my_wordpress_db_1 ... done
    Starting my_wordpress_wordpress_1 ... done

     

  • 相关阅读:
    Visifire正式版(v1.1)发布
    [转]PSP机能强大!已能模拟运行WINDOWS系统?
    在Silverlight+WCF中应用以角色为基础的安全模式(一)基础篇之角色为基础的安全模式简介 Virus
    C#的加密解密算法,包括Silverlight的MD5算法 Virus
    MMORPG programming in Silverlight Tutorial (10)Implement the sprite’s 2D animation (Part IV)
    Game Script: Rescue Bill Gates
    MMORPG programming in Silverlight Tutorial (9)KeyFrame Animation
    MMORPG programming in Silverlight Tutorial (5)Implement the sprite’s 2D animation (Part II)
    MMORPG programming in Silverlight Tutorial (7)Perfect animation
    MMORPG programming in Silverlight Tutorial (3)Animate the object (Part III)
  • 原文地址:https://www.cnblogs.com/james-23/p/13668448.html
Copyright © 2011-2022 走看看