SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Managing ejabberd
platform with
Docker containers
What is Docker
• Linux tool, written in Go language
• Started in 2010 as a concept at dotCloud SARL
• Published 2y ago by creator Solomon Hykes with Open
Source license (Apache 2.0)
• Handled by Docker Inc
• Partnership with Red Hat, IBM, Google, Amazon...
• Automates the deployment of applications as standalone
software containers
High level view
• Own process space
• Own network interface
• Include all binaries/libs required by your software
• Works the same on every Linux host
• Just need Linux Kernel on host machine
Low level view
• Like chroot++ or improved BSD jails, without need
of custom configuration and deployment scripts
• Shares Kernel with Host and other containers, but
in isolated environment
• No need for device emulation (neither HVM nor PV)
• Adds API to existing Linux Kernel features: LXC,
cgroups, namespaces
Container vs VM
• Virtual Machine: emulates hardware, runs the
Operating System and applications
• Docker: system process with isolated view of the
namespace and resources, runs libraries and
applications. No emulation layer. Accumulates
AUFS mounts for container filesystem.
Container vs VM
Why it matters
• Containers start fast, are smaller than VM
• Build once run everywhere, matches cloud needs
• Containers are easy to replicate (docker hub)
• No runtime resources overhead, no emulation
• Allow low level packaging optimisation/setup
Drawbacks
• Works only on Linux (for now?)
• Requires Linux 3.8+
• Kernels older than 3.10 lack some of the features
required to run some containers
ejabberd requirements
• Ejabberd beam files
• Erlang dependencies beam and NIF
• Configuration and runtime files
• Erlang VM and system library dependencies:
libpthread, libm, libssl, libc...
Installer vs Container
• Erlang is already a VM after all ! Installed may be sufficient ?
• Installer must include everything (code+database) and can not
handle upgrade without external and custom scripts
• Installer is standalone but uses hosts's libc, which may differ from
one host to another
• No clean way to use custom configuration and database with
Installer/rpm/deb
• Containers gives deeper application integration, makes upgrade
process simpler (more control on global environment), and ensure
same environment deployed everywhere. (no hazardous
dependencies issues)
Installations issues
• Heterogeneous setup: installed from sources, from official binary
installer, from deb/rpm/pkgsrc/brew/etc... => impossible to
reproduce clean, secure and optimised setup everywhere, with
same version of erlang for a given ejabberd release
• Way too much combination, from system libs to erlang version.
Many possible configuration, many patches on packaged Erlang
and/or system libraries, etc...
• No hands on host's network settings and tunning
• Binary installer gives more control on software dependencies,
but still depends on host's libc compatibility and does not ensure
user uses bundled libraries.
Simple container
• From Debian Jessie
• Download ProcessOne binary installer
• Install using unattended mode
• Apply own configuration
=> Build new container for every release
=> Depends on ProcessOne binary packaging
ejabberd container
• By Rafael Römhild (rroemhild/ejabberd)
• Complete and customisable container
• Available for all tags since 14.12 up to 15.10
• Based on Debian Jessie
• Uses debian's Erlang/OTP, build ejabberd from
sources.
Environment
EJABBERD_HTTPS true
EJABBERD_STARTTLS true
EJABBERD_S2S_SSL true
EJABBERD_PROTOCOL_OPTIONS_TLSV1 false
EJABBERD_LOGLEVEL 4
EJABBERD_MUC_CREATE_ADMIN_ONLY
EJABBERD_REGISTER_ADMIN_ONLY
EJABBERD_MOD_ADMIN_EXTRA true
EJABBERD_MOD_MUC_ADMIN false
EJABBERD_REGISTER_TRUSTED_NETWORK_ONLY
EJABBERD_SKIP_MODULES_UPDATE false
EJABBERD_AUTH_METHOD internal
EJABBERD_ADMINS
EJABBERD_USERS
ERLANG_NODE ejabberd@localhost
ERLANG_COOKIE
ERLANG_OPTIONS -noshell
XMPP_DOMAIN
TZ Europe/Paris
Configuration
• Few environment variables allows to change simple
configuration settings, but default configuration
remains very generic, too generic...
• Better create your own container with your own
configuration and certificates:
FROM rroemhild/ejabberd:15.10
ADD ./ejabberd.yml /etc/ejabberd/ejabberd.yml
ADD ./ejabberdctl.cfg /etc/ejabberd/ejabberdctl.cfg
ADD ./example.com.pem /opt/ejabberd/ssl/example.com.pem
$ docker build -t p1/ejabberd:15.10 .
Persistent storage
• Using a data container, hum... really ?
docker create --name ejabberd-data rroemhild/ejabberd-data
docker run -d 
--name "ejabberd" 
--volumes-from ejabberd-data 
.... 
rroemhild/ejabberd:15.10
• Using mounts from host filesystem
docker run -d 
--name "ejabberd" 
-v $PWD/database:/opt/ejabberd/database 
-v $PWD/logs:/var/logs/ejabberd 
.... 
rroemhild/ejabberd:15.10
Using custom container
• Simplify both configuration and customisations
• Allows better integration with your environment
• Allows implicit linking with your database container
• Very simple to write and maintain
• Build "ready to use" containers for your use
Deploy/share containers
• Need a docker hub account (public/private)
• docker push me/ejabberd:15.10
• docker pull me/ejabberd:15.10
• docker run me/ejabberd:15.10
Docker hub
• Public repository to share your app
• Private repository to share container with dev team
• Private repository to easy deploy app in-house
• https://docs.docker.com/docker-hub/
Start ejabberd
docker run -i -t -P 
--name "15.09" 
-p 5222:5222 
-p 5269:5269 
-p 5280:5280 
-h 'example.net' 
-e "XMPP_DOMAIN=example.net" 
-e "ERLANG_NODE=node1" 
-e "ERLANG_COOKIE=demo" 
-e "EJABBERD_ADMINS=admin@example.net" 
-e "EJABBERD_USERS=admin@example.net:password1234" 
-e "TZ=Europe/Paris" 
-v $PWD/database:/opt/ejabberd/database 
-v $PWD/logs/node1:/var/log/ejabberd 
p1/ejabberd:15.09 live
docker start 15.09
docker exec 15.09 ejabberdctl status
docker stop 15.09
Simple upgrade
• Simple switch from 15.09 to 15.10 when using
same data container or mounting point, and also
using same configuration.
• Allow easy upgrade/rollback but stops service if
serving with a single node.
docker start 15.09
docker exec 15.09 ejabberdctl status
docker stop 15.09
docker start 15.10
docker exec 15.10 ejabberdctl status
DEMO
So what ?
• Using our custom container, upgrading from 15.09 to
15.10
• Using host mounts for data and preconfigured
ejabberd
• a simple start/stop of the right container is enough
=> NO EXTRA CHANGE REQUIRED !
• improvement: N+1 / N-1 automatic upgrade/migration
code needed ejabberd side for full coverage.
Smooth upgrade
• Using haproxy as front-end, two ejabberd containers running on
same host, mapping them to their own ports and own erlang node
name to play with cluster
current container A: -p 15222:5222
next container B: -p 25222:5222
• Haproxy redirects 5222 to 15222, then start container B, then add B
in the cluster, then haproxy redirects 5222 to 25222, after a while
remove A from cluster and stop A.
• - : Requires lots of automated stuff, complex, not very clean
• + : Allows using only one host without disconnecting all your users
Cluster upgrade
• Run ejabberd container on several hosts
• Get them as one ejabberd cluster
• Apply simple upgrade node after node
• Disconnected users automatically reconnect to
another running node
• Load can be redirected at balancer level to reduce
impact of disconnections (takes more time, depends
on service use)
Cluster issue
• Ejabberd nodes needs direct network link at each
other, being part of same network
• Containers runs on different hosts
• Docker links are only bound to local host
• Containers are isolated
• Need to resolve remote hosts: multi-host networking
using overlay network driver is docker solution
Multi host networking
• Needs Linux 3.16+
• Access to key-value store (Consul, Etcd or ZooKeeper)
• A configured Engine daemon on each host in the cluster
• Not straight forward solution
$ docker network create -d overlay
--subnet=192.168.0.0/16 --subnet=192.170.0.0/16
--gateway=192.168.0.100 --gateway=192.170.0.100
--ip-range=192.168.1.0/24
--aux-address a=192.168.1.5 --aux-address b=192.168.1.6
--aux-address a=192.170.1.5 --aux-address b=192.170.1.6
my-multihost-network
Simpler multi host
• Docker container can access host interface being
bridged by its own interface
• Need private internal network (ip alias can work)
• Containers can ping by internal network IP
• Custom container needs /etc/hosts and inetrc with static
IP for all your nodes
• But needs update /etc/hosts when adding nodes. So this
is OK until our cluster changes over time (no easy scale)
Other DNS solutions
• dnsdocker using docker compose
• etcd, consul or zookeeper for use with overlay
• other container management systems like Rancher
• possibles improvement with new Networking in
Docker 1.9 (relay on an official image to provide
clean DNS resolution across containers ?)
=> need improvements to support dynamic cluster
ejabberd container
improvements (WIP)
• Allow easy custom configuration
• Native support of multi-host clustering and transient
joincluster/leavecluster
• Consistency with standard installation
• Custom minimalist Erlang/OTP+Elixir with hipe support
• Smaller container (based on Alpine instead of Debian,
from 245Mb to 35Mb !)
Questions
Christophe Romain <cromain@process-one.net>

