docker-compose的项目部署

一. 简介

docker-compose是一个容器编排的工具,可以使用一个yaml/yml配置文件进行应用服务的配置,然后用个简单的命令创建并启动服务
使用docker-compose基于以下三个步骤:

  • 用Dockerfile定义一个应用环境,以让它在任何地方都可以使用
  • 在docker-compose.yml中定义这些服务,让这些服务能同时在一个独立的环境运行
  • 执行命令docker-compose up ,compose会开始并运行所定义的服务

二.安装

linux环境
1.执行命令下载最新的dockerc-compose版本

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

2.为docker-compose添加权限

sudo chmod +x /usr/local/bin/docker-compose

其他环境:
点击跳转

三.docker-compose.yml简述

docker-compose需要定义一个docker-compose.yml文件,在该文件中自定义服务。
docker-compose.yml主要分为如下三个部分(还有其他部分在本教程中不会用到)

  • version: 描述当前docker-compose.yml的版本号,目前官方版本号是3
  • services: 这是配置中最重要,也是最难的一部分,在这里可以自定义一个或多个服务
  • networks: 定义使用的网络

关于docker-compose.yml的其他详细配置移步官方文档

四.使用

先看一个简单的docker-compose.yml的demo

version: '3'
services:
  proxy:
    image: nginx
    container_name: my_nginx
    networks:
      - demo_net
    ports:
      - 80:80
      - 443:443
networks: 
  demo_net:
    external: false

1.在该docker-compose.yml文件所在的路径执行docker-compose up
2.在浏览器访问localhost,可以发现已经可以正常访问nginx的welcome页面

文件讲解:主要说下servcies里面的几个含义
proxy: 表示这个service的名称
images: 表示这个service所使用的image,如果有自己的镜像仓库,这里也可以填仓库镜像所在的url
container_name: 表示compose启动一个container的命名
networks: 该service加入的某个网络
ports: container所对外开放的端口映射

所有基于docker-compose的基础使用都可以基于这个demo进行改造。

五.高级用法

参考我在github.com上的docker-compose-demo
以下的讲解都是基于该项目的思想

  1. 在实际投入使用的时候,不会只有一个docker-compose.yml进行配置,而是参考官方给出的建议,进行extend services in compose,意思就是定义一个基础的yaml/yml,然后再根据不同的环境(dev/pro)进行不同的配置,然后在不同的环境启动不同配置的服务。
  2. 对于dev环境,由于dev环境需要不断的进行重新发布,所以我们在dev.yml中直接将文件挂在到容器内部,这样方便进行开发。
  3. 对于pro环境,参考官方建议,我们需要去掉dev环境中挂载的文件并打包到image中,并标记不同版本的tag,放到自己的私有仓库上,以便这次发布有重大bug时做到及时的回滚。所以我们在pro.yml中使用Dockerfile进行镜像的build,而这些Dockerfile都是将dev挂载的文件打包到了image中。
  4. 无论在dev/pro环境,都应将restart置为always,为此我们还需要container的healthcheck,所以在docker-compose.yml中为每一个service都设置了healthcheck。
  5. 其他详细信息移步docker-compose的repo

推荐阅读更多精彩内容