+ All Categories
Home > Technology > Docker and plone

Docker and plone

Date post: 16-Jan-2017
Category:
Upload: alin-voinea
View: 314 times
Download: 1 times
Share this document with a friend
42
From development to continuous deployment. Docker Alin Voinea Eau de Web, Romania Plone &
Transcript

From development to continuous deployment.

Docker

Alin Voinea Eau de Web, Romania

Plone

&

What is?

What is Docker?

Docker is for your system...

What is Docker?

...what virtualenv is for Python

What is Docker?

● Isolated environment● Same environment (Linux, Mac, Windows...)● Same environment (Devel, Production)● Use your favorite Linux distribution

● ...or, build it from scratch

Before Docker

Installing and running Plonewithout Docker

Plone - w/o Docker

Libraries● libz (dev)● libjpeg (dev)*● readline (dev)*● libexpat (dev)● libssl or openssl (dev)● libxml2 >= 2.7.8 (dev)*● libxslt >= 1.1.26 (dev)*

Source:docs.plone.org

Python● Python 2.7 (dev), built with support for

expat (xml.parsers.expat), zlib and ssl. ● (Python XML support may be a separate

package on some platforms.)*● virtualenv*

Plone - w/o Docker

Minimal build~/$ mkdir Plone-5

~/$ cd Plone-5

~/Plone-5$ virtualenv-2.7 zinstance

~/Plone-5$ cd zinstance

~/Plone-5/zinstance$ bin/pip install zc.buildout

~/Plone-5/zinstance$

echo """

[buildout]

extends =

http://dist.plone.org/release/5-latest/versions.cfg

parts =

instance

[instance]

recipe = plone.recipe.zope2instance

user = admin:admin

http-address = 8080

eggs =

Plone

Pillow

""" > buildout.cfg

Source:docs.plone.org

Plone - w/o Docker

This will start a long download and build process ...

Errors like "SyntaxError: ("'return' outside function"..."" may be ignored.

After it finished you can start Plone in foreground-mode with:

$ bin/buildout

$ bin/instance fg

Source:docs.plone.org

Installing and running Plonewith Docker

Plone - w/ Docker

$ docker run -p 8080:8080 plone

hub.docker.com/_/plone

Plone Add-ons

Plone Add-ons

$ docker run \ -e ADDONS=”eea.facetednavigation collective.easyform” \ plone

Develop Plone Add-ons

$ mkdir src$ cd src$ git clone https://github.com/collective/eea.facetednavigation$ chown -R 500 ../src

$ docker run \ -e ADDONS=”eea.facetednavigation” \ -e DEVELOP=”src/eea.facetednavigation” \ -v /host/path/to/src:/plone/instance/src \ plone fg

Debugging - pdb.set_trace()

● Run Plone from the inside of the container

$ docker run -it -e… plone bash$ bin/instance fg......Zope ready to handle requests...(pdb)

Storage

Where is my Data.fs?

● Docker volume

$ docker run plone$ docker volume lslocal f2b18118ef8c5e7c9ef10ef418f27e2a51502220ddecc218c9d28f

● Default location

$ ls /var/lib/docker/volumesf2b18118ef8c5e7c9ef10ef418f27e2a51502220ddecc218c9d28f

Where is my Data.fs?

● Docker volume labels

$ docker run -v plone-data:/data plone$ docker volume ls plone-data

Where is my Data.fs?

● Unlabeled Docker volumes

$ docker run --name my-plone plone$ docker volume ls e2c080c412bc4d33b7d740ca7fee25

● On remove:

$ docker rm -v my-plone$ docker volume ls

OMG, WHERE IS MY DATA?

Where is my Data.fs?

● Always LABEL your Docker volumes to avoid data loss

$ docker run --name=my-plone -v plone-data:/data plone

● On remove

$ docker rm -v my-plone$ docker volume lsplone-data

● Explicitly remove volumes:

$ docker volume rm plone-data

ZEO

# zeo client 1$ docker run --link=zeo \ -e ZEO_ADDRESS=zeo:8100 plone

ZEO Server / ZEO Clients

# zeo server$ docker run --name=zeo plone zeoserver

# zeo client 1$ docker run --link=zeo \ -e ZEO_ADDRESS=zeo:8100 plone

Extend

Extending

● extended_buildout.cfg ● Dockerfile

Extend: extended_buildout.cfg

[buildout]

eggs +=

plone.restapi

collective.easyform

collective.solr

eea.facetednavigation

Extend: Dockerfile

FROM plone:5.0.6

USER root

RUN apt-get install -y ...

USER plone

COPY extended_buildout.cfg /plone/instance/

RUN bin/buildout -c my_buildout.cfg

Extend: Build & Run

$ docker build -t my-plone:5 .

$ docker run my-plone:5

Extend: Dockerfile documentation

docs.docker.com/engine/reference/builder

Orchestration: Single host

$ pip install docker-compose

Docker Compose: Plone & ZEO

$ vim docker-compose.yml

$ docker-compose up

$ docker-compose scale plone=3

version: "2"

volumes:

plone-data:

driver: local

services:

plone:

image: plone

environment:

- ZEO_ADDRESS=zeo:8100

zeo:

image: plone

command: zeoserver

volumes:

- plone-data:/data

Docker Compose: Load balancer

$ vim docker-compose.yml

$ docker-compose up

services:

...

load-balancer :

image: eeacms/haproxy

ports:

- 80:5000

- 1936:1936

environment:

- BACKENDS=plone

- BACKENDS_PORT=8080

- DNS_ENABLED=True

Docker Compose: Documentation

docs.docker.com/compose

Orchestration: Multiple hosts

Rancher

“A Complete Platform for Running Containers”

Rancher: Install & running

$ docker run -p 8080:8080 rancher/server

Rancher: Demo

https://youtu.be/44zzuAUS-1M

Continuous Deployment

Docs

● hub.docker.com/_/plone● docs.plone.org (soon)● docker.com● rancher.com● github.com/eea?query=docker

Thanks

● Sven Strack● Antonio de Marinis● Eau de Web● Liana Voinea (my wife)


Recommended