Contenu connexe

Tendances

DRUPAL CI/CD FROM DEV TO PROD WITH GITLAB, KUBERNETES AND HELM
DRUPAL CI/CD FROM DEV TO PROD WITH GITLAB, KUBERNETES AND HELMDRUPAL CI/CD FROM DEV TO PROD WITH GITLAB, KUBERNETES AND HELM
DRUPAL CI/CD FROM DEV TO PROD WITH GITLAB, KUBERNETES AND HELMDrupalCamp Kyiv
 
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...Amazon Web Services Korea
 
Amazon EKS - Elastic Container Service for Kubernetes
Amazon EKS - Elastic Container Service for KubernetesAmazon EKS - Elastic Container Service for Kubernetes
Amazon EKS - Elastic Container Service for KubernetesAmazon Web Services
 
Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture AppDynamics
 
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...Amazon Web Services Korea
 
Instruction on creating a cluster on jboss eap environment
Instruction on creating a cluster on jboss eap environmentInstruction on creating a cluster on jboss eap environment
Instruction on creating a cluster on jboss eap environmentMadhusudan Pisipati
 
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법Open Source Consulting
 
Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부Hyun-Mook Choi
 
Monitoring with prometheus
Monitoring with prometheusMonitoring with prometheus
Monitoring with prometheusKasper Nissen
 
Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...
Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...
Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...Amazon Web Services Korea
 
