SlideShare une entreprise Scribd logo
1  sur  148
Télécharger pour lire hors ligne
CouchDB
     relax
CouchDB
                           relax
                              Sander van de Graaf
                                  @svdgraaf
Focus -> practical usage examples
http://joind.in/talk/view/2495




second talk ever, please provide feedback
CONTENTS

• Introduction

• PHP   Usage

• Replication/Scalability

• Backend   usage

• Couchapps

• Other   stuff
CouchDB
     relax
NOSQL
IT’S A MOVEMENT
Movement, definitions vary
1998




Back in the day...
Lame movie 1
Another one
And then some more...
XML was introduced
Some game was published
MC Donald’s Happy Meal
Carlo Strozzi



Released NOSQL open source DB
NOSQL == Not Only SQL
“[The NoSQL movement] departs from the relational
model altogether, it should therefore have been called
more appropriately ‘NoREL’, or something to that
effect.”
                                         - Carlo Strozzi
CouchDB
     relax
Ubuntu One, contacts sync
NUTSHELL
SPEED
Speed Not diskpace (see cleanup)
APPEND ONLY
Append only storage, happy cup of coffee!
NO REPAIR NEEDED
COMPACTING
HTTP SERVER
caching, loadbalancing, without extra
costs :D
CAP
CouchDB




 CAP
CouchDB




       EVENTUALLY CONSISTENT
CouchDB focus is on Availability + Reliability, and will be
consistent after replication.
FULL REST API
REST
• GET        • SELECT

• PUT        • UPDATE

• POST       • INSERT

• DELETE     • DELETE

• COPY       • ...
JSON
    {
        total_rows: 2,
        offset: 0,
        rows: [
            {
                id: '_design/foobar',
                key: '_design/foobar',
                value: { rev: '5-982b2fc36835715b2aae54609b5d5f1e' }
            },
            {
                id: 'f0e1fd96eb6e094f74dda8d949000a6a',
                key: 'f0e1fd96eb6e094f74dda8d949000a6a',
                value: { rev: '1-86bca407fce8234a63c90ff549b56b10' }
            },
        ]
    }




Javascript == awesome! :D
REPLICATION
Key feature, relaxed about replication
issues, and version conflicts
Welcome to Futon, I prefer a UI
http-console rocks the socks out of telnet
Berkeley
CONTENTS

• Introduction

• PHP   Usage

• Replication/Scalability

• Backend   usage

• Couchapps

• Other   stuff
PHP USAGE
PHP LIBRARIES

  • PHPillow     (LGPL)

  • PHP    Object Freezer (BSD)

  • PHP    On Couch (GPL 2 / 3)

  • PHP    CouchDB Extension (PHP license)

  • SAG    for CouchDB (apache)

  • Doctrine     2 CouchDB ODM

All are quite nice, doctrine has some rough edges, I use PHP On Couch with custom patch for
Zend autoloader easyness
<?PHP

  // setup connection for couchdb
  $client = new Couchdb_Client('http://ponies.couchone.com:5984','rainbows');

  // fetch a document
  $doc = $client->getDoc('awesome_pony');

  // updating document
  $doc->newproperty = array("type","awesome");

  try
  {
        $client->storeDoc($doc);
  }
  catch (Exception $e)
  {
      echo "Document storage failed : " . $e->getMessage();
  }




PHP On Couch with small ZF autoloader fix
CONTENTS

• Introduction

• PHP   Usage

• Replication/Scalability

• Backend   usage

• Couchapps

• Other   stuff
REPLICATION
DEFINITION


“Replication is the process of sharing information so
as to ensure consistency between redundant
resources, such as software or hardware components,
to improve reliability, fault-tolerance, or accessibility.”

                                                   Source: wikipedia
CouchDB
     relax
CouchDB
     relax
             CouchDB
                  relax
CouchDB
CouchDB
                            relax




          CouchDB
               relax
                       CouchDB
                            relax




                       CouchDB
                            relax




Mysql can do this
CouchDB
                relax
                         CouchDB
                              relax




Master, Master replication
CouchDB
                  relax




CouchDB
     relax




             CouchDB
                  relax
US   NL


                             CouchDB
                                  relax




           CouchDB
                relax
                        BE


                             CouchDB
                                  relax




Not only locally
P2P WEB
“World Domination”
CLUSTERING
  “The fun stuff ”
Couchdb doesn’t support partitioning (sharding) itself, couchdb -> http based -> lots of
possibilities
loadbalancer




                                                                   ...n
              CouchDB
                   relax
                                       CouchDB
                                            relax


