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

     

  • 相关阅读:
    Java的Socket通信----通过 Socket 实现 TCP 编程之多线程demo(2)
    MySQL 数据备份与还原
    java实现时钟方法汇总
    java实现二叉树demo
    java实现心型、99乘法demo
    显示本月日历demo
    打开图片并显示在面板上demo
    ArraySort--冒泡排序、选择排序、插入排序工具类demo
    类的实例化顺序
    StringsUtil字符串工具类---灵活截取
  • 原文地址:https://www.cnblogs.com/james-23/p/13668448.html
Copyright © 2011-2022 走看看