docker-compose

一、简介

1、简述

①Docker Compose是一个能一次性定义和管理多个Docker容器的工具

②Compose中定义和启动的每一个容器都相当于一个服务(service)

③Compose中能定义和启动多个服务,且它们之间通常具有协同关系

④使用YAML文件来配置我们应用程序的服务

⑤使用单个命令(docker-compose up),就可以创建并启动配置文件中配置的所有服务

2、Docker Compose工作原理

3、Docker Compose安装

①Docker for Mac与Docker for Windows自带docker-compose

②Linux下需要单独安装

③下载:sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

④换国内源下载:sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose

⑤授权:sudo chmod +x /usr/local/bin/docker-compose

⑥查看版本:docker-compose --version

4、Docker Compose CLI

①查看帮助:docker-compose --help

②对比后会发现Docker Compose CLI的很多命令的功能和Docker Client CLI是相似的,最主要的区别就是前者能一次性运行管理多个容器,后者只能一次管理一个

二、了解Docker Compose File

1、Docker Compose File版本

①Docker Compose File有多个版本,基本是向后兼容的,但也有极个别配置项高版本中没有

②在docker-compose.yml一开始就需要利用version关键词标明当前file使用的版本

2、Docker Compose File TOP配置参数

①version:指定Docker Compose File版本号,有1,2,3版本,目前都用"3"

②services:定义多个服务并配置启动参数,一个service代表一个container,这个container可以从dockerhub的image来创建,或者从本地dockerfilebuild的image来创建,service的启动类似docker run,可以指定network和volume,可以给所有servier指定network和volume

③volumes:声明或创建在多个服务中共同使用的数据卷对象

④networks:定义在多个服务中共同使用的网络对象

⑤configs:声明将在本服务中要使用的一些配置文件

⑥secrets:声明将在本服务中要使用的一些秘钥、密码文件

⑦x-***:自定义配置,主要用于复用相同的配置

3、docker-compose命令

①docker-compose up:会自动搜索当前路径下的docker-compose.yml文件启动

②docker-compose -f 指定文件 up:指定docker-compose.yml文件启动

③docker-compose up -d:后台执行,一般看日志输出,不用这个

④docker-compose stop:停止,不会删除容器和镜像

⑤docker-compose down:停止,并删除关联的容器

⑥docker-compose start:启动yml文件管理的容器

⑦docker-compose ps:查看正在运行的容器

⑧docker-compose images:查看docker-compose管理的容器

⑨docker-compose exec yml文件中写的service /bin/bash:进入到容器内

4、docker-compose示例

services:
  db:
    image: mysql:5.7
    volumes:
      - "db-data:/var/lib/mysql"
    networks:
      - my-bridge

# 等同于:docker run -d --network my-bridge -v db-data"/var/lib/mysql mysql:5.7

三、Docker Compose部署应用

1、使用Docker Compose部署一个wordpress

①编写docker-compose.yml文件

version: '3'
services:
  wordpress:
    image: wordpress
    ports:
      - 8080:80
    depends_on:
      - mysql
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: root
    networks:
      - my-bridge

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - my-bridge

volumes:
  mysql-data:

networks:
  my-bridge:
    driver: bridge

②启动:docker-compose up

2、使用Docker Compose搭建flask小型web服务项目

①编写dDockerfile文件

FROM python:3.6
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]

②编写docker-compose.yml文件

version: "3"

services:

  redis:
    image: redis

  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - 8080:5000
    environment:
      REDIS_HOST: redis

③编写app.py

from flask import Flask
from redis import Redis
import os
import socket

app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)


@app.route('/')
def hello():
    redis.incr('hits')
    return '你好! 查看 %s 次, hostname 是 %s.\n' % (redis.get('hits'),socket.gethostname())


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)

④启动:docker-compose up

3、水平拓展

①把flask_redis项目扩展成三个

②查看帮助:docker-compose up --help

③scale SERVICE=NUM设置成三个:docker-compose up --scale web=3 => 直接执行会有问题,因为8080端口已经被映射了

④删除原来的docker-compose.yml中的ports

⑤app.py改成监听的端口为80

⑥Dockerfile不需要改

⑦增加一个负载均衡器HAProxy(类似于Nginx的作用)

⑧修改docker-compose.yml文件

version: "3"

services:

  redis:
    image: redis

  web:
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      REDIS_HOST: redis

  lb:
    image: dockercloud/haproxy
    links:
      - web
    ports:
      - 8080:80
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 

⑨把web扩展为3个启动:docker-compose up --scale web=3 -d

⑩把web减少到1个启动:docker-compose up --scale web=1 -d

4、使用Docker-compose部署一个复杂的应用:http://liuqingzheng.top/linux/Docker/10-Docker之Docker-Compose/

5、pycharm远程连接Docker开发:http://liuqingzheng.top/linux/Docker/12-pycharm远程连接Docker开发/

posted @ 2020-09-13 18:03  专业搬砖人士  阅读(712)  评论(0)    收藏  举报