Docker Networking Overview
Docker Networking OverviewDocker Networking Overview
Docker Networking OverviewSreenivas Makam
 
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링Amazon Web Services Korea
 
AWS에서 Kubernetes 실행하기 - 황경태 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
AWS에서 Kubernetes 실행하기 - 황경태 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019AWS에서 Kubernetes 실행하기 - 황경태 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
AWS에서 Kubernetes 실행하기 - 황경태 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019Amazon Web Services Korea
 
CI/CD pipelines on AWS - Builders Day Israel
CI/CD pipelines on AWS - Builders Day IsraelCI/CD pipelines on AWS - Builders Day Israel
CI/CD pipelines on AWS - Builders Day IsraelAmazon Web Services
 

Tendances (20)

DRUPAL CI/CD FROM DEV TO PROD WITH GITLAB, KUBERNETES AND HELM
DRUPAL CI/CD FROM DEV TO PROD WITH GITLAB, KUBERNETES AND HELMDRUPAL CI/CD FROM DEV TO PROD WITH GITLAB, KUBERNETES AND HELM
DRUPAL CI/CD FROM DEV TO PROD WITH GITLAB, KUBERNETES AND HELM
 
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
Amazon EKS를 위한 AWS CDK와 CDK8s 활용법 - 염지원, 김광영 AWS 솔루션즈 아키텍트 :: AWS Summit Seou...
 
Amazon EKS - Elastic Container Service for Kubernetes
Amazon EKS - Elastic Container Service for KubernetesAmazon EKS - Elastic Container Service for Kubernetes
Amazon EKS - Elastic Container Service for Kubernetes
 
Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture
 
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...
Amazon EKS를 통한 빠르고 편리한 컨테이너 플랫폼 활용 – 이일구 AWS 솔루션즈 아키텍트:: AWS Cloud Week - Ind...
 
Instruction on creating a cluster on jboss eap environment
Instruction on creating a cluster on jboss eap environmentInstruction on creating a cluster on jboss eap environment
Instruction on creating a cluster on jboss eap environment
 
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
 
Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부Fargate 를 이용한 ECS with VPC 1부
Fargate 를 이용한 ECS with VPC 1부
 
Vue js for beginner
Vue js for beginner Vue js for beginner
Vue js for beginner
 
AWS Fargate on EKS 실전 사용하기
AWS Fargate on EKS 실전 사용하기AWS Fargate on EKS 실전 사용하기
AWS Fargate on EKS 실전 사용하기
 
Spring annotation
Spring annotationSpring annotation
Spring annotation
 
Monitoring with prometheus
Monitoring with prometheusMonitoring with prometheus
Monitoring with prometheus
 
What is Docker
What is DockerWhat is Docker
What is Docker
 
DevOps with Kubernetes
DevOps with KubernetesDevOps with Kubernetes
DevOps with Kubernetes
 
Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...
Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...
Terraform을 기반한 AWS 기반 대규모 마이크로서비스 인프라 운영 노하우 - 이용욱, 삼성전자 :: AWS Summit Seoul ...
 
Docker Networking Overview
Docker Networking OverviewDocker Networking Overview
Docker Networking Overview
 
Love at first Vue
Love at first VueLove at first Vue
Love at first Vue
 
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
 
AWS에서 Kubernetes 실행하기 - 황경태 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
AWS에서 Kubernetes 실행하기 - 황경태 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019AWS에서 Kubernetes 실행하기 - 황경태 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
AWS에서 Kubernetes 실행하기 - 황경태 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
 
CI/CD pipelines on AWS - Builders Day Israel
CI/CD pipelines on AWS - Builders Day IsraelCI/CD pipelines on AWS - Builders Day Israel
CI/CD pipelines on AWS - Builders Day Israel
 

En vedette

Deep Dive Into ejabberd Pubsub Implementation
Deep Dive Into ejabberd Pubsub ImplementationDeep Dive Into ejabberd Pubsub Implementation
Deep Dive Into ejabberd Pubsub ImplementationMickaël Rémond
 
Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1
Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1
Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1Mickaël Rémond
 
Squeezing Deep Learning Into Mobile Phones
Squeezing Deep Learning Into Mobile PhonesSqueezing Deep Learning Into Mobile Phones
Squeezing Deep Learning Into Mobile PhonesAnirudh Koul
 
ActivEngage Dealer Chat Real-Time Communication
ActivEngage Dealer Chat Real-Time CommunicationActivEngage Dealer Chat Real-Time Communication
ActivEngage Dealer Chat Real-Time Communication360Converge, Inc.
 
IoT Studio #1: Protocols introduction and connected jukebox
IoT Studio #1: Protocols introduction and connected jukeboxIoT Studio #1: Protocols introduction and connected jukebox
IoT Studio #1: Protocols introduction and connected jukeboxMickaël Rémond
 
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8 Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8 Mickaël Rémond
 
