I built the system (openSUSE Tumbleweed, because then we can have
yast2-docker
) with /var/lib/docker
on a separate partition:
hatter:~ # mount | grep docker
/dev/sda4 on /var/lib/docker type btrfs (rw,relatime,ssd,space_cache)
Add yourself to the group docker
so that you can run docker as a
normal user:
# usermod -aG docker roger
Enable the docker service:
hatter:~ # systemctl enable docker.service
Start the docker service
hatter:~ # systemctl start docker.service
Get the official opensuse
image from the docker repositories:
roger@hatter:/home/roger $ docker pull opensuse
511136ea3c5a: Pull complete
a113d52c65c3: Pull complete
758c78b4040c: Pull complete
opensuse:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Status: Downloaded newer image for opensuse:latest
roger@hatter:/home/roger $ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
opensuse latest 758c78b4040c 9 weeks ago 267 MB
roger@hatter: /home/roger $ ip addr show docker0
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
valid_lft forever preferred_lft forever
roger@hatter: /home/roger $ docker run opensuse cat /etc/os-release
NAME=openSUSE
VERSION="13.2 (Harlequin)"
VERSION_ID="13.2"
PRETTY_NAME="openSUSE 13.2 (Harlequin) (x86_64)"
ID=opensuse
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:opensuse:13.2"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://opensuse.org/"
ID_LIKE="suse"
Run interactively (-i
) with a pseudo-TTY (-t
):
roger@hatter: /home/roger $ docker run -i -t opensuse:latest /bin/bash
:/ #
roger@hatter: /home/roger $ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
opensuse latest 758c78b4040c 9 weeks ago 267 MB
roger@hatter: /home/roger $ docker run -i -t opensuse:latest /bin/bash
:/ #
:/ # zypper in mlocate
[...]
In another terminal:
roger@hatter: /home/roger $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63ff98af793e opensuse:latest "/bin/bash" 2 minutes ago Up 2 minutes evil_thompson
roger@hatter: /home/roger $ docker commit 63ff98af793e opensuse:roger
6764a3e65e9839914021b9d1fc3fcc278e5b97e2c9f6b11098cf6b9c9f3eccf0
roger@hatter: /home/roger $ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
opensuse roger 6764a3e65e98 35 seconds ago 314.9 MB
opensuse latest 758c78b4040c 9 weeks ago 267 MB
mlocate
is installed in the committed image:
roger@hatter: /home/roger $ docker run opensuse:latest rpm -q mlocate
package mlocate is not installed
roger@hatter: /home/roger $ docker run opensuse:roger rpm -q mlocate
mlocate-0.26-15.1.2.x86_64
roger@hatter: /home/roger $ docker run -t -i opensuse:latest /bin/bash
:/ #
In another terminal:
roger@hatter: /home/roger $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
15d2e97c22fe opensuse:latest "/bin/bash" 32 seconds ago Up 32 seconds lonely_lumiere
roger@hatter: /home/roger $ docker run -t -i opensuse:roger /bin/bash
:/ #
In another terminal:
roger@hatter: /home/roger $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b0d10cb9a788 opensuse:roger "/bin/bash" 4 seconds ago Up 4 seconds agitated_jones
Building from a Dockerfile
roger@hatter: /home/roger/build $ cat Dockerfile
FROM opensuse
RUN zypper --gpg-auto-import-keys --non-interactive install apache2
COPY testaddfile /etc/testaddfile
roger@hatter: /home/roger/build $ ls
Dockerfile testaddfile
By default docker build
uses the file named Dockerfile
in the
current directory:
roger@hatter: /home/roger/build $ docker build -t apache .
Sending build context to Docker daemon 4.096 kB
Sending build context to Docker daemon
Step 0 : FROM opensuse
---> 758c78b4040c
Step 1 : RUN zypper --gpg-auto-import-keys --non-interactive install apache2
---> Running in 10daed41799d
Retrieving repository 'repo-non-oss' metadata [.
Automatically importing the following key:
Repository: repo-non-oss
Key Name: openSUSE Project Signing Key <opensuse@opensuse.org>
Key Fingerprint: 22C07BA5 34178CD0 2EFE22AA B88B2FD4 3DBDC284
Key Created: Mon May 5 08:37:40 2014
Key Expires: Thu May 2 08:37:40 2024
Rpm Name: gpg-pubkey-3dbdc284-53674dd4
done]
Building repository 'repo-non-oss' cache [....done]
Retrieving repository 'repo-oss' metadata [...........done]
Building repository 'repo-oss' cache [....done]
Retrieving repository 'repo-update' metadata [......done]
Building repository 'repo-update' cache [....done]
Retrieving repository 'repo-update-non-oss' metadata [....done]
Building repository 'repo-update-non-oss' cache [....done]
Loading repository data...
Reading installed packages...
Resolving package dependencies...
The following 8 NEW packages are going to be installed:
apache2 apache2-prefork apache2-utils libapr-util1 libapr1 libdb-4_8 liblua5_2 logrotate
The following recommended package was automatically selected:
apache2-prefork
8 new packages to install.
Overall download size: 2.3 MiB. Already cached: 0 B After the operation, additional 8.2 MiB will be used.
Continue? [y/n/? shows all options] (y): y
Retrieving package libapr1-1.5.1-4.1.3.x86_64 (1/8), 100.1 KiB (232.8 KiB unpacked)
Retrieving: libapr1-1.5.1-4.1.3.x86_64.rpm [.done (141.6 KiB/s)]
Retrieving package libdb-4_8-4.8.30-29.1.2.x86_64 (2/8), 667.7 KiB ( 3.1 MiB unpacked)
Retrieving: libdb-4_8-4.8.30-29.1.2.x86_64.rpm [.done (1.0 MiB/s)]
Retrieving package liblua5_2-5.2.3-2.2.1.x86_64 (3/8), 85.8 KiB (203.7 KiB unpacked)
Retrieving: liblua5_2-5.2.3-2.2.1.x86_64.rpm [done]
Retrieving package logrotate-3.8.7-6.1.2.x86_64 (4/8), 58.6 KiB ( 99.6 KiB unpacked)
Retrieving: logrotate-3.8.7-6.1.2.x86_64.rpm [.done]
Retrieving package libapr-util1-1.5.3-2.1.4.x86_64 (5/8), 89.3 KiB (229.8 KiB unpacked)
Retrieving: libapr-util1-1.5.3-2.1.4.x86_64.rpm [done]
Retrieving package apache2-utils-2.4.10-16.1.x86_64 (6/8), 114.5 KiB (217.1 KiB unpacked)
Retrieving: apache2-utils-2.4.10-16.1.x86_64.rpm [.done]
Retrieving package apache2-2.4.10-16.1.x86_64 (7/8), 1.0 MiB ( 3.6 MiB unpacked)
Retrieving: apache2-2.4.10-16.1.x86_64.rpm [..done (972.1 KiB/s)]
Retrieving package apache2-prefork-2.4.10-16.1.x86_64 (8/8), 241.8 KiB (595.9 KiB unpacked)
Retrieving: apache2-prefork-2.4.10-16.1.x86_64.rpm [.done (1.1 MiB/s)]
Checking for file conflicts: [.......done]
(1/8) Installing: libapr1-1.5.1-4.1.3 [.......done]
(2/8) Installing: libdb-4_8-4.8.30-29.1.2 [............done]
(3/8) Installing: liblua5_2-5.2.3-2.2.1 [......done]
(4/8) Installing: logrotate-3.8.7-6.1.2 [.......done]
(5/8) Installing: libapr-util1-1.5.3-2.1.4 [........done]
(6/8) Installing: apache2-utils-2.4.10-16.1 [.........done]
(7/8) Installing: apache2-2.4.10-16.1 [............done]
Additional rpm output:
/usr/sbin/suexec2: cannot verify root:root 0755 - not listed in /etc/permissions
Updating /etc/sysconfig/apache2...
looking for old 2.0 modules to be renamed...
!!ATTENTION! authz_default was removed from apache version 2.4 or later, CHECK YOUR CONFIGURATION!!!
Done.
(8/8) Installing: apache2-prefork-2.4.10-16.1 [..........done]
---> 7db9d92081e4
Removing intermediate container 10daed41799d
Step 2 : COPY testaddfile /etc/testaddfile
---> 383b913130ca
Removing intermediate container 143f73a3fbc1
Successfully built 383b913130ca
roger@hatter: /home/roger/build $ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
apache latest 383b913130ca About a minute ago 316.9 MB
opensuse roger 6764a3e65e98 41 minutes ago 314.9 MB
opensuse latest 758c78b4040c 9 weeks ago 267 MB
roger@hatter: /home/roger/build $ docker run apache cat /etc/testaddfile
FOO BAR
roger@hatter: /home/roger/build $ docker run -i -t apache /bin/bash
:/ # cat /etc/testaddfile
FOO BAR
:/ #
roger@hatter: /home/roger $ docker run -t -i apache /bin/bash
:/ # echo "Hello from docker" > /srv/www/htdocs/index.html
:/ #
Leave running and in another terminal commit:
roger@hatter: /home/roger $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
907e169505b4 apache:latest "/bin/bash" 24 seconds ago Up 23 seconds clever_morse
roger@hatter: /home/roger $ docker commit 907e169505b4 apache
cad948563182f0537d0ba89497f5ae3392872bf3064ef99c422efc81bf4b4f18
roger@hatter: /home/roger $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
907e169505b4 383b913130ca "/bin/bash" 2 minutes ago Up 2 minutes clever_morse
Try running apache in the foreground:
roger@hatter: /home/roger $ docker run -p 80:80 apache /usr/sbin/apache2ctl -D FOREGROUND
/usr/sbin/apache2ctl: line 64: which: command not found
/usr/sbin/apache2ctl: line 66: which: command not found
httpd2: Syntax error on line 185 of /etc/apache2/httpd.conf: Could not open configuration file /etc/apache2/sysconfig.d/include.conf: No such file or directory
We need to install the package which
and touch the file
/etc/apache2/sysconfig.d/include.conf
(don’t know why this is not
present).
roger@hatter: /home/roger $ docker run -i -t apache /bin/bash
:/ # touch /etc/apache2/sysconfig.d/include.conf
:/ # zypper in which
Loading repository data...
Reading installed packages...
Resolving package dependencies...
The following NEW package is going to be installed:
which
1 new package to install.
Overall download size: 30.9 KiB. Already cached: 0 B After the operation, additional 69.8 KiB will be used.
Continue? [y/n/? shows all options] (y):
Retrieving package which-2.20-4.1.2.x86_64 (1/1), 30.9 KiB ( 69.8 KiB unpacked)
Retrieving: which-2.20-4.1.2.x86_64.rpm .....................................................[done (7.3 KiB/s)]
Checking for file conflicts: ............................................................................[done]
(1/1) Installing: which-2.20-4.1.2 ......................................................................[done]
:/ #
In other terminal:
roger@hatter: /home/roger $ docker commit a2a92114f07e apache
6d4f0dcf4b48464cd923c9a15687bea21486eb690c8daab83e48184ffeae0c01
Now run detached (-d
), mapping port 80 to host’s port 80:
roger@hatter: /home/roger $ docker run -d -p 80:80 apache /usr/sbin/apache2ctl -D FOREGROUND
68a7dbd52106c1427987b8bd99c22509172b23ed7503b07fb2dd3c771adbd32b
roger@hatter: /home/roger $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68a7dbd52106 apache:latest "/usr/sbin/apache2ct 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp kickass_tesla
roger@hatter: /home/roger $ curl http://localhost/index.html
Hello from docker