The basics are all the same: easy => couchdb instances 1..n => loadbalancer
CHALLENGES

• Large   amounts of data

• Large   views (with big/long map/reduce queries)

• LOTS    of traffic

• Location   based partitions

• For   fun and profit
MAP/REDUCE
INPUT
           IP                 Bytes
     212.122.174.13           18271
     212.122.174.13           191726
     212.122.174.13            198
      74.119.8.111            91272
      74.119.8.111             8371
     212.122.174.13             43



Map/Reduce example
MAPPER => REDUCER
      IP         Bytes
                 18271
                 191726
212.122.174.13
                  198
                   43
                 91272
 74.119.8.111
                  8371
AFTER REDUCE
      IP          Bytes



212.122.174.13   210238




 74.119.8.111    99643
PARTITION INPUT
 Partition           IP         Bytes
    0          212.122.174.13   18271
    0          212.122.174.13   191726
    0          212.122.174.13    198
    1           74.119.8.111    91272
    1           74.119.8.111     8371
    0          212.122.174.13     43



Map/Reduce example
MAPPER => REDUCER
   Partition                         IP                         Bytes
                                                                18271
                                                                191726
        0                   212.122.174.13
                                                                 198
                                                                  43
                                                                91272
        1                     74.119.8.111
                                                                 8371


If data is big enough, you could even need a re-re-re-reducer
AFTER REDUCE
      IP          Bytes



212.122.174.13   210238




 74.119.8.111    99643
CLUSTERING OPTIONS


• CouchDB    Lounge

• Pillow

• BigCouch
LOUNGE

• partitioning/clustering

• Nginx    module

• meebo.com

• ‘easy’

• http://tilgovi.github.com/couchdb-lounge/
LOUNGE


 • dumb_proxy         => proxy for simple PUT/GET’s

 • smart_proxy        => proxy for map/reduce over shards

 • replicator    => updates all copies, redudantly




it can make sure that there are N copies of a document at every moment
nginx
                             dumb_proxy




                                           ...n
            CouchDB
                 relax
                              CouchDB
                                   relax


dumb_proxy == ONLY GET/PUT
nginx
                                   smart_proxy




                                                                  ...n
              CouchDB
                   relax
                                      CouchDB
                                           relax


smart_proxy takes care of the map/reduce and re-reducers over multiple nodes
Bonus:

                    other nginx modules work too




mod_cache, mod_expire, etc.
PILLOW

• Erlang   based

• router/rereducer   (map/reduce over multiple
 systems)

• In   development (but promising!)

• https://github.com/khellan/Pillow
BIGCOUCH

• Fork

• 100%   api compatible

• Open   Source/Commercial

• https://cloudant.com/#!/solutions/bigcouch
CONTENTS

• Introduction

• PHP   Usage

• Replication/Scalability

• Backend   usage

• Couchapps

• Other   stuff
BACKEND USAGE
PROXIED




                                       CouchDB
                                            relax
proxied via middleware, or via mod_proxy or similiar
DIRECT




                                                           CouchDB
                                                                relax




or direct, because http based, content is directly available in javascript
NOSQL && SQL HYBRID

• onSave, onCommit      hooks available in every major framework