IoT時代を支えるプロトコルMQTT技術詳解
IoT時代を支えるプロトコルMQTT技術詳解IoT時代を支えるプロトコルMQTT技術詳解
IoT時代を支えるプロトコルMQTT技術詳解Naoto MATSUMOTO
 
【 ITベンチャーを支えるテクノロジー 】チャットワークを支える技術|Chatwork株式会社
【 ITベンチャーを支えるテクノロジー 】チャットワークを支える技術|Chatwork株式会社【 ITベンチャーを支えるテクノロジー 】チャットワークを支える技術|Chatwork株式会社
【 ITベンチャーを支えるテクノロジー 】チャットワークを支える技術|Chatwork株式会社leverages_event
 
One Click Deployment with Jenkins - PHP Unconference 2011
One Click Deployment with Jenkins - PHP Unconference 2011One Click Deployment with Jenkins - PHP Unconference 2011
One Click Deployment with Jenkins - PHP Unconference 2011Mayflower GmbH
 
Zing Me Real Time Web Chat Architect
Zing Me Real Time Web Chat ArchitectZing Me Real Time Web Chat Architect
Zing Me Real Time Web Chat ArchitectChau Thanh
 
Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422akitsukada
 
Real-time Streaming and Querying with Amazon Kinesis and Amazon Elastic MapRe...
Real-time Streaming and Querying with Amazon Kinesis and Amazon Elastic MapRe...Real-time Streaming and Querying with Amazon Kinesis and Amazon Elastic MapRe...
Real-time Streaming and Querying with Amazon Kinesis and Amazon Elastic MapRe...Amazon Web Services
 
Zingme practice for building scalable website with PHP
Zingme practice for building scalable website with PHPZingme practice for building scalable website with PHP
Zingme practice for building scalable website with PHPChau Thanh
 
20150726 IoTってなに?ニフティクラウドmqttでやったこと
20150726 IoTってなに?ニフティクラウドmqttでやったこと20150726 IoTってなに?ニフティクラウドmqttでやったこと
20150726 IoTってなに?ニフティクラウドmqttでやったことDaichi Morifuji
 
Awsでつくるapache kafkaといろんな悩み
Awsでつくるapache kafkaといろんな悩みAwsでつくるapache kafkaといろんな悩み
Awsでつくるapache kafkaといろんな悩みKeigo Suda
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 Yugo Shimizu
 
Low Latency Mobile Messaging using MQTT
Low Latency Mobile Messaging using MQTTLow Latency Mobile Messaging using MQTT
Low Latency Mobile Messaging using MQTTHenrik Sjöstrand
 

En vedette (20)

Deep Dive Into ejabberd Pubsub Implementation
Deep Dive Into ejabberd Pubsub ImplementationDeep Dive Into ejabberd Pubsub Implementation
Deep Dive Into ejabberd Pubsub Implementation
 
Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1
Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1
Fighting XMPP abuse and spam with ejabberd - ejabberd Workshop #1
 
Squeezing Deep Learning Into Mobile Phones
Squeezing Deep Learning Into Mobile PhonesSqueezing Deep Learning Into Mobile Phones
Squeezing Deep Learning Into Mobile Phones
 
XMPP Academy #3
XMPP Academy #3XMPP Academy #3
XMPP Academy #3
 
Machine translation
Machine translationMachine translation
Machine translation
 
ActivEngage Dealer Chat Real-Time Communication
ActivEngage Dealer Chat Real-Time CommunicationActivEngage Dealer Chat Real-Time Communication
ActivEngage Dealer Chat Real-Time Communication
 
IoT Studio #1: Protocols introduction and connected jukebox
IoT Studio #1: Protocols introduction and connected jukeboxIoT Studio #1: Protocols introduction and connected jukebox
IoT Studio #1: Protocols introduction and connected jukebox
 
Smart Chat
Smart ChatSmart Chat
Smart Chat
 
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8 Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
Phoenix Presence: Le service temps réel de Phoenix - Paris.ex #8
 
IoT時代を支えるプロトコルMQTT技術詳解
IoT時代を支えるプロトコルMQTT技術詳解IoT時代を支えるプロトコルMQTT技術詳解
IoT時代を支えるプロトコルMQTT技術詳解
 
【 ITベンチャーを支えるテクノロジー 】チャットワークを支える技術|Chatwork株式会社
【 ITベンチャーを支えるテクノロジー 】チャットワークを支える技術|Chatwork株式会社【 ITベンチャーを支えるテクノロジー 】チャットワークを支える技術|Chatwork株式会社
【 ITベンチャーを支えるテクノロジー 】チャットワークを支える技術|Chatwork株式会社
 
One Click Deployment with Jenkins - PHP Unconference 2011
One Click Deployment with Jenkins - PHP Unconference 2011One Click Deployment with Jenkins - PHP Unconference 2011
One Click Deployment with Jenkins - PHP Unconference 2011
 
Zing Me Real Time Web Chat Architect
Zing Me Real Time Web Chat ArchitectZing Me Real Time Web Chat Architect
Zing Me Real Time Web Chat Architect
 
Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422Real-time Chat Backend on AWS IoT 20160422
Real-time Chat Backend on AWS IoT 20160422
 
