Docker 容器编排 Docker Compose

容器编排是什么

应用一般由单独容器化的组件组成,须按照一定顺序在网络级别进行组织,以使其能够按照计划运行,这种对多个容器进行组织的流程称为容器编排,它主要是对容器之间的依赖关系进行编排

Docker-compose

docker官方提供的工具,强调单机多容器的编排,能力相对有限,只能在一台宿主机上对容器编排,对于大规模集群环境中,多台机器无法支持,在windows, mac 安装完docker后默认提供docker-compose,但是在windows server , Linux中默认是不提供的,需要自行安装

示例场景

在一个简单的应用部署中,如图

此处输入图片的描述

需要用到 nginx , tomcat , mysql 三个组件,而且这每个组件在部署的时候是有依赖关系的,比如要先有mysql,因为tomcat中的应用需要使用到mysql,最后需要安装nginx,对tocmcat做负载均衡实现集群

顺序如下:mysql -> tomcat -> nginx

如果是人工处理的话,虽然简单,但是需要花费长时间, 现在有了docker-compose,就可以对容器进行编排,通过一个yml文件来维护容器编排的逻辑,再通过docker-compose命令对配置文件进行编译解析,就可以实现一个应用的部署

接下来我们使用docker-compose 部署一个开源博客wordpress

示例一 搭建wordpress开源博客

整个过程比较简单

安装docker-compose

  • 获取并自动安装docker-comppose
    sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    默认安装目录是/usr/local/bin/docker-compose

  • 文件夹授权
    sudo chmod +x /usr/local/bin/docker-compose

    因为要连接国外网站,下载会很慢,可能会被拒绝,多试几次就好

  • 查看安装的版本
    docker-compose -version

此处输入图片的描述

安装部署开源博客wordpress

创建目录mkdir -p /usr/local/docker/wordpress

  • 编写docker-compose 配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    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-compose up -d

    • up 解析执行
    • -d 后台运行

此处输入图片的描述

  • 执行过程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Creating network "wordpress_default" with the default driver
    Creating volume "wordpress_db_data" with default driver
    Pulling db (mysql:5.7)...
    5.7: Pulling from library/mysql
    ......
    Status: Downloaded newer image for mysql:5.7
    Pulling wordpress (wordpress:latest)...
    latest: Pulling from library/wordpress
    ......
    Creating wordpress_db_1 ... done
    Recreating wordpress_wordpress_1 ... done
  • 查看创建的应用
    docker ps
    此处输入图片的描述
    wordpress_wordpress_1 博客的web应用
    wordpress_db_1 博客的mysql5.7容器

初始化wordpress

从上面进程看到WEB应用对外暴露的是8000端口
http://宿主机ip:8000 对博客进行一下初始化
此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

此处输入图片的描述

到这里都是个应用上的一些流程,有兴趣的可以体验一下这个博客,很不错的

成果展示

到这里我们已经完成了开源博客的部署, 整个过程很简单,整个过程是由docker-compose 这个容器编排工具完成的,通过一个yml配置文件 ,就完成了一个应用的部署,很大节省了运维人员工作量,整个应用的维护,只需要一个yml配置文件