Post on 16-Jan-2017
transcript
What is Docker?
● Isolated environment● Same environment (Linux, Mac, Windows...)● Same environment (Devel, Production)● Use your favorite Linux distribution
● ...or, build it from scratch
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
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)
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 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: 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
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: Demo
https://youtu.be/DumoVlrOk4w
Docs
● hub.docker.com/_/plone● docs.plone.org (soon)● docker.com● rancher.com● github.com/eea?query=docker