Real-time Streaming and Querying with Amazon Kinesis and Amazon Elastic MapRe...
Real-time Streaming and Querying with Amazon Kinesis and Amazon Elastic MapRe...Real-time Streaming and Querying with Amazon Kinesis and Amazon Elastic MapRe...
Real-time Streaming and Querying with Amazon Kinesis and Amazon Elastic MapRe...
 
Zingme practice for building scalable website with PHP
Zingme practice for building scalable website with PHPZingme practice for building scalable website with PHP
Zingme practice for building scalable website with PHP
 
20150726 IoTってなに?ニフティクラウドmqttでやったこと
20150726 IoTってなに?ニフティクラウドmqttでやったこと20150726 IoTってなに?ニフティクラウドmqttでやったこと
20150726 IoTってなに?ニフティクラウドmqttでやったこと
 
Awsでつくるapache kafkaといろんな悩み
Awsでつくるapache kafkaといろんな悩みAwsでつくるapache kafkaといろんな悩み
Awsでつくるapache kafkaといろんな悩み
 
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜
 
Low Latency Mobile Messaging using MQTT
Low Latency Mobile Messaging using MQTTLow Latency Mobile Messaging using MQTT
Low Latency Mobile Messaging using MQTT
 

Similaire à Managing ejabberd Platforms with Docker - ejabberd Workshop #1

Docker Networking - Current Status and goals of Experimental Networking
Docker Networking - Current Status and goals of Experimental NetworkingDocker Networking - Current Status and goals of Experimental Networking
Docker Networking - Current Status and goals of Experimental NetworkingSreenivas Makam
 
Killer Docker Workflows for Development
Killer Docker Workflows for DevelopmentKiller Docker Workflows for Development
Killer Docker Workflows for DevelopmentChris Tankersley
 
Everything you need to know about Docker
Everything you need to know about DockerEverything you need to know about Docker
Everything you need to know about DockerAlican Akkuş
 
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...Nagios
 
Detailed Introduction To Docker
Detailed Introduction To DockerDetailed Introduction To Docker
Detailed Introduction To Dockernklmish
 
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018Mandi Walls
 
Docking postgres
Docking postgresDocking postgres
Docking postgresrycamor
 
Docker networking tutorial 102
Docker networking tutorial 102Docker networking tutorial 102
Docker networking tutorial 102LorisPack Project
 
Docker Swarm and Traefik 2.0
Docker Swarm and Traefik 2.0Docker Swarm and Traefik 2.0
Docker Swarm and Traefik 2.0Jakub Hajek
 
Cassandra and Docker Lessons Learned
Cassandra and Docker Lessons LearnedCassandra and Docker Lessons Learned
Cassandra and Docker Lessons LearnedDataStax Academy
 
Настройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'aНастройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'acorehard_by
 
OSCON: Advanced Docker developer workflows on Mac OS and Windows
OSCON: Advanced Docker developer workflows on Mac OS and WindowsOSCON: Advanced Docker developer workflows on Mac OS and Windows
OSCON: Advanced Docker developer workflows on Mac OS and WindowsDocker, Inc.
 
Advanced Docker Developer Workflows on MacOS X and Windows
Advanced Docker Developer Workflows on MacOS X and WindowsAdvanced Docker Developer Workflows on MacOS X and Windows
Advanced Docker Developer Workflows on MacOS X and WindowsAnil Madhavapeddy
 
Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014André Rømcke
 
SCUGBE_Lowlands_Unite_2017_Managing Windows Containers with Docker
SCUGBE_Lowlands_Unite_2017_Managing Windows Containers with DockerSCUGBE_Lowlands_Unite_2017_Managing Windows Containers with Docker
SCUGBE_Lowlands_Unite_2017_Managing Windows Containers with DockerKenny Buntinx
 

Similaire à Managing ejabberd Platforms with Docker - ejabberd Workshop #1 (20)

Docker Networking - Current Status and goals of Experimental Networking
Docker Networking - Current Status and goals of Experimental NetworkingDocker Networking - Current Status and goals of Experimental Networking
Docker Networking - Current Status and goals of Experimental Networking
 
Killer Docker Workflows for Development
Killer Docker Workflows for DevelopmentKiller Docker Workflows for Development
Killer Docker Workflows for Development
 
Containers and Docker
Containers and DockerContainers and Docker
Containers and Docker
 
Demystifying kubernetes
Demystifying kubernetesDemystifying kubernetes
Demystifying kubernetes
 
Everything you need to know about Docker
Everything you need to know about DockerEverything you need to know about Docker
Everything you need to know about Docker
 
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
Nagios Conference 2014 - Spenser Reinhardt - Detecting Security Breaches With...
 
Docker
DockerDocker
Docker
 
OpenStack Summit
OpenStack SummitOpenStack Summit
OpenStack Summit
 
Detailed Introduction To Docker
Detailed Introduction To DockerDetailed Introduction To Docker
Detailed Introduction To Docker
 
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
 
Docking postgres
Docking postgresDocking postgres
Docking postgres
 
Docker networking tutorial 102
Docker networking tutorial 102Docker networking tutorial 102
Docker networking tutorial 102
 