• onSave -> make a JSON representation of your object, and
 PUT it to couchdb (#protip: only ‘public’ data)

• sql   db is leading, you don’t care about versioning in couchdb

• youcan use your data directly from couchdb within your
 frontend javascript
MODEL
<?php
class Pony extends Application_models
{
    public function toArray()
    {
        $data = $this->_getData();
        unset($data['created_on']);
        unset($data['created_by']);
        unset($data['access_level']);
        unset($data['private_data']);

        $data['tags'] = $this->getTags();
        $data['categories'] = $this->getCategories();
        $data['rainbows'] = 'double';

        return $data;
    }
}
AFTER_SAVE

<?php
class article_module extends admin_module
{
    public function after_save()
    {
        parent::after_save();
        $data = $this->toJson();

        $res = CouchDB::put($data);
        $this->_id = $res->_id;
        $this->_rev = $res->_rev;
    }
}
PROXY



            RewriteEngine On
            RewriteRule /data/(.*)      http://127.0.0.1:5984/db/$1 [P,L]




Proxy the calls (work around sandbox/other domain error), or use jsonp
JAVASCRIPT
<script type="text/javascript">
$.getJSON("/db/ponies/_design/ponies/_view/best-ponies?include_docs=true",
    function(res){
        for(i in res.rows)
        {
            doc = res.rows[i].doc;
            // do stuff
        }
    }
);
</script>
CONTENTS

• Introduction

• PHP   Usage

• Replication/Scalability

• Backend   usage

• Couchapps

• Other   stuff
COUCHAPP




CouchDB has it’s own structure for “distributed, scalable web applications” called couchapps
“Distributed, scalable, web
   applications you say?
omgwtfbbq!?!1!!!11!1!eleven”
_attachments




the magic is in _attachments
CouchDB
                                    relax




                CouchDB
                     relax




                               CouchDB
                                    relax




distribution via replication
INSTALLATION




                         Couchapp 0.7.0
installation is easy
$ couchapp init




init a project
LAYOUT




creates a default folder
$ couchapp push http://ponies.couchone.com:5984/rainbows
https://github.com/brandon-beacher/couchapp-tmbundle


couchapp push on save -> textmate
CONTENTS

• Introduction

• PHP   Usage

• Replication/Scalability

• Backend   usage

• Couchapps

• Other   stuff
OTHER STUFF
REWRITES
_REWRITE
$ curl "http://ponies.couchone.com/rainbows/_design/ponies/_view/best-
ponies?descending=true&limit=5&key=”foobar”
such urls make us a sad panda
{
    ....
    "rewrites": [
    {
        "from": "/best-5-ponies",
        "to": "ponies/_view/best-ponies",
        "method": "GET",
        "query": {
            "descending": true,
            "limit": 5,
            "key": "foobar"
         }
    }
    ]
}
$ curl "http://ponies.couchone.com/rainbows/_design/ponies/_view/best-
 ponies?descending=true&limit=5&key=”foobar”




rewrite this
$ curl "http://ponies.couchone.com/rainbows/_design/ponies/_rewrite/best-5-ponies"




to this
[vhosts]
awesomeponies.com = /rainbows/_design/ponies/_rewrite
$ curl "http://ponies.couchone.com/rainbows/_design/ponies/_rewrite/best-5-ponies"




rewrite this
$ curl "http://awesomeponies.com/best-5-ponies"




to this
_CHANGES
$ curl -X GET "http://ponies.couchone.com/rainbows/_changes"
{"results":[

],
"last_seq":0}
curl -X PUT http://ponies.couchone.come/rainbows/foobar -d '{"type":"awesome"}'
{"results":[
{"seq":1,"id":"foobar","changes":[{"rev":"1-aaa8e2a031bca334f50b48b6682fb486"}]}
],
"last_seq":1}
{"results":[
{"seq":1,"id":"foobar","changes":[{"rev":"1-aaa8e2a031bca334f50b48b6682fb486"}]},
{"seq":2,"id":"foobar2","changes":[{"rev":"1-e18422e6a82d0f2157d74b5dcf457997"}]}
],
"last_seq":2}
_CHANGES OPTIONS

• ?since

• Longpolling

• Continuous
$ curl -X GET "http://ponies.couchone.com/rainbows/_changes?since=20"
curl -X GET "http://ponies.couchone.com/rainbows/_changes?feed=longpoll&since=2"




Longpolling: good for little updates, connections stays open until change, then gets closed
and you need to reconnect, lots of reconnects for lots of updates
curl -X GET "http://ponies.couchone.com/rainbows/_changes?feed=continuous&since=2"




Connections stays open, and you get updates on the fly!
FILTERS




filters can be used to filter documents from output
function(doc, req)
                           {
                               if(doc.priority == 'high')
                               {
                                   return true;
                               }
                               return false;
                           }




we only want high priority documents
curl -X GET
"http://ponies.couchone.com/rainbows/_changes?feed=continuous&filter=app/important
function(doc, req)
                        {
                            if(doc.name == req.query.name) {
                                return true;
                            }

                             return false;
                        }




you can use req for request based filters
curl -X GET
"http://ponies.couchone.com/rainbows/_changes?feed=continuous&filter=app/name&name=foobar
SHOWS
function(doc, req) {
  return {
    body: "Hello World"
  }
}
curl -X
"http://ponies.couchone.com/rainbows/_design/foobar/_show/showfunction/docid"
function(doc) {
                            return {
                                "code": 302,
                                "body": "See other",
                                "headers": {
                                        "Location": doc.target
                                }
                            };
                        }




You can also define http headers, we used this for translating public id’s into private storage
id’s. In this way, couchdb took care of all the headers and http stuff, and we could use a
regular nginx proxy module
LUCENE
[external]
fti=/path/to/python /path/to/couchdb-lucene/tools/couchdb-external-hook.py

[httpd_db_handlers]
_fti = {couch_httpd_external, handle_external_req, <<"fti">>}
function(doc) {
    var ret=new Document();
    ret.add(doc.message);
    ret.add(new Date(doc.datetime));
    return ret;
}
curl -X GET
"http://ponies.couchone.com/rainbows/_fti/_design/unicorns/by-query?q=foobar"
GEOCOUCH
https://github.com/vmx/couchdb
See Dericks talk yesterday
GEOCOUCH

    • Supports     bbox

    • fork

    • outputs    via lists, georss possible

    • directly   useable by google maps

    • can    read GIS data

    • combined      with _changes makes interesting usecase

-   bbox => all items withing a certain bounding box, polygon is in the works
-   currently a fork of couchdb, in the works as external module
-   output can be setup seperately
-   google maps can use georss
-   GIS: Geographic Information System (used worldwide?)
SPATIAL INDEX
                                       in spatial/points.js


function(doc)
{
    if (doc.geo && doc.geo.latitude != '' && doc.geo.longitude != '')
    {
        emit(
            {
                type: "Point",
                coordinates: [parseFloat(doc.geo.latitude), parseFloat(doc.geo.longitude)]
            },
            [doc._id, doc]
        );
    }
}
Worldwide search
http://ponies.couchone.com/rainbows/_design/unicorns/_spatial/points?bbox=0,0,180,90




    {"update_seq":3,"rows":[
        {
            "id":"augsburg",
            "bbox":[10.898333,48.371667,10.898333,48.371667],
            "value":["augsburg",[10.898333,48.371667]]
        }
    ]}
GEORSS && GOOGLE MAPS

if (GBrowserIsCompatible())
{
    map = new GMap2(document.getElementById('map'));
    var geoXML = new GGeoXml('http://ponies.couchone.com/rainbows/url-to-georss-view');
    map.addOverlay(geoXML);
}
curl -X GET "http://ponies.couchone.com/rainbows/_design/alarmeringen/_spatial/points?
bbox=51.711369,4.218407,52.136520,4.745740";
Q?
http://www.couchone.com/get
http://joind.in/talk/view/2495




second talk ever, please provide feedback

Contenu connexe

Tendances

Single node hadoop cluster installation
Single node hadoop cluster installation Single node hadoop cluster installation
Single node hadoop cluster installation Mahantesh Angadi
 
20090514 Introducing Puppet To Sasag
20090514 Introducing Puppet To Sasag20090514 Introducing Puppet To Sasag
20090514 Introducing Puppet To Sasaggarrett honeycutt
 
Docker Online Meetup #3: Docker in Production
Docker Online Meetup #3: Docker in ProductionDocker Online Meetup #3: Docker in Production
Docker Online Meetup #3: Docker in ProductionDocker, Inc.
 
GOTO 2011 preso: 3x Hadoop
GOTO 2011 preso: 3x HadoopGOTO 2011 preso: 3x Hadoop
GOTO 2011 preso: 3x Hadoopfvanvollenhoven
 
Provisioning Bare Metal with OpenStack
Provisioning Bare Metal with OpenStackProvisioning Bare Metal with OpenStack
Provisioning Bare Metal with OpenStackDevananda Van Der Veen
 
General Bare-metal Provisioning Framework.pdf
General Bare-metal Provisioning Framework.pdfGeneral Bare-metal Provisioning Framework.pdf
General Bare-metal Provisioning Framework.pdfOpenStack Foundation
 
サンプルから見るMap reduceコード
サンプルから見るMap reduceコードサンプルから見るMap reduceコード
サンプルから見るMap reduceコードShinpei Ohtani
 
Apache Hive micro guide - ConfusedCoders
Apache Hive micro guide - ConfusedCodersApache Hive micro guide - ConfusedCoders
Apache Hive micro guide - ConfusedCodersYash Sharma
 
Thinking outside the box, learning a little about a lot
Thinking outside the box, learning a little about a lotThinking outside the box, learning a little about a lot
Thinking outside the box, learning a little about a lotMark Broadbent
 
Isn't it ironic - managing a bare metal cloud (OSL TES 2015)
Isn't it ironic - managing a bare metal cloud (OSL TES 2015)Isn't it ironic - managing a bare metal cloud (OSL TES 2015)
Isn't it ironic - managing a bare metal cloud (OSL TES 2015)Devananda Van Der Veen
 
Big Data @ Orange - Dev Day 2013 - part 2
Big Data @ Orange - Dev Day 2013 - part 2Big Data @ Orange - Dev Day 2013 - part 2
Big Data @ Orange - Dev Day 2013 - part 2ovarene
 
Webinar - Getting Started With Ceph
Webinar - Getting Started With CephWebinar - Getting Started With Ceph
Webinar - Getting Started With CephCeph Community
 
CoreOS : 설치부터 컨테이너 배포까지
CoreOS : 설치부터 컨테이너 배포까지CoreOS : 설치부터 컨테이너 배포까지
CoreOS : 설치부터 컨테이너 배포까지충섭 김
 

Tendances (19)

Single node hadoop cluster installation
Single node hadoop cluster installation Single node hadoop cluster installation
Single node hadoop cluster installation
 
20090514 Introducing Puppet To Sasag
20090514 Introducing Puppet To Sasag20090514 Introducing Puppet To Sasag
20090514 Introducing Puppet To Sasag
 
SkinKit
SkinKitSkinKit
SkinKit
 
Ironic
IronicIronic
Ironic
 
Docker Online Meetup #3: Docker in Production
Docker Online Meetup #3: Docker in ProductionDocker Online Meetup #3: Docker in Production
Docker Online Meetup #3: Docker in Production
 
Docker
DockerDocker
Docker
 
GOTO 2011 preso: 3x Hadoop
GOTO 2011 preso: 3x HadoopGOTO 2011 preso: 3x Hadoop
GOTO 2011 preso: 3x Hadoop
 
Belvedere
BelvedereBelvedere
Belvedere
 
Provisioning Bare Metal with OpenStack
Provisioning Bare Metal with OpenStackProvisioning Bare Metal with OpenStack
Provisioning Bare Metal with OpenStack
 
Zabbix
Zabbix Zabbix
Zabbix
 
General Bare-metal Provisioning Framework.pdf
General Bare-metal Provisioning Framework.pdfGeneral Bare-metal Provisioning Framework.pdf
General Bare-metal Provisioning Framework.pdf
 
サンプルから見るMap reduceコード
サンプルから見るMap reduceコードサンプルから見るMap reduceコード
サンプルから見るMap reduceコード
 
Apache Hive micro guide - ConfusedCoders
Apache Hive micro guide - ConfusedCodersApache Hive micro guide - ConfusedCoders
Apache Hive micro guide - ConfusedCoders
 
Thinking outside the box, learning a little about a lot
Thinking outside the box, learning a little about a lotThinking outside the box, learning a little about a lot
Thinking outside the box, learning a little about a lot
 
Isn't it ironic - managing a bare metal cloud (OSL TES 2015)
Isn't it ironic - managing a bare metal cloud (OSL TES 2015)Isn't it ironic - managing a bare metal cloud (OSL TES 2015)
Isn't it ironic - managing a bare metal cloud (OSL TES 2015)
 
Big Data @ Orange - Dev Day 2013 - part 2
Big Data @ Orange - Dev Day 2013 - part 2Big Data @ Orange - Dev Day 2013 - part 2
Big Data @ Orange - Dev Day 2013 - part 2
 
Shark - Lab Assignment
Shark - Lab AssignmentShark - Lab Assignment
Shark - Lab Assignment
 
Webinar - Getting Started With Ceph
Webinar - Getting Started With CephWebinar - Getting Started With Ceph
Webinar - Getting Started With Ceph
 
CoreOS : 설치부터 컨테이너 배포까지
CoreOS : 설치부터 컨테이너 배포까지CoreOS : 설치부터 컨테이너 배포까지
CoreOS : 설치부터 컨테이너 배포까지
 

Similaire à Advanced CouchDB

Streamline your development environment with docker
Streamline your development environment with dockerStreamline your development environment with docker
Streamline your development environment with dockerGiacomo Bagnoli
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesJérôme Petazzoni
 
Docker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google CloudDocker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google CloudSamuel Chow
 
The age of orchestration: from Docker basics to cluster management
The age of orchestration: from Docker basics to cluster managementThe age of orchestration: from Docker basics to cluster management
The age of orchestration: from Docker basics to cluster managementNicola Paolucci
 
Docker - Lightweight Virtualization
Docker - Lightweight VirtualizationDocker - Lightweight Virtualization
Docker - Lightweight VirtualizationMehdi Hasan
 
Shipping Applications to Production in Containers with Docker
Shipping Applications to Production in Containers with DockerShipping Applications to Production in Containers with Docker
Shipping Applications to Production in Containers with DockerJérôme Petazzoni
 
Big Data in Container; Hadoop Spark in Docker and Mesos
Big Data in Container; Hadoop Spark in Docker and MesosBig Data in Container; Hadoop Spark in Docker and Mesos
Big Data in Container; Hadoop Spark in Docker and MesosHeiko Loewe
 
Getting started with Docker sandboxes for MariaDB
Getting started with Docker sandboxes for MariaDBGetting started with Docker sandboxes for MariaDB
Getting started with Docker sandboxes for MariaDBMariaDB plc
 
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)Puppet
 
