使用docker-compose搭建可以扩展的Web Application

使用docker-compose搭建可以扩展的Web Application

  • 使用docker-compose搭建可以扩展的Web Application

    • 构建 web application

      • 构建一个简单的base image
      • 写app
      • 新建startsh 文件
      • 新建构建文件 Dockerfile
      • 测试容器
    • 使用docker-compose编排项目
    • 启动项目
    • 补充说明
    • 总结

这是一次使用docker-compose搭建的可以横向扩展的web application“架构”。说架构有点大,但整体的思路的确可以作为框架选型有参考价值。

我在这次实践中所使用的技术栈有:

1. sinatra: 一个非常简单的ruby的web框架

2. docker

3. docker-compose

直接进入正文

构建 web application

构建一个简单的base image

为什么要构建一个简单的base image? 这方便我们在构建项目的时候,统一一下环境。本次实践构建的base image非常简单。代码如下

FROM ruby:2.3.0

gem install sinatra

构建命令: docker build -t xudonghe/sinatra:v1 .

构建完成后,我们可以运行 docker images查看结果

写app

第一步,新建一个简单的app.rb 文件

第二部,输入如下代码

require ‘sinatra‘

set :bind, ‘0.0.0.0‘

get ‘/‘ do
  ‘Hello world!‘
end

这里有一个值得注意的地方是,需要设置将服务器绑定在 0.0.0.0 地址上,否则 容器外部将无法访问。

新建start.sh 文件

该文件主要在于用来启动web application

#!/bin/bash

ruby -rubygems app.rb

新建构建文件 Dockerfile

FROM xudonghe/sinatra:v2

EXPOSE 4567

COPY . /app
WORKDIR /app

RUN chmod a+x ./start.sh

CMD ["bash", "start.sh"]

为啥继承的是xudonghe/sinatra:v2?因为我在本地构建了一个新的版本,其实很简单。就是开了 4567端口,并且将文件复制到了容器中。在新的构建文件中,我给start.sh 赋予了可执行权限,并在容器启动的时候,会运行该文件。

测试容器

运行如下测试命令

docker build -t xudonghe/sinatra:v3 .
docker run --rm -ti -P -v $(pwd):/app xudonghe/sinatra:v3 ruby -rubygems app.rb

然后在本地访问

curl http://$(docker-machine ip):4567

使用docker-compose编排项目

整个系统中,就有两个组件:web 和 nginx-proxy. 我选用的是 jwilder/nginx-proxy. 使用比较简单。 先将镜像下载到本地 : docker pull jwilder/nginx-proxy. 然后运行 docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy. 当然,如果需要使用 docker-compose , 我们就不需要这么手动启动。 这里只是做一个简单的介绍。如果需要继续下去,需要关闭这个容器。

如下是我的docker-compose.yml文件

web:
  build: .
  volumes:
    - .:/app
  expose:
    - 4567
  environment:
    - VIRTUAL_HOST=yourwebsiteurl
nginx:
  image: jwilder/nginx-proxy:latest
  links:
    - web
  volumes:
    - /var/run/docker.sock:/tmp/docker.sock:ro
  ports:
    - 80:80
    - 443:443

此处有一个关键的地方

1. 环境变量要定义好 environment

  environment:
    - VIRTUAL_HOST=yourwebsiteurl
  1. nginx需要使用volumes

    /var/run/docker.sock:/tmp/docker.sock:ro

启动项目

  1. 运行 docker-compose up -d
  2. scale项目 docker-compose scale web=5
  3. 查看系统信息 docker-compose ps
  4. 浏览器访问 http://yourwebsite

补充说明

如果要按照上面的代码实践的话,一般不会成功。因为还缺少一些必要的条件:本地的nginx 做反向代理 和修改 本地 /etc/hosts 文件,将web地址指向docker. 这里就不在详细说明了。 具体的架构图如下:

其中 nginx 是在 host 机上, nginx-proxy 在 docker 中