Docker Swarm and Traefik 2.0
Docker Swarm and Traefik 2.0Docker Swarm and Traefik 2.0
Docker Swarm and Traefik 2.0
 
Cassandra and Docker Lessons Learned
Cassandra and Docker Lessons LearnedCassandra and Docker Lessons Learned
Cassandra and Docker Lessons Learned
 
Настройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'aНастройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'a
 
OSCON: Advanced Docker developer workflows on Mac OS and Windows
OSCON: Advanced Docker developer workflows on Mac OS and WindowsOSCON: Advanced Docker developer workflows on Mac OS and Windows
OSCON: Advanced Docker developer workflows on Mac OS and Windows
 
Advanced Docker Developer Workflows on MacOS X and Windows
Advanced Docker Developer Workflows on MacOS X and WindowsAdvanced Docker Developer Workflows on MacOS X and Windows
Advanced Docker Developer Workflows on MacOS X and Windows
 
Docker-Intro
Docker-IntroDocker-Intro
Docker-Intro
 
Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014
 
SCUGBE_Lowlands_Unite_2017_Managing Windows Containers with Docker
SCUGBE_Lowlands_Unite_2017_Managing Windows Containers with DockerSCUGBE_Lowlands_Unite_2017_Managing Windows Containers with Docker
SCUGBE_Lowlands_Unite_2017_Managing Windows Containers with Docker
 

Plus de Mickaël Rémond

Go for Real Time Streaming Architectures - DotGo 2017
Go for Real Time Streaming Architectures - DotGo 2017Go for Real Time Streaming Architectures - DotGo 2017
Go for Real Time Streaming Architectures - DotGo 2017Mickaël Rémond
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec GoMickaël Rémond
 
Building Scalable Systems: What you can learn from Erlang - DotScale 2016
Building Scalable Systems: What you can learn from Erlang - DotScale 2016Building Scalable Systems: What you can learn from Erlang - DotScale 2016
Building Scalable Systems: What you can learn from Erlang - DotScale 2016Mickaël Rémond
 
Property-based testing of XMPP: generate your tests automatically - ejabberd ...
Property-based testing of XMPP: generate your tests automatically - ejabberd ...Property-based testing of XMPP: generate your tests automatically - ejabberd ...
Property-based testing of XMPP: generate your tests automatically - ejabberd ...Mickaël Rémond
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communautéMickaël Rémond
 
Archipel Introduction - ejabberd SF Meetup
Archipel Introduction - ejabberd SF MeetupArchipel Introduction - ejabberd SF Meetup
Archipel Introduction - ejabberd SF MeetupMickaël Rémond
 
A vision for ejabberd - ejabberd SF Meetup
A vision for ejabberd - ejabberd SF MeetupA vision for ejabberd - ejabberd SF Meetup
A vision for ejabberd - ejabberd SF MeetupMickaël Rémond
 
ProcessOne Push Platform: XMPP-based Push Solutions
ProcessOne Push Platform: XMPP-based Push SolutionsProcessOne Push Platform: XMPP-based Push Solutions
ProcessOne Push Platform: XMPP-based Push SolutionsMickaël Rémond
 
WaveOne server and client by ProcessOne
WaveOne server and client by ProcessOneWaveOne server and client by ProcessOne
WaveOne server and client by ProcessOneMickaël Rémond
 
Real time Web Application with XMPP and Wave
Real time Web Application with XMPP and WaveReal time Web Application with XMPP and Wave
Real time Web Application with XMPP and WaveMickaël Rémond
 
Real life XMPP Instant Messaging
Real life XMPP Instant MessagingReal life XMPP Instant Messaging
Real life XMPP Instant MessagingMickaël Rémond
 

Plus de Mickaël Rémond (17)

Go for Real Time Streaming Architectures - DotGo 2017
Go for Real Time Streaming Architectures - DotGo 2017Go for Real Time Streaming Architectures - DotGo 2017
Go for Real Time Streaming Architectures - DotGo 2017
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec Go
 
Building Scalable Systems: What you can learn from Erlang - DotScale 2016
Building Scalable Systems: What you can learn from Erlang - DotScale 2016Building Scalable Systems: What you can learn from Erlang - DotScale 2016
Building Scalable Systems: What you can learn from Erlang - DotScale 2016
 
Property-based testing of XMPP: generate your tests automatically - ejabberd ...
Property-based testing of XMPP: generate your tests automatically - ejabberd ...Property-based testing of XMPP: generate your tests automatically - ejabberd ...
Property-based testing of XMPP: generate your tests automatically - ejabberd ...
 
XMPP Academy #2
XMPP Academy #2XMPP Academy #2
XMPP Academy #2
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté
 
XMPP Academy #1
XMPP Academy #1XMPP Academy #1
XMPP Academy #1
 
Archipel Introduction - ejabberd SF Meetup
Archipel Introduction - ejabberd SF MeetupArchipel Introduction - ejabberd SF Meetup
Archipel Introduction - ejabberd SF Meetup
 
A vision for ejabberd - ejabberd SF Meetup
A vision for ejabberd - ejabberd SF MeetupA vision for ejabberd - ejabberd SF Meetup
A vision for ejabberd - ejabberd SF Meetup
 
