Docker Compose简单概述

Docker Compose简单概述

  • 多容器的APP太繁琐:
    • 要从Dockerfile build image或者Dockerhub 拉取image。
    • 要创建多个container。
    • 要管理这些container(启动停止删除)
  • 通过之前说的使用Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

一、Docker Compose概念:

  • Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)
  • Docker Compose是一个命令行工具
  • 这个工具可以通过一个yml文件定义多容器的docker应用
  • 通过一条命令就可以根据yml文件的定义去创建或者管理这多个容器
    • 启动
    • 删除
    • 停止等

二、docker-compose.yml文件:

  • 三大概念

    • 1.Services

      • 一个Services代表一个container,这个container可以从dockerhub的Image来创建(也就是docker pull image),或者从本地的Dockerfile build出来的Image来创建。(也就是Dockerfile文件第一行[FROM xxx:xxx])

      • Service的启动类似docker run, 我们可以给其指定network(--network)和volume(-v),所以可以给service指定network和Volumed的引用。

      • 举个列子:

        services:
        	db:  # services的名字叫db 
        		image: postgres:9.4  # 这个image是从docker hub上面拉取下来的
        		volumes: # 映射了db-data 再本地
        			-"db-data:/var/lib/postgresql/data"
        		networks:
        			- back-tier
        
        services:
        	worker: # container 名字
        		build: ./worker  # 这个image 是从本地build的 ./ 当前目录Dockerfile
        		links:
        			-db
        			-redis
        		network:
        			-back-tier
        		
        
    • 2.Networks

      services:
      	worker:
      		build: ./worker
      		links:
      			-db
      			-redis
      		networks:
      			-back-tier          #相当于再networks: back-tier: driver:bridge 创建网络
      							  # 命令相当于 docker network create -d bridege back-tier
      
    • 3.Volumes

      services:
      	db:
      		image:postgres:9.4
      		volumes:
      			-"db-data:/var/lib/postgresql/data"  # 会在文件同级创建volumes: 名字db-data
      									# 命令相当于:docker volume create db-data
      		networks:
      			- back-tier
      
  • 看一下栗子:

    version: '3'  # 代表的是该docker-compose.yml 版本是3
    
    # 第一部分
    services:   # 有俩个services :1.wordpress 跟mysql
    
      wordpress:
        image: wordpress  # docjer pull wordpress 从docker hub 上面拉取下来的
        ports:
          - 8080:80   #  端口的映射 把80端口映射到本地的8080 
        environment:  # 相当于-e 的参数, 传递环境变量
          WORDPRESS_DB_HOST: mysql
          WORDPRESS_DB_PASSWORD: root
        networks:  # 指定该容器连接的网络是my-bridge
          - my-bridge
    
      mysql:
        image: mysql
        environment:
          MYSQL_ROOT_PASSWORD: root
          MYSQL_DATABASE: wordpress
        volumes: # 再下面的volumes 创建的
          - mysql-data:/var/lib/mysql
        networks:
          - my-bridge
    
    # 第二部分
    volumes:  # 创建volumes 名字叫做mysql-data
      mysql-data:
    
    # 第三部分:
    networks:  # 创建networks 名字是my-bridge 
      my-bridge:
        driver: bridge
    

三、docker-compose的安装和基本使用:

  • 1:安装Linux版本的docker-compose:

    • sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    • 将文件安装到了/usr/local/bin/docker-compose 目录中
  • 2:给docker-compose 执行权限:

    • chmod +rx /usr/local/bin/docker-compose
  • 3:查看是否安装成功:

    • docker-compose --version

    • 如果提示:

      [root@localhost ~]# docker-compose --version
      [21308] Cannot open self /usr/local/bin/docker-compose or archive /usr/local/bin/docker-compose.pkg   # 报错信息
      
    • 解决方法:

      • 重新执行sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 这个命令就好,或者看chmod是否给它执行的权限。
    • 如果提示:

      [root@localhost ~]# docker-compose --version
      docker-compose version 1.23.2, build 1110ad01  # 说明docker-compose 安装成功
      

四、docker-compose基本命令:

  • 1:启动并且后台运行docker-compose:

    • docker-compose up -d
  • 2:停止docker-compose:

    • docker-compose donw
  • 3:查看docker-compose启动的容器:

    • docker-compose ps
  • 4:水平扩展docker-compose容器:

    • docker-compose up --scale web=3 -d
    • web=3:意思就是启动3个相同的容器(注意端口被占用的问题,如果被占用修改Dockerfile 跟docker-compose.yml 把指定端口删掉)
  • 5.构建(重新构建)项目中的服务容器 :

    • docker-compose build

    • 选项包括:

      • --force-rm 删除构建过程中的临时容器。
      • --no-cache 构建镜像过程中不使用 cache(这将加长构建过程)。
      • --pull 始终尝试通过 pull 来获取更新版本的镜像。

猜你喜欢

转载自blog.csdn.net/Fe_cow/article/details/86436279