Above the cloud: Big Data and BI
Above the cloud: Big Data and BIAbove the cloud: Big Data and BI
Above the cloud: Big Data and BIDenny Lee
 
Docker HK Meetup - 201707
Docker HK Meetup - 201707Docker HK Meetup - 201707
Docker HK Meetup - 201707Clarence Ho
 
Docker for the Rubyist
Docker for the RubyistDocker for the Rubyist
Docker for the RubyistBrian DeHamer
 
[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"
[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"
[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"OpenStack Korea Community
 
Agile Brown Bag - Vagrant & Docker: Introduction
Agile Brown Bag - Vagrant & Docker: IntroductionAgile Brown Bag - Vagrant & Docker: Introduction
Agile Brown Bag - Vagrant & Docker: IntroductionAgile Partner S.A.
 
Docker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12xDocker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12xrkr10
 
Cassandra and Docker Lessons Learned
Cassandra and Docker Lessons LearnedCassandra and Docker Lessons Learned
Cassandra and Docker Lessons LearnedDataStax Academy
 
Docker in Action
Docker in ActionDocker in Action
Docker in ActionAlper Kanat
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to DockerBardia Heydari
 

Similaire à Advanced CouchDB (20)

Streamline your development environment with docker
Streamline your development environment with dockerStreamline your development environment with docker
Streamline your development environment with docker
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los Angeles
 
Docker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google CloudDocker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google Cloud
 
The age of orchestration: from Docker basics to cluster management
The age of orchestration: from Docker basics to cluster managementThe age of orchestration: from Docker basics to cluster management
The age of orchestration: from Docker basics to cluster management
 
Docker - Lightweight Virtualization
Docker - Lightweight VirtualizationDocker - Lightweight Virtualization
Docker - Lightweight Virtualization
 
Sheep it
Sheep itSheep it
Sheep it
 
Shipping Applications to Production in Containers with Docker
Shipping Applications to Production in Containers with DockerShipping Applications to Production in Containers with Docker
Shipping Applications to Production in Containers with Docker
 
Big Data in Container; Hadoop Spark in Docker and Mesos
Big Data in Container; Hadoop Spark in Docker and MesosBig Data in Container; Hadoop Spark in Docker and Mesos
Big Data in Container; Hadoop Spark in Docker and Mesos
 
Getting started with Docker sandboxes for MariaDB
Getting started with Docker sandboxes for MariaDBGetting started with Docker sandboxes for MariaDB
Getting started with Docker sandboxes for MariaDB
 
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
 
Above the cloud: Big Data and BI
Above the cloud: Big Data and BIAbove the cloud: Big Data and BI
Above the cloud: Big Data and BI
 
Docker HK Meetup - 201707
Docker HK Meetup - 201707Docker HK Meetup - 201707
Docker HK Meetup - 201707
 
Docker for the Rubyist
Docker for the RubyistDocker for the Rubyist
Docker for the Rubyist
 
[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"
[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"
[OpenInfra Days Korea 2018] Day 1 - T4-7: "Ceph 스토리지, PaaS로 서비스 운영하기"
 
Agile Brown Bag - Vagrant & Docker: Introduction
Agile Brown Bag - Vagrant & Docker: IntroductionAgile Brown Bag - Vagrant & Docker: Introduction
Agile Brown Bag - Vagrant & Docker: Introduction
 
Docker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12xDocker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12x
 
Docker
DockerDocker
Docker
 
Cassandra and Docker Lessons Learned
Cassandra and Docker Lessons LearnedCassandra and Docker Lessons Learned
Cassandra and Docker Lessons Learned
 
Docker in Action
Docker in ActionDocker in Action
Docker in Action
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 

Dernier

Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 

Dernier (20)

Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 

Advanced CouchDB