Multitasking in iOS 7
Multitasking in iOS 7Multitasking in iOS 7
Multitasking in iOS 7
 
ProcessOne Push Platform: XMPP-based Push Solutions
ProcessOne Push Platform: XMPP-based Push SolutionsProcessOne Push Platform: XMPP-based Push Solutions
ProcessOne Push Platform: XMPP-based Push Solutions
 
WaveOne server and client by ProcessOne
WaveOne server and client by ProcessOneWaveOne server and client by ProcessOne
WaveOne server and client by ProcessOne
 
Real time Web Application with XMPP and Wave
Real time Web Application with XMPP and WaveReal time Web Application with XMPP and Wave
Real time Web Application with XMPP and Wave
 
Erlang White Label
Erlang White LabelErlang White Label
Erlang White Label
 
OneTeam Media Server
OneTeam Media ServerOneTeam Media Server
OneTeam Media Server
 
OneTeam Media Server
OneTeam Media ServerOneTeam Media Server
OneTeam Media Server
 
Real life XMPP Instant Messaging
Real life XMPP Instant MessagingReal life XMPP Instant Messaging
Real life XMPP Instant Messaging
 

Dernier

"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
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
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 

Dernier (20)

"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
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
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 

Managing ejabberd Platforms with Docker - ejabberd Workshop #1

  • 2. What is Docker • Linux tool, written in Go language • Started in 2010 as a concept at dotCloud SARL • Published 2y ago by creator Solomon Hykes with Open Source license (Apache 2.0) • Handled by Docker Inc • Partnership with Red Hat, IBM, Google, Amazon... • Automates the deployment of applications as standalone software containers
  • 3. High level view • Own process space • Own network interface • Include all binaries/libs required by your software • Works the same on every Linux host • Just need Linux Kernel on host machine
  • 4. Low level view • Like chroot++ or improved BSD jails, without need of custom configuration and deployment scripts • Shares Kernel with Host and other containers, but in isolated environment • No need for device emulation (neither HVM nor PV) • Adds API to existing Linux Kernel features: LXC, cgroups, namespaces
  • 5. Container vs VM • Virtual Machine: emulates hardware, runs the Operating System and applications • Docker: system process with isolated view of the namespace and resources, runs libraries and applications. No emulation layer. Accumulates AUFS mounts for container filesystem.
  • 7. Why it matters • Containers start fast, are smaller than VM • Build once run everywhere, matches cloud needs • Containers are easy to replicate (docker hub) • No runtime resources overhead, no emulation • Allow low level packaging optimisation/setup
  • 8. Drawbacks • Works only on Linux (for now?) • Requires Linux 3.8+ • Kernels older than 3.10 lack some of the features required to run some containers
  • 9. ejabberd requirements • Ejabberd beam files • Erlang dependencies beam and NIF • Configuration and runtime files • Erlang VM and system library dependencies: libpthread, libm, libssl, libc...
  • 10. Installer vs Container • Erlang is already a VM after all ! Installed may be sufficient ? • Installer must include everything (code+database) and can not handle upgrade without external and custom scripts • Installer is standalone but uses hosts's libc, which may differ from one host to another • No clean way to use custom configuration and database with Installer/rpm/deb • Containers gives deeper application integration, makes upgrade process simpler (more control on global environment), and ensure same environment deployed everywhere. (no hazardous dependencies issues)
  • 11. Installations issues • Heterogeneous setup: installed from sources, from official binary installer, from deb/rpm/pkgsrc/brew/etc... => impossible to reproduce clean, secure and optimised setup everywhere, with same version of erlang for a given ejabberd release • Way too much combination, from system libs to erlang version. Many possible configuration, many patches on packaged Erlang and/or system libraries, etc... • No hands on host's network settings and tunning • Binary installer gives more control on software dependencies, but still depends on host's libc compatibility and does not ensure user uses bundled libraries.
  • 12. Simple container • From Debian Jessie • Download ProcessOne binary installer • Install using unattended mode • Apply own configuration => Build new container for every release => Depends on ProcessOne binary packaging
  • 13. ejabberd container • By Rafael Römhild (rroemhild/ejabberd) • Complete and customisable container • Available for all tags since 14.12 up to 15.10 • Based on Debian Jessie • Uses debian's Erlang/OTP, build ejabberd from sources.
  • 14. Environment EJABBERD_HTTPS true EJABBERD_STARTTLS true EJABBERD_S2S_SSL true EJABBERD_PROTOCOL_OPTIONS_TLSV1 false EJABBERD_LOGLEVEL 4 EJABBERD_MUC_CREATE_ADMIN_ONLY EJABBERD_REGISTER_ADMIN_ONLY EJABBERD_MOD_ADMIN_EXTRA true EJABBERD_MOD_MUC_ADMIN false EJABBERD_REGISTER_TRUSTED_NETWORK_ONLY EJABBERD_SKIP_MODULES_UPDATE false EJABBERD_AUTH_METHOD internal EJABBERD_ADMINS EJABBERD_USERS ERLANG_NODE ejabberd@localhost ERLANG_COOKIE ERLANG_OPTIONS -noshell XMPP_DOMAIN TZ Europe/Paris
  • 15. Configuration • Few environment variables allows to change simple configuration settings, but default configuration remains very generic, too generic... • Better create your own container with your own configuration and certificates: FROM rroemhild/ejabberd:15.10 ADD ./ejabberd.yml /etc/ejabberd/ejabberd.yml ADD ./ejabberdctl.cfg /etc/ejabberd/ejabberdctl.cfg ADD ./example.com.pem /opt/ejabberd/ssl/example.com.pem $ docker build -t p1/ejabberd:15.10 .
  • 16. Persistent storage • Using a data container, hum... really ? docker create --name ejabberd-data rroemhild/ejabberd-data docker run -d --name "ejabberd" --volumes-from ejabberd-data .... rroemhild/ejabberd:15.10 • Using mounts from host filesystem docker run -d --name "ejabberd" -v $PWD/database:/opt/ejabberd/database -v $PWD/logs:/var/logs/ejabberd .... rroemhild/ejabberd:15.10
  • 17. Using custom container • Simplify both configuration and customisations • Allows better integration with your environment • Allows implicit linking with your database container • Very simple to write and maintain • Build "ready to use" containers for your use
  • 18. Deploy/share containers • Need a docker hub account (public/private) • docker push me/ejabberd:15.10 • docker pull me/ejabberd:15.10 • docker run me/ejabberd:15.10
  • 19. Docker hub • Public repository to share your app • Private repository to share container with dev team • Private repository to easy deploy app in-house • https://docs.docker.com/docker-hub/
  • 20. Start ejabberd docker run -i -t -P --name "15.09" -p 5222:5222 -p 5269:5269 -p 5280:5280 -h 'example.net' -e "XMPP_DOMAIN=example.net" -e "ERLANG_NODE=node1" -e "ERLANG_COOKIE=demo" -e "EJABBERD_ADMINS=admin@example.net" -e "EJABBERD_USERS=admin@example.net:password1234" -e "TZ=Europe/Paris" -v $PWD/database:/opt/ejabberd/database -v $PWD/logs/node1:/var/log/ejabberd p1/ejabberd:15.09 live docker start 15.09 docker exec 15.09 ejabberdctl status docker stop 15.09
  • 21. Simple upgrade • Simple switch from 15.09 to 15.10 when using same data container or mounting point, and also using same configuration. • Allow easy upgrade/rollback but stops service if serving with a single node. docker start 15.09 docker exec 15.09 ejabberdctl status docker stop 15.09 docker start 15.10 docker exec 15.10 ejabberdctl status DEMO
  • 22. So what ? • Using our custom container, upgrading from 15.09 to 15.10 • Using host mounts for data and preconfigured ejabberd • a simple start/stop of the right container is enough => NO EXTRA CHANGE REQUIRED ! • improvement: N+1 / N-1 automatic upgrade/migration code needed ejabberd side for full coverage.
  • 23. Smooth upgrade • Using haproxy as front-end, two ejabberd containers running on same host, mapping them to their own ports and own erlang node name to play with cluster current container A: -p 15222:5222 next container B: -p 25222:5222 • Haproxy redirects 5222 to 15222, then start container B, then add B in the cluster, then haproxy redirects 5222 to 25222, after a while remove A from cluster and stop A. • - : Requires lots of automated stuff, complex, not very clean • + : Allows using only one host without disconnecting all your users
  • 24. Cluster upgrade • Run ejabberd container on several hosts • Get them as one ejabberd cluster • Apply simple upgrade node after node • Disconnected users automatically reconnect to another running node • Load can be redirected at balancer level to reduce impact of disconnections (takes more time, depends on service use)
  • 25. Cluster issue • Ejabberd nodes needs direct network link at each other, being part of same network • Containers runs on different hosts • Docker links are only bound to local host • Containers are isolated • Need to resolve remote hosts: multi-host networking using overlay network driver is docker solution
  • 26. Multi host networking • Needs Linux 3.16+ • Access to key-value store (Consul, Etcd or ZooKeeper) • A configured Engine daemon on each host in the cluster • Not straight forward solution $ docker network create -d overlay --subnet=192.168.0.0/16 --subnet=192.170.0.0/16 --gateway=192.168.0.100 --gateway=192.170.0.100 --ip-range=192.168.1.0/24 --aux-address a=192.168.1.5 --aux-address b=192.168.1.6 --aux-address a=192.170.1.5 --aux-address b=192.170.1.6 my-multihost-network
  • 27. Simpler multi host • Docker container can access host interface being bridged by its own interface • Need private internal network (ip alias can work) • Containers can ping by internal network IP • Custom container needs /etc/hosts and inetrc with static IP for all your nodes • But needs update /etc/hosts when adding nodes. So this is OK until our cluster changes over time (no easy scale)
  • 28. Other DNS solutions • dnsdocker using docker compose • etcd, consul or zookeeper for use with overlay • other container management systems like Rancher • possibles improvement with new Networking in Docker 1.9 (relay on an official image to provide clean DNS resolution across containers ?) => need improvements to support dynamic cluster
  • 29. ejabberd container improvements (WIP) • Allow easy custom configuration • Native support of multi-host clustering and transient joincluster/leavecluster • Consistency with standard installation • Custom minimalist Erlang/OTP+Elixir with hipe support • Smaller container (based on Alpine instead of Debian, from 245Mb to 35Mb !)