Aangezien krachtige hardware steeds meer een commodity is geworden, is de mogelijkheid om meerdere virtuele machines op één stuk hardware te laten werken een industrienorm geworden. Van webhosting tot cloud computing, veel services worden uitgevoerd op gevirtualiseerde omgevingen. Naast oplossingen voor desktopvirtualisatie zoals VirtualBox zijn er ook snelle provisioning-oplossingen zoals Vagrant. Het probleem met een virtuele machine is dat deze elk aspect van de gastcomputer moet emuleren, inclusief alle systeem-RAM die exclusief aan de virtuele machine wordt toegewezen. Dientengevolge, kan virtualisatie bron hongerig zijn.

Aan de andere kant van het spectrum bevindt zich een "chroot" -omgeving, die de onderliggende hoofdmap van een proces wijzigt, zodat deze in zijn eigen omgeving wordt uitgevoerd en geen toegang heeft tot andere bestanden op het hostbesturingssysteem. Er is echter helemaal geen virtualisatie, alleen een andere mapstructuur.

Het middelpunt tussen deze twee systemen is een container. Containers bieden veel voordelen van een gevirtualiseerde machine, maar zonder de hoge resourcekosten. Containers zijn functioneler dan chroot-omgevingen omdat er enige virtualisatie is. Processen die in een container zijn gemaakt, krijgen bijvoorbeeld ID's (PID's) los van die in het host-besturingssysteem. In technische termen heeft de container zijn eigen PID-naamruimte. Containers hebben zelfs hun eigen naamruimte voor het netwerksubsysteem en voor InterProcess Communication (IPC). Dat betekent dat een container netwerkservices kan uitvoeren, zoals een SSH-server of een webserver.

Van buitenaf ziet de container eruit als een virtuele machine met een eigen IP-adres en eigen netwerkservices, maar van binnen maakt de container veel meer gebruik van het hostbesturingssysteem dan van een virtuele machine, meer een "chroot" -omgeving. U kunt bijvoorbeeld een CentOS-container gebruiken die op een Ubuntu-host wordt uitgevoerd. De commando's en bestanden zijn allemaal afkomstig van CentOS, maar als je de container vraagt ​​welke kernel het draait, zal het rapporteren dat het de Ubuntu-kernel draait, omdat de container op de kernel draait vanuit het host-besturingssysteem.

Docker is een op een container gebaseerd virtualisatieframework waarmee u containers kunt maken die alle afhankelijkheden voor een toepassing bevatten. Elke container wordt geïsoleerd gehouden van andere en niets wordt gedeeld.

Om Docker op een 64-bits Ubuntu 14.04-systeem te installeren, voert u de volgende opdrachten uit:

 sudo apt-get update sudo apt-get install docker.io sudo ln -sf /usr/bin/docker.io / usr / local / bin / docker 

Er is een bestaand Ubuntu-pakket genaamd docker, wat een systeemvak is voor KDE3 / GNOME2. Om verwarring te voorkomen, wordt de runtime van de container docker.io genoemd . De laatste opdracht maakt een koppeling van "/ usr / local / bin / docker" naar "/usr/bin/docker.io", waardoor de opdracht docker wordt uitgevoerd vanaf de opdrachtregel in plaats van docker.io.

Opmerking : Docker.io is ook beschikbaar voor andere distro's. Hier zijn de installatie-instructies als u Ubuntu niet gebruikt.

Ga als volgt te werk om een ​​shell in de container uit te voeren:

 sudo docker run -i -t ubuntu / bin / bash 

De vlag " -i " maakt de sessie interactief en de vlag " -t " vertelt docker dat hij een terminalsessie moet emuleren. De parameter "ubuntu" vertelt docker dat hij een container moet uitvoeren op basis van Ubuntu 14.04 en "/ bin / bash" is de opdracht die moet worden uitgevoerd zodra de container is opgestart, oftewel de Bash-shell uitvoert.

Wanneer Docker wordt uitgevoerd, wordt gecontroleerd of het gewenste basiskopiebestand eerder is gedownload. Als dat niet het geval is, wordt de afbeelding gedownload van index.docker.io, ook de site die moet worden gebruikt om te zien welke afbeeldingen officieel door docker worden ondersteund.

Als u andere afbeeldingen wilt downloaden zonder een container te starten, gebruikt u de opdracht " docker pull ". Als u bijvoorbeeld de CentOS-basisafbeelding wilt downloaden, gebruikt u:

 sudo docker pull centos 

U kunt ook afzonderlijke opdrachten in een container uitvoeren en de container vervolgens laten afsluiten. Gebruik de volgende opdracht om de opdracht " ps aux " in de CentOS-container uit te voeren:

 sudo docker run centos ps aux 

Wanneer een container wordt afgesloten, gaan alle wijzigingen verloren. Het voordeel van deze aanpak is dat wanneer een container start, deze zich in een bekende staat bevindt. Dit is essentieel voor testomgevingen en voor build-services, enz. Het is ook belangrijk voor het uitvoeren van cloudservices, omdat de container snel opnieuw kan worden ingesteld en opnieuw in een stabiele status kan worden opgestart.

Dit betekent echter ook dat elke uitgevoerde configuratie of bestanden die in de container zijn gemaakt, verloren zullen gaan. De oplossing is om een ​​nieuwe afbeelding te maken met al uw wijzigingen. Probeer de volgende opdrachten:

 sudo docker voer ubuntu uit apt-get installeer -y nmap sudo docker ps -l 

De eerste opdracht start een container en installeert nmap. De tweede opdracht toont de nieuwste (-l) gemaakte container, ook als deze niet actief is.

U kunt nu een snapshot van die container maken en deze opslaan in een nieuwe afbeelding:

 sudo docker commit 1b498c2d502c ubuntu-met-nmap 

"1b498c2d502c" is de ID van de container zoals vermeld door de opdracht " docker ps -l ". Als u nu een shell voor de ubuntu-met-nmap- container start, wordt de opdracht nmap vooraf geïnstalleerd.

 sudo docker run -i -t ubuntu-with-nmap / bin / bash 

Er is veel informatie over docker in de documentatie van docker.io, en er zijn ook verschillende voorbeeldinstellingen uitgelegd, waaronder het uitvoeren van algemene taken zoals het uitvoeren van een Python-webapp en het uitvoeren van een SSH-service.

Als u vragen heeft over docker, is er een sterke havengemeenschap die u moet kunnen helpen. Je kunt ook vragen stellen in het gedeelte 'Opmerkingen' hieronder en we zullen zien of we kunnen helpen.