CentOS als Docker container

Met docker kunnen we containers starten. Om een container met CentOS te runnen, gaan we CentOS ophalen en starten:

$ docker pull centos
$ docker run centos

Vervolgens controleren we of CentOS nu ‘draait’ met

$ docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0e028d96673 centos "bash" 11 minutes ago Exited (0) 9 minutes ago zen_agnesi

Hier zien we dat de container al gestopt is, met code 0. Dit komt omdat Docker een container start, commando’s uitvoert en dan de container weer stopt. Om een interactieve sessie met de CentOS container te starten met een bash-shell, geven we het volgende commando:

$ docker run -it centos bash
[root@6b2e4ccd42d5 /]#

Nu zien we de Linux prompt (met container ID) en kunnen hier commando’s geven. Als we nu bv. willen zien welke routering er is, geven we het commando: ‘netstat -rn’. Echter, netstat is nog niet aanwezig op deze standaard CentOS container dus gaan we die installeren.

# yum install -y netools

Hierna werkt het netstat commando wel.

# netstat -rn

Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 172.17.0.1 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0

# exit

Om nu de container te verlaten en dus te stoppen, geven we het exit commando. Om nu niet telkens als we deze container starten, de net-tools moeten installeren, dient het commit-commando om de yum-actie vast te leggen in een nieuwe image die dan later weer gebruikt kan worden:

$ docker commit 6b2e4ccd42d5 centos-nettools

We zien nu een nieuwe image:

$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
centos-nettools latest 9c78080f3c47 29 seconds ago 280MB
centos latest 1e1148e4cc2c 2 months ago 202MB

Als test starten we deze container en vragen de routing table:

$ docker run -it centos-nettoools bash
# netstat -rn
...
# exit

De container kan meerdere keren gestart worden, bijvoorbeeld om 3 CentOS containers te starten met verschillende namen. De ‘-d’ parameter houdt in dat de container ‘detached’ draait, dus op de achtergrond.

$ docker run --rm -it -d --name Ansible centos-nettools bash
$ docker run --rm -it -d --name target1 centos-nettools bash
$ docker run --rm -it -d --name target2 centos-nettools bash

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7831e20c80cd centos-nettools "bash" 20 minutes ago Up 20 minutes target2
789d9c005147 centos-nettools "bash" 20 minutes ago Up 20 minutes target1
b903ee8c0f0a centos-nettools "bash" 20 minutes ago Up 20 minutes Ansible

In de Ansible container kunnen we dan ‘ansible’ installeren en een inventory maken voor de target1 en target2 containers. Uiteraard committen van de containers!