Docker Guide SUSE Linux Enterprise Server 12 SP3

User Manual: Pdf

Open the PDF directly: View PDF PDF.
Page Count: 32

DownloadDocker Guide - SUSE Linux Enterprise Server 12 SP3
Open PDF In BrowserView PDF
Docker Guide
SUSE Linux Enterprise Server 12 SP3

Docker Guide
SUSE Linux Enterprise Server 12 SP3

This guide introduces Docker, a lightweight virtualization solution to run virtual
units simultaneously on a single control host.

Publication Date: October 26, 2017
SUSE LLC

10 Canal Park Drive
Suite 200

Cambridge MA 02141
USA

https://www.suse.com/documentation
Copyright © 2006– 2017 SUSE LLC and contributors. All rights reserved.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free

Documentation License, Version 1.2 or (at your option) version 1.3; with the Invariant Section being this

copyright notice and license. A copy of the license version 1.2 is included in the section entitled “GNU
Free Documentation License”.

For SUSE trademarks, see http://www.suse.com/company/legal/ . All other third-party trademarks are the
property of their respective owners. Trademark symbols (®, ™ etc.) denote trademarks of SUSE and its
affiliates. Asterisks (*) denote third-party trademarks.

All information found in this book has been compiled with utmost attention to detail. However, this does

not guarantee complete accuracy. Neither SUSE LLC, its affiliates, the authors nor the translators shall be
held liable for possible errors or the consequences thereof.

Contents

1
1.1
1.2

Docker Overview 1
Docker Architecture 3
Docker Drivers 3
Container Drivers 3 • Storage Drivers 4

2

Docker Installation 5

2.1

General Preparation 5

2.2

Networking 6
Networking Limitations on Power Architecture 7

3

Installing sle2docker 8

4

Storing Images 9

4.1

What is a Docker Registry? 9

4.2

Installing and Setting Up Docker Registry 10

4.3

Limitations 11

4.4

Portus 11

5

Creating Custom Images 13

5.1

Obtaining Base SLES Images 13

5.2

Customizing SLES Docker Images 14
Creating a Custom SLE 12 Image 15 • Creating a Custom SLE 11 SP3
Image 15 • Adding SLE Extensions and Modules to Images 16

6

iii

Dockerizing Applications 17

6.1

Running an Application with Specific Package Versions 18

6.2

Running Applications with Specific Configuration 19

Docker Guide

6.3

Sharing Data between an Application and the Host System 20

6.4

Applications Running in the Background 21

7
7.1

A
A.1

Working with Containers 23
Linking Containers 23

Documentation Updates 24
September 2017 (Initial Release of SUSE Linux Enterprise Server 12
SP3) 24

A.2

November 2016 (Initial Release of SUSE Linux Enterprise Server 12
SP2) 24

B
B.1

iv

GNU Licenses 26
GNU Free Documentation License 26

Docker Guide

1 Docker Overview
Docker is a lightweight virtualization solution to run multiple virtual units (containers) simultaneously on a single control host. Containers are isolated with Kernel Control Groups ( Control
groups ) and Namespace .

Full virtualization solutions such as Xen, KVM, or libvirt are based on the processor simu-

lating a complete hardware environment and controlling the virtual machines. However, Docker only provides operating system-level virtualization where the Linux kernel controls isolated
containers.

Before going into detail about Docker, let's define some of the terms used:
Docker engine

The docker engine is a server-client type application that performs all tasks related to
virtual machines. The Docker engine comprises the following:

daemon - is the server side of the docker engine that manages all docker objects
(images, containers, network used by containers, etc.)

REST API - applications can use this API to communicate directly with the daemon
a CLI client - that enables you to communicate with the daemon. If the daemon is

running on a different machine than the CLI client, the CLI client can communicate
by using network sockets or the REST API provided by the docker engine.
Image

An image is a read-only template used to create a virtual machine on the host server. A

