opennms meets docker
TRANSCRIPT
SchneiderMatic
picture source https://flic.kr/p/jEnibL
OpenNMS meets DockerShip OpenNMS Faster, Easier and with more Fun
20151001 | Markus Schneider | OUCE 2015
@schneidermatic
Markus Schneider | [email protected] | schneidermatic.blogspot.com
SchneiderMaticAbout Me
3picture source https://flic.kr/p/ovqps1
SchneiderMaticAgenda
Docker Basics
Run OpenNMS with Docker
OpenNMS Dockerfiles on GitHub
4picture source https://flic.kr/p/ovqps1
SchneiderMaticAgenda
Docker Basics
Run OpenNMS with Docker
OpenNMS Dockerfiles on GitHub
picture source - https://flic.kr/p/5o5H1E
Docker Mantra
Build
Ship
Run Any App
Anywhere
picture source https://flic.kr/p/i1cyb9
6
SchneiderMaticAre Companies using Docker?
http://www.indeed.com/jobtrends?q=docker&relative=1
picture source - https://flic.kr/p/5o5H1E
Docker Products
Docker Architecture
Docker Engine
Docker Registry Hub
Docker Compose
8
SchneiderMaticDocker Architecture
Profile/Organisation
Docker Daemon
Container
Container
Container
Docker Host (My Linux Box)
Image 2
Image 3
Image N
Image 1
Image 2
Image 3
Image N
Image 1
Docker Client
Docker Registry Hub
Further information - https://docs.docker.com/introduction/understanding-docker/
9
SchneiderMaticDocker Engine
Docker Engine is build on top of the Linux kernel
Docker Engine can only be run directly on Linux OS
Boot2docker is needed for Mac and Microsoft Windows OS
https://docs.docker.com/installation/windows/#learnthekeyconceptsbeforeinstalling
10
SchneiderMaticDocker Registry Hub
Central place for Docker images
SoftwareasaService platform for sharing, finding and extending Docker images
Features
Private repositories Organizations and teams Automated Builds Webhooks
https://hub.docker.com/
11
SchneiderMaticDocker Compose
"Compose is a tool for defining and running multicontainer applications with Docker. With Compose, you define a multicontainer application in a single file, then spin your application up in a single command which does everything that needs to be done to get it running. (source – http://docker.com)
OpenNMS(Container)
PostgreSQL(Container)
Link
docker-compose.ymlopennms: image: opennms/app:16.0.2-1_co66 environment: - DB_POSTGRES_PASSWORD=mysecretpassword ports: - "8980:8980" - "18980:18980" - "1099:1099" - "8101:8101" - "61616:61616" links: - postgrespostgres: image: postgres:9.4 environment: - DB_POSTGRES_PASSWORD=mysecretpassword ports: - "5432:5432"
picture source - https://flic.kr/p/5o5H1E
Docker Components
Docker Image
Docker Container
Dockerfile
picture source https://flic.kr/p/82cqTr
13
SchneiderMaticDocker Image
A Docker image can build on top of another Docker image
The first image layer is called a base image All the other layers except the last image layer are
called parent images Images inherit all the properties and settings of their
parent images
Images can be referenced by image ID or names
Local Docker images can be listed with $ docker images
14
SchneiderMaticDocker Container
A Docker container is created when we execute$ docker run <image>
A writeable layer is added on top of all the image layers
This layer can have two different states:
running exited
Changes are permanent between start & stop
Changes are not written to the underlying image
15
SchneiderMaticDockerfile
A file written in a DSL that contains instructions onsetting up a Docker image
The docker build command builds an image from a Dockerfile
OpenNMS Docker files are maintained on GitHub:https://github.com/opennmsforge/opennmsdockerfiles
# CommentINSTRUCTION arguments
FROM opennms/postgresql:pg9.3_co6.6 MAINTAINER [email protected] & [email protected]# Set work dir WORKDIR /tmp# JAVA ENVENV JAVA_VERSION 8u45ENV BUILD_VERSION b14ENV JAVA_HOME=/usr/java/orajava8# OPENNMS ENVENV OPENNMS_HOME /opt/opennms...
picture source - https://flic.kr/p/5o5H1E
OpenNMS Specifics
Docker Registry Hub Repositories
OpenNMS Docker Image Types
OpenNMS Docker Image Tags
picture source https://flic.kr/p/kaaStW
17
SchneiderMaticDocker Registry Hub Repoitory
18
SchneiderMaticOpenNMS Docker Image Types
CentOS 6.6
PostgreSQL 9.3
OpenNMS 16.0.2_01
All
CentOS 6.6
OpenNMS 16.0.2_01
App
CentOS 6.6
PostgreSQL 9.3
PostgreSQL
19
SchneiderMaticOpenNMS Docker Image Tags
16.0.2-1_pg9.3_co6.6
OpenNMS CentOS
PostgreSQL
20picture source https://flic.kr/p/ovqps1
SchneiderMaticAgenda
Docker Basics
Run OpenNMS with Docker
OpenNMS Dockerfiles on GitHub
21
SchneiderMaticDocker Registry Hub Repoitory
CentOS 6.6
PostgreSQL 9.3
OpenNMS 16.0.2_01
All
CentOS 6.6
OpenNMS 16.0.2_01
App
CentOS 6.6
PostgreSQL 9.3
PostgreSQL
22
SchneiderMaticDocker CLI $ docker pull
$ docker pull opennms/all:16.0.21_pg9.3_co6.6$ export IMAGE="opennms/all:16.0.21_pg9.3_co6.6"$ export NAME="opennms1"$ mkdir ~/opennmsdocker && touch HelloDocker.txt$ cd ~/opennmsdocker
Only for thepresentationneeded!
23
SchneiderMaticDocker CLI $ docker pull
Profile/Organisation
Docker Daemon
Docker Host (My Linux Box)
Docker Client
$ docker pull <image>
Docker Registry Hub
opennms/app:16.0.2-1_co6.6
opennms/postgres:pg9.3_co6.6
opennms/all:16.0.2-1_pg9.3_co6.6
opennms/all:16.0.2-1_pg9.3_co6.6
24
SchneiderMaticDocker CLI $ docker run
$ docker run v $(pwd):$(pwd) w $(pwd) dit p 8980:8980 p 8443:8443 p 18980:18980 p 1099:1099 p 8101:8101 p 61616:61616 p 5432:5432 name $NAME $IMAGE
25
SchneiderMaticDocker CLI – $ docker run
Profile/Organisation
Docker Daemon
Docker Host (My Linux Box)
Docker Client
$ docker run <image>
Docker Registry Hub
opennms/app:16.0.2-1_co6.6
opennms/postgres:pg9.3_co6.6
opennms/all:16.0.2-1_pg9.3_co6.6
opennms/all:16.0.2-1_pg9.3_co6.6
opennms-1
26
SchneiderMaticDocker CLI $ docker inspect
$ CONTAINER_ID=$(docker ps | grep "$IMAGE" | awk '{ print $1 }')$ IP_ADDRESS=$(docker inspect f '{{ .NetworkSettings.IPAddress }}' $CONTAINER_ID)$ printf "OpenNMS Console http://$IP_ADDRESS:8980/opennms\n"
27
SchneiderMaticDocker CLI – Running Container
28
SchneiderMaticDocker CLI – $ docker attach
$ docker stop $CONTAINER_ID && docker start $CONTAINER_ID $ docker attach $CONTAINER_ID$ CRTL + P, CRTL + Q # detach from the container
29
SchneiderMaticDocker CLI – $ docker run
Profile/Organisation
Docker Daemon
Docker Host (My Linux Box)
Docker Client
$ docker run <image>
Docker Registry Hub
opennms/app:16.0.2-1_co6.6
opennms/postgres:pg9.3_co6.6
opennms/all:16.0.2-1_pg9.3_co6.6
opennms/all:16.0.2-1_pg9.3_co6.6
opennms-1
psql
30
SchneiderMaticDocker CLI – $ docker attach
$ psql U postgres h $IP_ADDRESS $ postgres # \l
31
SchneiderMaticDocker Registry Hub Repoitory
CentOS 6.6
PostgreSQL 9.3
OpenNMS 16.0.2_01
All
CentOS 6.6
OpenNMS 16.0.2_01
App
CentOS 6.6
PostgreSQL 9.3
PostgreSQL
32
SchneiderMaticDocker Compose
$ cd ~/opennmsdocker$ git clone https://github.com/opennmsforge/opennmsdockercompose$ cd ./opennmsdockercompose && git checkout app/16.0.21_co66$ dockercompose up d
33
SchneiderMaticDocker Compose
Profile/Organisation
Docker Daemon
Docker Host (My Linux Box)
Docker Client
Docker Registry Hub
opennms/app:16.0.2-1_co6.6
opennms/postgres:pg9.3_co6.6
opennms/all:16.0.2-1_pg9.3_co6.6
opennms/all:16.0.2-1_pg9.3_co6.6
opennms-1
opennms/app:16.0.2-1_co6.6
opennms/postgres:pg9.3_co6.6
Docker Compose
$ dockercompose up d
34
SchneiderMaticDocker Compose
Profile/Organisation
Docker Daemon
Docker Host (My Linux Box)
Docker Client
Docker Registry Hub
opennms/app:16.0.2-1_co6.6
opennms/postgres:pg9.3_co6.6
opennms/all:16.0.2-1_pg9.3_co6.6
opennms/all:16.0.2-1_pg9.3_co6.6
opennms-1
opennms/app:16.0.2-1_co6.6
opennms/postgres:pg9.3_co6.6
Docker Compose
$ dockercompose up d
opennms-2
postgresql-1
35
SchneiderMaticDocker Compose
$ docker ps
36picture source https://flic.kr/p/ovqps1
SchneiderMaticAgenda
Docker Basics
Run OpenNMS with Docker
OpenNMS Dockerfiles on GitHub
37
SchneiderMaticOpenNMS Forge
docker
38
SchneiderMaticOpenNMS Forge
39picture source https://flic.kr/p/ovqps1
SchneiderMaticThank You!
Questions?