总结

该方案的优点在于非常容易对项目进行横向扩充,缺点在于优点复杂。

时间: 2024-11-10 15:30:44

使用docker-compose搭建可以扩展的Web Application的相关文章

(十)Docker Compose安装与创建Flask web应用

Docker Compose 是 Docker 官方编排(Orchestration)项目之一, 负责快速在集群中部署分布式应用. Dockerfile 可以让用户管理一个单独的应用容器:而 Compose 则允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个Web服务容器再加上后端的数据库服务容器等. 安装 该项目由 Python 编写,实际上调用了 Docker 提供的 API 来实现. 通过pip安装. $ python3 -m

Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)

场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100902301 Docker Compose基本使用-使用Compose启动Tomcat为例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100904080 Docker Compose部署项目到容器-基于Tomc

巨杉Tech | 使用 SequoiaDB + Docker + Nodejs 搭建 Web 服务器

容器化技术的出现大大简化了应用开发人员在构建底层基础设施的工作.SequoiaDB 巨杉数据库于3.2.1版本正式推出了 Docker 容器化部署方案,本文将会基于 SequoiaDB 巨杉数据库与Nodejs的 Docker 镜像搭建一个简易的 Web 服务器. 1.规划部署我们将会搭建一个三分区三副本的高可用 SequoiaDB 巨杉数据库.同时,我们将会创建一个 SequoiaDB 巨杉数据库的 MySQL 实例,用以提供 Nodejs 作为数据源. 容器角色 容器名/IP:端口 分区组

Docker Compose部署Nexus3时的docker-compose,yml代码

场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100902301 Docker Compose基本使用-使用Compose启动Tomcat为例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100904080 Docker Compose部署项目到容器-基于Tomc

docker compose环境搭建

概述 Docker Compose提供一个简单的基于YAML配置语言,用于描述和组装多容器的分布式应用. 使用docker定义和运行复杂的应用,使用compose,可以在一个文件里,定义多容器的应用.只需要三步即可完成一个应用的创建. Dockerfile定义app的运行环境 docker-compose.yml定义组成app的services run docker-compose up 环境搭建 系统:ubuntu 14.04 curl -L https://github.com/docker

企业——Docker compose的搭建

一.什么是Docker compose? Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker Compose不再需要使用shell脚本来启动容器. Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景. docker-compos

Docker Compose

compose项目简介 compose项目来源于之前的Fig项目,使用python代码编写.compose项目主要用于编排部署基于docker的应用.本身与docker/swarm配合度很高. Docker Compose 是 Docker 编排服务的一部分,可以让用户在其它平台快速安装Docker,Swarm 可以让 Docker 容器在集群中高效运转,而 Compose 可以让用户在集群中部署分布式应用.简单的说,Docker Compose 属于一个"应用层"的服务,用户可以定义

有容云:实战总结之 利用Docker、Docker Compose &Rancher构建持续部署

前言: 本文由John Patterson . Chris Lunsford写于2016年4月4日,译者有容云张向波,转载请注明出处.(原文链接见文末) 作者John Patterson和Chris Lunsford 运营了一家提供运营和基础架构服务的公司,本文是他们给大家分享的内容:关于如何通过使用Docker.Docker-Compose和Rancher来实现容器部署落地. 我们想跟你一起从头开始体验整个过程,特别是之间遇到的一些痛点和所做的决策.目前,已经有许多的资源和工具可以与Docke

docker三剑客之docker compose

compose环境变量 以DOCKER_开头的变量和用来配置Docker命令行客户端的使用一样,如果使用boot2docker,${boot2dockershellinit}将会设置他们为正确的值 compose环境变量: COMPOSE_PROJECT_NAME: 设置compose的项目名称,默认是当前工作目录(docker-compose.yml文件所在目录)的名字 compose会为每一个启动的容器前添加项目名称.例如一个名称为proj的项目,其中的一个web容器,名称可能为proj_w