Docker image is made by a series of layers built one over the other. Each layer corresponds
to a permanent change, for example an update of an application. The changes are stored
in a le called a dockerfile. For more details see the official Docker documentation (http://
docs.docker.com/engine/reference/glossary#image)

.

Dockerfile

A dockerfile stores changes made on top of the base image. The Docker engine reads instructions in the dockerfile and builds a new image according to the instructions.
Container

A container is a running instance based on a particular Docker Image. Each container can
be distinguished by a unique container ID.

1

SLES 12 SP3

Registry

A registry is storage for already created images. It typically contains several repositories
There are two types of registry:

public registry - where everyone (usually registered) can download and use images.
A typical public registry is Docker Hub (https://hub.docker.com/) .

private registry - these are accessible for particular users or from a particular private
network.
Repository

A repository is storage in a registry that stores a different version of a particular image. You
can pull or push images from or to a repository.
Control groups

Control groups, also called cgroups , is a Linux kernel feature that allows aggregating or

partitioning tasks (processes) and all their children into hierarchically organized groups
to isolate resources.
Namespace

Docker uses namespaces for its containers that isolates resources reserved for particular
containers.
Orchestration

In a production environment you typically need a cluster with many containers on each
cluster node. The containers must cooperate and you need a framework that enables you
to manage the containers automatically. The act of automatic container management is
called container orchestration and is typically handled by Kubernetes.

Docker is a platform that allows developers and system administrators to manage the complete

life cycle of images. Docker makes it easy to build, ship and run images containing applications.
Docker provides you with the following advantages:
Isolation of applications and operating systems through containers.
Near native performance, as Docker manages allocation of resources in real time.
Controls network interfaces and resources available inside containers through cgroups.
Versioning of images.

2

SLES 12 SP3

Allows building new images based on existing ones.
Provides you with container orchestration.
On the other hand, Docker has the following limitations:
LIMITATIONS OF DOCKER

Containers run inside the host system's kernel and cannot use a different kernel.
Only allows Linux guest operating systems.
Docker is not a full virtualization stack like Xen, KVM, or libvirt .
Security depends on the host system. Refer to the official security documentation (http://
docs.docker.com/articles/security/)

for more details.

1.1 Docker Architecture
Docker uses a client/server architecture. You can use the CLI client to communicate with the

daemon. The daemon then performs operations with containers and manages images locally or in
registry. The CLI client can run on the same server as the host daemon or on a different machine.
The CLI client communicates with the daemon by using network sockets. The architecture is
depicted in Figure 1.1, “The docker architecture”.

FIGURE 1.1: THE DOCKER ARCHITECTURE

1.2 Docker Drivers
1.2.1

Container Drivers

Docker uses libcontainer (https://github.com/docker/libcontainer)
dle containers.

3

as the back-end driver to han-

Docker Architecture

SLES 12 SP3

1.2.2

Storage Drivers

Docker supports different storage drivers:
vfs : this driver is automatically used when the Docker host le system does not support

copy-on-write. This is a simple driver which does not offer some advantages of Docker
(like sharing layers, more on that in the next sections). It is highly reliable but also slow.

devicemapper : this driver relies on the device-mapper thin provisioning module. It sup-

ports copy-on-write, hence it offers all the advantages of Docker.

btrfs : this driver relies on Btrfs to provide all the features required by Docker. To use

this driver the /var/lib/docker directory must be on a Btrfs le system.

AUFS : this driver relies on the AUFS union le system. Neither the upstream kernel nor

the SUSE one supports this le system. Hence the AUFS driver is not built into the SUSE
Docker package.

SLE 12 uses the Btrfs le system by default, which leads Docker to use the btrfs driver.
It is possible to specify which driver to use by changing the value of the DOCKER_OPTS variable

defined inside of the /etc/sysconfig/docker le. This can be done either manually or using
YaST by browsing to System /etc/sysconfig Editor System Management DOCKER_OPTS menu
and entering the -s storage_driver string.

For example, to force the usage of the devicemapper driver enter the following text:
DOCKER_OPTS="-s devicemapper"

Important: Mounting /var/lib/docker

It is recommended to have /var/lib/docker mounted on a separate partition or volume
to not affect the Docker host operating system in case of a le system corruption.

In case you choose the Btrfs le system for /var/lib/docker , it is strongly recommend-

ed to create a subvolume for it. This ensures that the directory is excluded from le system snapshots. If not excluding /var/lib/docker from snapshots, the le system will

likely run out of disk space soon after you start deploying containers. What's more, a
rollback to a previous snapshot will also reset the Docker database and images. Refer to
Creating and Mounting New Subvolumes at https://www.suse.com/documentation/sles-12/
book_sle_admin/data/sec_snapper_setup.html

4

for details.

Storage Drivers

SLES 12 SP3

2 Docker Installation
2.1 General Preparation
Prepare the host as described below. Before installing any Docker-related packages, you need
to enable the container module:

Note: Built-in Docker Orchestration Support
Starting with Docker 1.12 the container orchestration is now an integral part of the Docker engine. Even though this feature is available in SLESSP1 and in SLESSP2, it is not

supported and is only a technical preview. Use Kubernetes for Docker container orchestration, for details refer to the Kubernetes documentation (http://kubernetes.io/docs/getting-started-guides/kubeadm/)

.

PROCEDURE 2.1: ENABLING THE CONTAINER MODULE USING YAST

1. Start YaST, and select Software

Software Repositories.

2. Click Add to open the add-on dialog.
3. Select Extensions and Modules from Registration Server and click Next.
4. From the list of available extensions and modules, select Container Module 12 x86_64 and

click Next.

The containers module and its repositories will be added to your system.
5. If you use Subscription Management Tool, update the list of repositories on the SMT server.
PROCEDURE 2.2: ENABLING THE CONTAINER MODULE USING SUSECONNECT

The Container Module can be added also with the following command:
$ sudo SUSEConnect -p sle-module-containers/12/x86_64 -r ''

Note: Note about the SUSEConnect syntax
The -r '' ag is required to avoid a known limitation of SUSEConnect.

5

General Preparation

SLES 12 SP3

PROCEDURE 2.3: INSTALLING AND SETTING UP DOCKER

1. Install the docker package:
sudo zypper install docker

2. To automatically start the Docker service at boot time:
sudo systemctl enable docker.service

This will automatically enable docker.socket in consequence.
3. In case you will use Portus and an SSL secured registry, open the /etc/sysconfig/docker le. Search for the parameter DOCKER_OPTS and add --insecure-registry ADDRESS_OF_YOUR_REGISTRY .

4. In the production environment when using the SSL secured registry with Portus, add CA

certificates to the directory /etc/docker/certs.d/ and copy the
CA certificates to your system:

sudo cp CA /etc/pki/trust/anchors/ && update-ca-certificates

5. Start the Docker service:
sudo systemctl start docker.service

This will automatically start docker.socket in consequence.
The Docker daemon listens on a local socket which is accessible only by the root user and

by the members of the docker group. The docker group is automatically created at package

installation time. To allow a certain user to connect to the local Docker daemon, use the following command:

sudo /usr/sbin/usermod -aG docker USERNAME

The user can communicate with the local Docker daemon upon his next login.

2.2 Networking
If you want your containers to be able to access the external network, you must enable the ipv4
ip_forward rule. This can be done using YaST by browsing to System

Network Settings Routing

6

Networking

menu and ensuring Enable IPv4 Forwarding is checked.

SLES 12 SP3

This option cannot be changed when networking is handled by the Network Manager. In such
cases the /etc/sysconfig/SuSEfirewall2 le needs to be edited manually to ensure the
FW_ROUTE ag is set to yes :
FW_ROUTE="yes"

2.2.1

Networking Limitations on Power Architecture

Currently Docker networking has two limitations on the Power architecture.
The rst limitation is about iptables. SLE 12 machines cannot run Docker with the iptables support enabled. An update of the kernel is going to solve this issue. In the meantime the Docker package for Power has iptables support disabled via a dedicated directive inside of /etc/
sysconfig/docker .

As a result of this limitation Docker containers will not have access to the outer network. A possible workaround is to share the same network namespace between the host and the containers.
This however reduces the isolation of the containers.

The network namespace of the host can be shared on a per-container basis by adding -net=host to the docker run command.

Note: iptables support on SLE 12 SP1
SLE 12 SP1 hosts are not affected by this limitation but, given they use the same SLE 12
package, they will have iptables support disabled. This can be changed by removing the
-iptables=false setting inside of /etc/sysconfig/docker .

The second limitation is about network isolation between the containers and the host. Currently
it is not possible to prevent containers from probing or accessing arbitrary ports of each other.

7

Networking Limitations on Power Architecture

SLES 12 SP3

3 Installing sle2docker
The sle2docker is used to import pre-built SUSE Linux Enterprise images. The imported prebuilt images can then be used to create base Docker images.

The tool is part of the official container module. You can install it by using zypper . But prior
to installing sle2docker , verify that the following prerequisites are fulfilled:
Ruby is installed on the host machine.
The docker daemon is running on the system.
The user invoking sle2docker must have proper rights to invoke Docker commands.
If the conditions above are fulfilled, you can install the sle2docker tool by running:
sudo zypper in sle2docker

8

SLES 12 SP3

4 Storing Images
Prior to creating your own images, you should decide where you will store the images. The
easiest solution would be to push these images to the Docker Hub (https://hub.docker.com) .

By default all images pushed to the Docker Hub are public. This is probably ne as long as
this does not violate your company's policy and your images do not contain sensitive data or
proprietary software.

If you need to restrict access to your Docker images, there are two options:
Get a subscription on Docker Hub that unlocks the feature to create private repositories.
Run an on-site Docker registry where to store all the Docker images used by your organization or company and combine them with Portus to secure the registry.

This chapter describes how to set up an on-site Docker registry and how to combine it with
Portus.

4.1 What is a Docker Registry?
The Docker registry is an open source project created by Docker Inc. It allows the storage and
retrieval of Docker images. By running a local instance of the Docker registry it is possible to
completely avoid usage of the Docker Hub.

The Docker registry is also used by the Docker Hub. However, the Docker Hub, as seen from the
user perspective, is made of the following parts at least:

The user interface (UI): The part that is accessed by users with their browser. The UI

provides a nice and intuitive way to browse the contents of the Docker Hub either manually

or by using a search feature. It also allows to create organizations made by different users.
This component is closed source.

The authentication component: This is used to protect the images stored inside of the
Docker Hub. It validates all push, pull and search requests.
This component is closed source.

The storage back-end: This is where the Docker images are sent and downloaded from. It
is provided by the Docker registry.
This component is open source.

9

What is a Docker Registry?

SLES 12 SP3

4.2 Installing and Setting Up Docker Registry
1. Install the docker-distribution-registry package:
sudo zypper install docker-distribution-registry

2. To automatically start the Docker registry at boot time:
sudo systemctl enable registry

3. Start the Docker registry:
sudo systemctl start registry

The Docker registry configuration is defined inside of /etc/registry/config.yml .
With the default configuration the registry listens on ports 5000 and stores the Docker images
under /var/lib/docker-registry .

Note: Incompatible Versions of Docker and Docker
Registry
Docker registry version 2.3 is not compatible with Docker versions older than 1.10, because v2 manifests were only introduced with Docker 1.10. As Docker and Docker reg-

istry can be installed on different boxes, the versions might be incompatible. If you ex-

perience communication errors between Docker and Docker registry, update both to the
latest versions.

For more details about Docker registry and its configuration, see the official documentation at:
https://docs.docker.com/registry/

10

.

Installing and Setting Up Docker Registry

SLES 12 SP3

4.3 Limitations
The Docker registry has two major limitations:
It lacks any form of authentication. That means everybody with access to the Docker reg-

istry can push and pull images to it. That also includes the possibility to overwrite already
existing images.

There is no way to see which images have been pushed to the Docker registry. You can
manually take notes of what is being stored inside of it. There is also no search functionality, which makes collaboration harder.

The next section is going to introduce Portus, the solution to all of the problems above.

4.4 Portus
Portus is an authentication service and user interface for the Docker registry. It is an open source
project created by SUSE to address all the limitations faced by the local instances of Docker
registry.

By combining Portus and Docker registry, it is possible to have a secure and enterprise ready
on-premise version of the Docker Hub.

Portus is accessible for SLE 12 customers through the Containers module. To install Portus, use
the following command:
sudo zypper in portus

In order to configure Portus properly, follow these steps:
1. First of all, you should install Portus's dependencies if you haven't already. This is thor-

oughly documented here: http://port.us.org/docs/setups/1_rpm_packages.html#portus-dependencies

. This document will help you to get through the installation process, and it

will also warn you about some of the common pitfalls.

2. After installing Portus and its dependencies, you need to configure your instance. The ini-

tial setup of Portus is explained here: http://port.us.org/docs/setups/1_rpm_packages.html#initial-setup

. When you are done with portusctl , you should modify some config-

urable values before using Portus. This is thoroughly explained in this documentation
page: http://port.us.org/docs/Configuring-Portus.html .

11

Limitations

SLES 12 SP3

3. To apply the configuration changes, restart Apache (this is required after each configura-

tion change).

4. Finally, when entering Portus for the rst time, you will be required to enter some infor-

mation about your installed registry. For details, see: http://port.us.org/docs/setups/1_rpm_packages#the-default-installation.html

.

5. The Portus setup is now complete and you can start using Portus.

Currently, Portus is part of SUSE's Docker offer as a technology preview. For more information
and documentation about Portus, see: http://port.us.org/ .

12

Portus

SLES 12 SP3

5 Creating Custom Images
For creating your custom image you need a base docker image of SLES. You can use any of the
pre-built SLES images that you can obtain as described in Section 5.2, “Customizing SLES Docker
Images”.

Note: No SLES Images in Docker Hub
Usually you can pull a variety of base docker images from the docker hub (https://
hub.docker.com/)

but that does not apply for SLES. Currently we cannot distribute SLES

images for Docker because there is no way to associate an End-User License Agreement
(EULA) to a Docker image. sle2docker enables you to import pre-built SLES images that
you can use for creating base SLES images.

After you obtain your base docker image, you can modify the image by using a Dockerfile

(usually placed in the build directory). Then use the standard docker building tool to create
your custom image:

docker build path_to_build_directory

For more docker build options please refer to the official Docker documentation (https://docs.docker.com/engine/reference/commandline/build/)

.

Note: Dockerizing Your Applications
You may want to write a dockerfile for your own application that should be run inside a
docker container. For a procedure refer to Chapter 6, Dockerizing Applications.

5.1 Obtaining Base SLES Images
You can install pre-built images of SLES by using Zypper:
sudo zypper in sles11sp4-docker-image suse-sles12sp3-image

Pre-built images do not have repositories configured. But when the Docker host has an SLE

subscription that provides access to the product used in the image, Zypper will automatically
have access to the right repositories.

13

Obtaining Base SLES Images

SLES 12 SP3

After the pre-built images are installed, you need to list them using sle2docker to get a proper
image name:

sle2docker list

Now you need to activate the pre-built images:
sle2docker activate PRE-BUILT_IMAGE_NAME

After successful activation, sle2docker will display the name of the docker image. You can
customize the docker image as described in Section 5.2, “Customizing SLES Docker Images”.

5.2 Customizing SLES Docker Images
The pre-built images do not have any repository configured and do not include any modules
or extensions. They contain a zypper service (https://github.com/SUSE/container-suseconnect)

that contacts either the SUSE Customer Center (SCC) or your Subscription Management Tool

(SMT) server, according to the configuration of the SLE host that runs the Docker container.
The service obtains the list of repositories available for the product used by the Docker image.
You can also directly declare extensions in your Dockerfile (for details refer to Section 5.2.3,
“Adding SLE Extensions and Modules to Images”.

You do not need to add any credentials to the Docker image because the machine credentials

are automatically injected into the container by the docker daemon. They are injected inside
of the /run/secrets directory. The same applies to the /etc/SUSEConnect le of the host
system, which is automatically injected into the /run/secrets directory.

Note: Credentials and Security
The contents of the /run/secrets directory are never committed to a Docker image,
hence there is no risk of your credentials leaking.

To obtain the list of repositories use the following command:
zypper ref -s

It will automatically add all the repositories to your container. For each repository added to the
system a new le will be created under /etc/zypp/repos.d . The URLs of these repositories

include an access token that automatically expires after 12 hours. To renew the token call the
zypper ref -s command. It is secure to commit these les to a Docker image.

14

Customizing SLES Docker Images

SLES 12 SP3

If you want to use a different set of credentials, place a custom /etc/zypp/credentials.d/SC-

Ccredentials le inside of the Docker image. It contains the machine credentials that have

the subscription you want to use. The same applies to the SUSEConnect le: to override the
le available on the host system that is running the Docker container, add a custom /etc/
SUSEConnect le inside of the Docker image.

Now you can create a custom Docker image by using a Dockerfile . If you want to create a

custom SLE 12 image, please refer to Section 5.2.1, “Creating a Custom SLE 12 Image”. If you want to
create a custom SLE 11 SP3 Docker image, please refer to Section 5.2.2, “Creating a Custom SLE 11

SP3 Image”. In case you would like to move your application to a Docker container, please refer

to Chapter 6, Dockerizing Applications.

5.2.1

Creating a Custom SLE 12 Image

The following Docker le creates a simple Docker image based on SLE 12 SP3:
FROM suse/sles12sp3:latest
RUN zypper ref -s
RUN zypper -n in vim

When the Docker host machine is registered against an internal SMT server, the Docker image
requires the SSL certificate used by SMT:
FROM suse/sles12sp3:latest
# Import the crt file of our private SMT server
ADD http://smt.test.lan/smt.crt /etc/pki/trust/anchors/smt.crt
RUN update-ca-certificates
RUN zypper ref -s
RUN zypper -n in vim

5.2.2

Creating a Custom SLE 11 SP3 Image

The following Docker le creates a simple Docker image based on SLE 11 SP4:
FROM suse/sles11sp3:latest
RUN zypper ref -s

15

Creating a Custom SLE 12 Image

SLES 12 SP3

RUN zypper -n in vim

When the Docker host machine is registered against an internal SMT server, the Docker image
requires the SSL certificate used by SMT:
FROM suse/sles11sp4:latest
# Import the crt file of our private SMT server
ADD http://smt.test.lan/smt.crt /etc/ssl/certs/smt.pem
RUN c_rehash /etc/ssl/certs
RUN zypper ref -s
RUN zypper -n in vim

5.2.3

Adding SLE Extensions and Modules to Images

You may have subscriptions to SLE extensions or modules that you would like to use in your
custom image. To add them to the Docker image, proceed as follows:
PROCEDURE 5.1: ADDING EXTENSION AND MODULES

1. Add the following into your Dockerfile :
ADD *.repo /etc/zypp/repos.d/
ADD *.service /etc/zypp/services.d
RUN zypper refs && zypper refresh

2. Copy all .service and .repo les that you will use into the directory where you will

build the Docker image from the Dockerfile .

16

Adding SLE Extensions and Modules to Images

SLES 12 SP3

6 Dockerizing Applications
Docker is a technology that can help you to minimize resources used to run or build your appli-

cations. There are several types of applications that are suitable to run inside a Docker container like daemons, Web pages or applications that expose ports for communication. You can use

Docker for automation of building and deployment processes by adding the build process into
a docker image, then building the image and then running containers based on that image.

Running your application inside a docker container provides you with the following advantages:
You can minimize the runtime environment of the application as you can add to the docker
image of the application just the required processes and applications.

The image with your application is portable across machines also with different Linux host
systems.

You can share the image of your application by using a repository.
You can use different versions of required packages in the container than the host system
uses without having problems with dependencies.

You can run several instances of the same application that are completely independent
from each other.

Using Docker for building of applications provides the following features:
You can prepare a complete building image.
Your build always runs in the same environment.
Your developers can test their code in the same environment as used in production.
You can set up an automated building process.
The following section provides you with examples and tips on how to dockerize your applica-

tions. Prior to reading further, make sure that you have activated your SLES base docker image
as described in Section 5.1, “Obtaining Base SLES Images”.

17

SLES 12 SP3

6.1 Running an Application with Specific Package
Versions
You may face a problem that your application uses a specific version of a package that is different
from the package installed on the system that should run your application. You can modify your

application to work with another version or you may create a Docker image with that particular
package version. The following example of a Dockerfile shows an image based on a current
version of SLES but with an older version of the example package
FROM suse/sles12sp3:latest
MAINTAINER Tux
RUN zypper ref && zypper in -f example-1.0.0-0
COPY application.rpm /tmp/
RUN zypper --non-interactive in /tmp/application.rpm
ENTRYPOINT ["/etc/bin/application"]
CMD ["-i"]

Now you can build the image by running in the same directory as the Dockerfile resides:
docker build --tag tux_application:latest .

The Dockerfile example shown above performs the following operations during the docker
build :

1. Updates the SLES repositories.
2. Installs the desired version of the example package.
3. Copies your application package to the image. The source RPM must be placed in the build

context.

4. Unpacks your application.
5. The last two steps run your application after a container is started.

After a successful build of the tux_application image, you can start a container based on
your new image:

docker run -it --name application_instance tux_application:latest

18

Running an Application with Specific Package Versions

SLES 12 SP3

You have created a container that runs a single instance of your application. Bear in mind that
after closing the application, the Docker container exits as well.

6.2 Running Applications with Specific Configuration
You may need to run an application that is delivered in a standard package accessible through

SLES repositories but you may need to use a different configuration or use specific environment
variables. In case you would like to run several instances of the application with non-standard

configuration, you can create your own image that will pass the custom configuration to the
application.

An example with the example application follows:
FROM suse/sles12sp3:latest
RUN zypper ref && zypper --non-interactive in example
ENV BACKUP=/backup
RUN mkdir -p $BACKUP
COPY configuration_example /etc/example/
ENTRYPOINT ["/etc/bin/example"]

The above example Dockerfile results in the following operations:
1. Refreshing of repositories and installation of the example.
2. Sets a BACKUP environment variable (the variable persists to containers started from the

image). You can always overwrite the value of the variable with a new one while running
the container by specifying a new value.

3. Creates the directory /backup .
4. Copies the configuration_example to the image.
5. Runs the example application.

Now you can build the image and after a successful build, you can run a container based on
your image.

19

Running Applications with Specific Configuration

SLES 12 SP3

6.3 Sharing Data between an Application and the
Host System
You may run an application that needs to share data between the application's container and

the host le system. Docker enables you to do data sharing by using volumes. You can declare a
mount point directly in the Dockerfile . But you cannot specify a directory on the host system
in the Dockerfile as the directory may not be accessible at the build time. You can nd the
mounted directory in the /var/lib/docker/volumes/ directory on the host system.

Note: Discarding Changes to the Directory to Be
Shared
After you declare a mount point by using the VOLUME instruction, all your changes per-

formed (by using the RUN instruction) to the directory will be discarded. After the decla-

ration, the volume is part of a temporary container that is then removed after a successful

build. In case you need to e.g. change permissions, perform the change before you declare
the directory as a mount point in the Dockerfile .

You can specify a particular mount point on the host system when running a container by using
the -v option:

docker run -it --name testing -v /home/tux/data:/data sles12sp3:latest /
bin/bash

Note
Using the -v option overwrites the VOLUME instruction if you specify the same mount
point in the container.

Now let's create an example image with a Web server that will read Web content from the host's
le system. The Dockerfile could look as follows:
FROM suse/sles12sp3:latest
RUN zypper ref && zypper --non-interactive in apache2
COPY apache2 /etc/sysconfig/

20

Sharing Data between an Application and the Host System

SLES 12 SP3

RUN chown -R admin /data
EXPOSE 80
VOLUME /data
ENTRYPOINT ["apache2ctl"]

The example above installs the Apache Web server to the image and copies all your configuration
to the image. The data directory will be owned by the admin user and will be used as a mount
point to store your web pages.

6.4 Applications Running in the Background
Your application may need to run in the background as a daemon or as an application exposing
ports for communication. In that case a typical Docker container may be run in background.

Do not run your application in the container in the background as it may cause exiting of the
container. Run the container in the background instead. An example Dockerfile for an application exposing a port looks as follows:

FROM suse/sles12sp3:latest
RUN zypper ref && zypper --non-interactive in postfix
RUN mkdir -p /var/spool/mail
COPY main.cf /etc/postfix/main.cf
EXPOSE 25 587
VOLUME ["/var/spool/mail"]
ENTRYPOINT ["/usr/sbin/postfix"]

Now you can build your image. Docker performs the following operations according to the
instructions in the Dockerfile :

1. Docker refreshes repositories and installs the postfix mail server as it is not installed by

default in the SLES docker image.

2. The /var/spool/mailboxes directory is created in the le system of the image. The

directory will store all mailboxes if you configure the mail server to store data in this
directory.

21

Applications Running in the Background

SLES 12 SP3

3. Here you copy a configuration le to the particular directory. Make sure that the main.cf

is located in the same directory as the Dockerfile . Bear in mind that the configuration

will be the same for all instance run in the future. In case you need a different configuration
for each container, you will need to edit it after running the container.

4. Each started container will expose the ports: 25 and 587. In case you will run several

instances of this image on the same machine, you should define a specific host name for
each container.

5. The VOLUME instruction creates a mount point at the /var/spool/mail directory in the

container.

6. The last instructions runs the postfix mail server in the started container.

After a successful build, you can run a container based on the image:
docker run -d --name mail_server -v /var/spool/mail:/var/spool/mail
postfix:latest /bin/bash

The -d option runs the container in a detached mode and further communication by using the
CLI will not be possible. To reattach the container run:

docker attach 

22

Applications Running in the Background

SLES 12 SP3

7 Working with Containers
After you have created your images, you can start your containers based on that image. You
can run an instance of the image by using the docker run command. The Docker engine then
creates and starts the container. The command docker run takes several arguments:
A container name - it is recommended to name your container.
Specify a user to use in your container.
Define a mount point.
Specify a particular host name, etc.
The container typically exits if its main process finishes. For example, if your container starts
a particular application, as soon as you quit the application, the container exits. You can start
the container again by running:

docker start -ai 

You may need to remove unused containers, you can achieve this by using:
docker rm 

7.1 Linking Containers
Docker enables you to link containers together which allows for communication between con-

tainers on the same host server. If you use the standard networking model, you can link containers by using the --link option when running containers:
First create a container to link to:
docker run -d --name sles sles12sp3 /bin/bash

Then create a container that will link to the sles container:
docker run --link sles:sles sles12sp3 /bin/bash

The container that links to sles has defined environment variables that enable connecting to the
linked container.

23

Linking Containers

SLES 12 SP3

A Documentation Updates
This chapter lists content changes for this document.
This manual was updated on the following dates:
Section A.1, “September 2017 (Initial Release of SUSE Linux Enterprise Server 12 SP3)”
Section A.2, “November 2016 (Initial Release of SUSE Linux Enterprise Server 12 SP2)”

A.1 September 2017 (Initial Release of SUSE Linux
Enterprise Server 12 SP3)
General

Numerous small fixes and additions to the documentation, based on technical feedback.

Removed all references to the faillog package, which is no longer shipped (https://
bugzilla.suse.com/show_bug.cgi?id=710788

).

Chapter 1, Docker Overview

Added container orchestration description to Section 1.1, “Docker Architecture”.
Bugfixes

In Section 5.2.3, “Adding SLE Extensions and Modules to Images”, added a proce-

dure for adding extensions to custom images (https://bugzilla.suse.com/show_bug.cgi?id=1029270

).

Adjusted names of base images to latest product versions (https://bugzilla.suse.com/show_bug.cgi?id=1050754

).

A.2 November 2016 (Initial Release of SUSE Linux
Enterprise Server 12 SP2)
General

24

September 2017 (Initial Release of SUSE Linux Enterprise Server 12 SP3)

SLES 12 SP3

The

e-mail

address

team@suse.com .

for

documentation

feedback

has

changed

to

doc-

The documentation for Docker has been enhanced and renamed to Docker Guide.
General Changes to this Guide

Added Chapter 1, Docker Overview.
Updated Chapter 2, Docker Installation (Fate #321136).
Added Chapter 6, Dockerizing Applications (Fate #319368).
Added Chapter 7, Working with Containers.
Bugfixes

Rephrased text about restricting access to Docker images (https://bugzilla.suse.com/show_bug.cgi?id=947502

Added

configuration

for

SSL

la.suse.com/show_bug.cgi?id=993115

25

).

to

).

installation

chapter

November 2016 (Initial Release of SUSE Linux Enterprise Server 12 SP2)

(https://bugzil-

SLES 12 SP3

B GNU Licenses
This appendix contains the GNU Free Documentation License version 1.2.
GNU Free Documentation License
Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor,
Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

formats that can be read and edited only by proprietary word processors, SGML or XML for

which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as
are needed to hold, legibly, the material this License requires to appear in the title page. For

works in formats which do not have any title page as such, "Title Page" means the text near the
most prominent appearance of the work's title, preceding the beginning of the body of the text.

A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely
XYZ or contains XYZ in parentheses following text that translates XYZ in another language.

(Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements",
"Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when

you modify the Document means that it remains a section "Entitled XYZ" according to this

0. PREAMBLE

definition.

The purpose of this License is to make a manual, textbook, or other functional and useful

License applies to the Document. These Warranty Disclaimers are considered to be included

and redistribute it, with or without modifying it, either commercially or non-commercially.

that these Warranty Disclaimers may have is void and has no effect on the meaning of this

The Document may include Warranty Disclaimers next to the notice which states that this

document "free" in the sense of freedom: to assure everyone the effective freedom to copy

by reference in this License, but only as regards disclaiming warranties: any other implication

Secondarily, this License preserves for the author and publisher a way to get credit for their

License.

This License is a kind of "copyleft", which means that derivative works of the document must

2. VERBATIM COPYING

is a copyleft license designed for free software.

You may copy and distribute the Document in any medium, either commercially or non-

work, while not being considered responsible for modifications made by others.

themselves be free in the same sense. It complements the GNU General Public License, which
We have designed this License to use it for manuals for free software, because free software

commercially, provided that this License, the copyright notices, and the license notice saying

freedoms that the software does. But this License is not limited to software manuals; it can

conditions whatsoever to those of this License. You may not use technical measures to obstruct

printed book. We recommend this License principally for works whose purpose is instruction

may accept compensation in exchange for copies. If you distribute a large enough number of

needs free documentation: a free program should come with manuals providing the same

this License applies to the Document are reproduced in all copies, and that you add no other

be used for any textual work, regardless of subject matter or whether it is published as a

or control the reading or further copying of the copies you make or distribute. However, you

or reference.

copies you must also follow the conditions in section 3.

1. APPLICABILITY AND DEFINITIONS

display copies.

This License applies to any manual or other work, in any medium, that contains a notice placed

3. COPYING IN QUANTITY

notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under

If you publish printed copies (or copies in media that commonly have printed covers) of the

member of the public is a licensee, and is addressed as "you". You accept the license if you

you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts:

by the copyright holder saying it can be distributed under the terms of this License. Such a

the conditions stated herein. The "Document", below, refers to any such manual or work. Any
copy, modify or distribute the work in a way requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a portion
of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that

deals exclusively with the relationship of the publishers or authors of the Document to the

Document's overall subject (or to related matters) and contains nothing that could fall directly

You may also lend copies, under the same conditions stated above, and you may publicly

Document, numbering more than 100, and the Document's license notice requires Cover Texts,
Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers

must also clearly and legibly identify you as the publisher of these copies. The front cover
must present the full title with all words of the title equally prominent and visible. You may
add other material on the covers in addition. Copying with changes limited to the covers, as
long as they preserve the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.

within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a

If the required texts for either cover are too voluminous to t legibly, you should put the

of historical connection with the subject or with related matters, or of legal, commercial,

adjacent pages.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being

must either include a machine-readable Transparent copy along with each Opaque copy, or

License. If a section does not t the above definition of Secondary then it is not allowed to be

work-using public has access to download using public-standard network protocols a complete

does not identify any Invariant Sections then there are none.

must take reasonably prudent steps, when you begin distribution of Opaque copies in quanti-

Secondary Section may not explain any mathematics.) The relationship could be a matter

rst ones listed (as many as t reasonably) on the actual cover, and continue the rest onto

philosophical, ethical or political position regarding them.

If you publish or distribute Opaque copies of the Document numbering more than 100, you

those of Invariant Sections, in the notice that says that the Document is released under this

state in or with each Opaque copy a computer-network location from which the general net-

designated as Invariant. The Document may contain zero Invariant Sections. If the Document

Transparent copy of the Document, free of added material. If you use the latter option, you

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or

Back-Cover Texts, in the notice that says that the Document is released under this License. A
Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in a for-

mat whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic

ty, to ensure that this Transparent copy will remain thus accessible at the stated location until
at least one year after the last time you distribute an Opaque copy (directly or through your
agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before

redistributing any large number of copies, to give them a chance to provide you with an
updated version of the Document.

paint programs or (for drawings) some widely available drawing editor, and that is suitable
for input to text formatters or for automatic translation to a variety of formats suitable for

input to text formatters. A copy made in an otherwise Transparent le format whose markup,
or absence of markup, has been arranged to thwart or discourage subsequent modification

by readers is not Transparent. An image format is not Transparent if used for any substantial
amount of text. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Tex-

info input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples

of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary

26

SLES 12 SP3

4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document under the conditions of

The author(s) and publisher(s) of the Document do not by this License give permission to use
their names for publicity for or to assert or imply endorsement of any Modified Version.

sections 2 and 3 above, provided that you release the Modified Version under precisely this

5. COMBINING DOCUMENTS

and modification of the Modified Version to whoever possesses a copy of it. In addition, you

You may combine the Document with other documents released under this License, under

License, with the Modified Version filling the role of the Document, thus licensing distribution
must do these things in the Modified Version:
A.

Use in the Title Page (and on the covers, if any) a title distinct from that of the

Document, and from those of previous versions (which should, if there were any,
be listed in the History section of the Document). You may use the same title as a
B.

the same name but different contents, make the title of each such section unique by adding

State on the Title page the name of the publisher of the Modified Version, as the
publisher.

D.

Preserve all the copyright notices of the Document.

E.

Add an appropriate copyright notice for your modifications adjacent to the other
copyright notices.

Include, immediately after the copyright notices, a license notice giving the public

permission to use the Modified Version under the terms of this License, in the form
shown in the Addendum below.

Preserve in that license notice the full lists of Invariant Sections and required Cover
Texts given in the Document's license notice.

H.
I.

Include an unaltered copy of this License.
Preserve the section Entitled "History", Preserve its Title, and add to it an item

stating at least the title, year, new authors, and publisher of the Modified Version

Preserve the network location, if any, given in the Document for public access to

"History" section. You may omit a network location for a work that was published
at least four years before the Document itself, or if the original publisher of the

documents, forming one section Entitled "History"; likewise combine any sections Entitled

"Acknowledgements", and any sections Entitled "Dedications". You must delete all sections
Entitled "Endorsements".

6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents released under

this License, and replace the individual copies of this License in the various documents with a
single copy that is included in the collection, provided that you follow the rules of this License
for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under
this License, provided you insert a copy of this License into the extracted document, and follow
this License in all other respects regarding verbatim copying of that document.

ments or works, in or on a volume of a storage or distribution medium, is called an "aggregate"
if the copyright resulting from the compilation is not used to limit the legal rights of the com-

pilation's users beyond what the individual works permit. When the Document is included in
an aggregate, this License does not apply to the other works in the aggregate which are not
themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then
if the Document is less than one half of the entire aggregate, the Document's Cover Texts

For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title

equivalent of covers if the Document is in electronic form. Otherwise they must appear on

contributor acknowledgements and/or dedications given therein.

may be placed on covers that bracket the Document within the aggregate, or the electronic
printed covers that bracket the whole aggregate.

Preserve all the Invariant Sections of the Document, unaltered in their text and

8. TRANSLATION

section titles.

Translation is considered a kind of modification, so you may distribute translations of the

in their titles. Section numbers or the equivalent are not considered part of the
Delete any section Entitled "Endorsements". Such a section may not be included

Document under the terms of section 4. Replacing Invariant Sections with translations requires

in the Modified Version.

special permission from their copyright holders, but you may include translations of some

Do not retitle any existing section to be Entitled "Endorsements" or to conflict in

may include a translation of this License, and all the license notices in the Document, and

title with any Invariant Section.
O.

In the combination, you must combine any sections Entitled "History" in the various original

version it refers to gives permission.

of the section, and preserve in the section all the substance and tone of each of the

N.

Invariant Sections in the license notice of the combined work.

A compilation of the Document or its derivatives with other separate and independent docu-

the Document for previous versions it was based on. These may be placed in the

M.

known, or else a unique number. Make the same adjustment to the section titles in the list of

on its Title Page, then add an item describing the Modified Version as stated in

a Transparent copy of the Document, and likewise the network locations given in

L.

at the end of it, in parentheses, the name of the original author or publisher of that section if

7. AGGREGATION WITH INDEPENDENT WORKS

the previous sentence.

K.

ant Sections may be replaced with a single copy. If there are multiple Invariant Sections with

as given on the Title Page. If there is no section Entitled "History" in the Document,

create one stating the title, year, authors, and publisher of the Document as given

J.

preserve all their Warranty Disclaimers.

List on the Title Page, as authors, one or more persons or entities responsible for

than ve), unless they release you from this requirement.

G.

list them all as Invariant Sections of your combined work in its license notice, and that you

The combined work need only contain one copy of this License, and multiple identical Invari-

of the principal authors of the Document (all of its principal authors, if it has fewer

F.

combination all of the Invariant Sections of all of the original documents, unmodified, and

previous version if the original publisher of that version gives permission.

authorship of the modifications in the Modified Version, together with at least ve

C.

the terms defined in section 4 above for modified versions, provided that you include in the

Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Se-

condary Sections and contain no material copied from the Document, you may at your option
designate some or all of these sections as invariant. To do this, add their titles to the list of
Invariant Sections in the Modified Version's license notice. These titles must be distinct from
any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review
or that the text has been approved by an organization as the authoritative definition of a
standard.

You may add a passage of up to ve words as a Front-Cover Text, and a passage of up to 25

words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only
one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through

arrangements made by) any one entity. If the Document already includes a cover text for the

or all Invariant Sections in addition to the original versions of these Invariant Sections. You
any Warranty Disclaimers, provided that you also include the original English version of this
License and the original versions of those notices and disclaimers. In case of a disagreement
between the translation and the original version of this License or a notice or disclaimer, the
original version will prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the

requirement (section 4) to Preserve its Title (section 1) will typically require changing the
actual title.

9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the

Document is void, and will automatically terminate your rights under this License. However,
parties who have received copies, or rights, from you under this License will not have their
licenses terminated so long as such parties remain in full compliance.

same cover, previously added by you or by arrangement made by the same entity you are
acting on behalf of, you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.

27

SLES 12 SP3

10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present
version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/
copyleft/

.

Each version of the License is given a distinguishing version number. If the Document specifies

that a particular numbered version of this License "or any later version" applies to it, you have
the option of following the terms and conditions either of that specified version or of any

later version that has been published (not as a draft) by the Free Software Foundation. If the

Document does not specify a version number of this License, you may choose any version ever
published (not as a draft) by the Free Software Foundation.

ADDENDUM: How to use this License for your documents

Copyright (c) YEAR YOUR NAME.
Permission is granted to copy, distribute
and/or modify this document
under the terms of the GNU Free
Documentation License, Version 1.2
or any later version published by the Free
Software Foundation;
with no Invariant Sections, no Front-Cover
Texts, and no Back-Cover Texts.
A copy of the license is included in the
section entitled “GNU
Free Documentation License”.
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the
“with...Texts.” line with this:

with the Invariant Sections being LIST
THEIR TITLES, with the
Front-Cover Texts being LIST, and with the
Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other combination of the three,
merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing

these examples in parallel under your choice of free software license, such as the GNU General
Public License, to permit their use in free software.

28

SLES 12 SP3



Source Exif Data:
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
Linearized                      : No
Page Count                      : 32
Profile CMM Type                : lcms
Profile Version                 : 2.1.0
Profile Class                   : Display Device Profile
Color Space Data                : RGB
Profile Connection Space        : XYZ
Profile Date Time               : 1998:02:09 06:49:00
Profile File Signature          : acsp
Primary Platform                : Apple Computer Inc.
CMM Flags                       : Not Embedded, Independent
Device Manufacturer             : IEC
Device Model                    : sRGB
Device Attributes               : Reflective, Glossy, Positive, Color
Rendering Intent                : Perceptual
Connection Space Illuminant     : 0.9642 1 0.82491
Profile Creator                 : lcms
Profile ID                      : 0
Profile Copyright               : Copyright (c) 1998 Hewlett-Packard Company
Profile Description             : sRGB IEC61966-2.1
Media White Point               : 0.95045 1 1.08905
Media Black Point               : 0 0 0
Red Matrix Column               : 0.43607 0.22249 0.01392
Green Matrix Column             : 0.38515 0.71687 0.09708
Blue Matrix Column              : 0.14307 0.06061 0.7141
Device Mfg Desc                 : IEC http://www.iec.ch
Device Model Desc               : IEC 61966-2.1 Default RGB colour space - sRGB
Viewing Cond Desc               : Reference Viewing Condition in IEC61966-2.1
Viewing Cond Illuminant         : 19.6445 20.3718 16.8089
Viewing Cond Surround           : 3.92889 4.07439 3.36179
Viewing Cond Illuminant Type    : D50
Luminance                       : 76.03647 80 87.12462
Measurement Observer            : CIE 1931
Measurement Backing             : 0 0 0
Measurement Geometry            : Unknown
Measurement Flare               : 0.999%
Measurement Illuminant          : D65
Technology                      : Cathode Ray Tube Display
Red Tone Reproduction Curve     : (Binary data 2060 bytes, use -b option to extract)
Green Tone Reproduction Curve   : (Binary data 2060 bytes, use -b option to extract)
Blue Tone Reproduction Curve    : (Binary data 2060 bytes, use -b option to extract)
Creator                         : Tomáš Bažant, Jakub Friedl, and Florian Nadge
Format                          : application/pdf
Title                           : Docker Guide - SUSE Linux Enterprise Server 12 SP3
Language                        : en
Date                            : 2017:10:26 11:31:48+02:00
Producer                        : Apache FOP Version 2.1
PDF Version                     : 1.4
Creator Tool                    : DAPS 2.4.0 using SUSE XSL Stylesheets 2.0.8 (based on DocBook XSL Stylesheets 1.78.1)
Metadata Date                   : 2017:10:26 11:31:48+02:00
Create Date                     : 2017:10:26 11:31:48+02:00
Page Mode                       : UseOutlines
Author                          : Tomáš Bažant, Jakub Friedl, and Florian Nadge
EXIF Metadata provided by EXIF.tools

Navigation menu