Dit artikel sluit aan bij een webinarreeks over het implementeren en beheren van containergebaseerde workloads in de cloud. De reeks dekt de basisprincipes van containers, inclusief het beheer van de containerlevenstijl, het implementeren van multi-containerapplicaties, het schalen van workloads en het begrijpen van Kubernetes, naast het benadrukken van beste praktijken voor het uitvoeren van stateful applicaties.
Deze handleiding bevat de concepten en opdrachten die in de eerste sessie van de reeks worden behandeld, Getting Started with Containers.
Inleiding
Docker is een platform voor het implementeren en beheren van containergebaseerde applicaties. Containers zijn populair onder ontwikkelaars, beheerders en DevOps-engineers vanwege de flexibiliteit die ze bieden.
Docker heeft drie essentiële componenten:
- Docker Engine
- Docker Tools
- Docker Registry
De Docker Engine biedt de kerncapaciteiten voor het beheer van containers. Het maakt verbinding met de onderliggende Linux-besturingssysteem om eenvoudige API’s te onthullen om te gaan met de levenscyclus van containers.
Docker Tools zijn een set van command-line tools die communiceren met de API die wordt blootgegeven door de Docker Engine. Ze worden gebruikt om containers uit te voeren, nieuwe images te maken, opslag en netwerken te configureren en veel meer bewerkingen uit te voeren die van invloed zijn op de levenscyclus van een container.
Docker Registry is de plaats waar container-images worden opgeslagen. Elke image kan meerdere versies krijgen door middel van unieke taggen. Gebruikers halen bestaande images uit de registratie en pushnen nieuwe images naar het.Docker Hub is een gehoste registratie die wordt beheerd door Docker, Inc.. Het is ook mogelijk om een registratie te runnen binnen je eigen omgevingen om de images dichter bij de motor te houden.
Na deze tutorial zullen je Docker installeren op een DigitalOcean Droplets, containers manageren, werken met images, toegankelijke versies toevoegen, persistentie instellen, en een privéregistratie instellen.
Voorbereidingsvraagstukken
Om deze tutorial te volgen, heb je nodig:
-
Eén Ubuntu 16.04 Droplets opzetten door deze Ubuntu 16.04 initial server setup tutorial te volgen, inclusief een sudo non-root gebruiker en een firewall.
-
Een Docker Hub account. Deze overzicht van Docker Hub zal je helpen aan de slag te gaan.
Standaard vereist de docker
-opdracht root-rechten. Echter, je kunt de opdracht uitvoeren zonder het sudo
-voorvoegsel door docker
als gebruiker in de docker-groep uit te voeren.
Om je Droplet op deze manier te configureren, voer het volgende commando uit: sudo usermod -aG docker ${USER}
. Dit voegt de huidige gebruiker toe aan de docker
-groep. Voer vervolgens het commando su - ${USER}
uit om de nieuwe groepslidmaatschap toe te passen.
Deze handleiding gaat ervan uit dat je server is geconfigureerd om de docker
-opdracht zonder het sudo
-voorvoegsel uit te voeren.
Stap 1 — Docker installeren
Nadat je via SSH bent ingelogd op de Droplet, voer de volgende commando’s uit om eventuele bestaande docker-gerelateerde pakketten te verwijderen en vervolgens Docker vanuit de officiële repository te installeren:
Nadat Docker is geïnstalleerd, verifieer de installatie met de volgende commando’s:
Deze opdracht geeft de details van de Docker Engine die geïnstalleerd is in de omgeving. De volgende opdracht verifieert dat de Docker Tools correct geinstalleerd en geconfigureerd zijn. Het zou moeten printen wat de versies zijn van zowel Docker Engine als Tools.
### Stap 2 — Starten van Containers
Docker containers worden gestart van bestaande images die in de registry worden geïsoleerd. Images in Docker kunnen in privé- of publieke repository’s worden gehouden. Privé repository’s vereisen gebruikers authentificaliteit voordat ze afbeeldingen kunnen halen. Publieke images zijn door iedereen te gebruiken.
Om een image te zoeken met de naam hello-world
, voer de volgende commando uit:
Er kan meerdere images zijn met de naam hello-world
. Kies deze met de hoogste sterren, wat het populairste afbeelding aanduidt.
Bekijk de beschikbare images in je lokale omgeving met de volgende commando:
Omdat we nog geen containers hebben gelanceerd, zal er geen image aanwezig zijn. We kunnen nu de image downloaden en lokaal运行:
Als we de docker run
commando uitvoeren zonder de image te halen, dan zal Docker Engine eerst de image halen en daarna deze lokaal runnen. Als we de docker images
commando uitvoeren opnieuw, zien we dat we de hello-world
image lokaal beschikbaar hebben.
Laten we nu een meer betekenisvolle container starten: een Apache webserver.
U zou erbij mogen merken dat er aan de docker run
commando extra opties zijn gegeven. Hier is een uitleg over deze opties:
-p
— Dit vertelt de Docker Engine om de container’s poort80
op de host poort80
te exposeren. Omdat Apache op poort80
luistert, moeten we hem exposeren op de host poort.--name
— Deze optie geeft aan Docker Engine een naam aan de draaiende container. Als we deze optie omissen, zal Docker Engine de container een willekeurige naam toekennen.-d
— Deze optie instructeert Docker Engine om de container in afgesloten modus te draaien. Zonder deze optie wordt de container in de voorgrond geleid, blokkend toegang tot de shell. Door de container in de achtergrond te schakelen, kunnen we de shell gebruiken terwijl de container nog steeds draait.
Om te verifiëren of onze container daadwerkelijk in de achtergrond draait, probeer de volgende commando:
De uitvoer toont dat de container met de naam web
actief is en poort 80
van de host poort 80
gemappeerd is.
Nu toegang verlenen aan de webserver:
Probeer de webserver te openen met de volgende commando’s:
Na het stoppen en verwijderen van de draaiende container gebruik je de volgende commando’s:
Stap 3 — Toevoegen van storage aan containers
Container zijn efemerale, wat betekent dat alles wat binnen een container wordt opgeslagen verloren gaat als de container wordt beëindigd. Om data door te brengen naast de levensduur van een container, moeten we een volume aan de container koppelen. Volumes zijn mappen vanuit het besturingssysteem van de host.
Begin met het maken van een nieuwe map op de host:
Nu starten we de container met een nieuwe schakeloptie om de map htdocs
te monteren, en verwijzen we hem naar de documentroot van de Apache webserver:
De schakeloptie -v
wijst de map htdocs
binnen de container naar het besturingssysteem van de host. Alle wijzigingen die aan deze map worden aangebracht zijn zichtbaar op beide locaties.
Bereik de map vanuit de container door de opdracht uit te voeren:
Deze opdracht koppelt onze terminal aan de shell van de container in een interactieve modus. U zult zien dat u nu binnen de container wordt gegooid.
Ga naar de map htdocs
en maak een eenvoudige HTML-bestand. Sluit uiteindelijk de shell af om terug te keren naar de host:
het uitvoeren van de opdracht curl localhost
laat zien dat de webserver de pagina die we hebben gemaakt teruggeeft.
We kunnen dit bestand niet alleen vanuit de host bereiken, maar we kunnen het ook wijzigen:
Het uitvoeren van curl localhost
opnieuw bevestigt dat de web server de laatst gemaakte pagina vanuit de host aanbiedt.
Beëindig de container met de volgende opdracht. (De optie -f
dwingt Docker om te beëindigen zonder eerst te stoppen.)
Stap 4 — Afbeeldingen bouwen
Naast het uitvoeren van bestaande afbeeldingen vanuit de registry, kunnen we onze eigen afbeeldingen maken en deze opslaan in de registry.
Je kunt nieuwe afbeeldingen maken van bestaande containers. De wijzigingen die zijn aangebracht in de container worden eerst ingediend en vervolgens worden de afbeeldingen getagd en naar de registry gepusht.
Laten we de httpd
-container opnieuw starten en het standaarddocument wijzigen:
De container draait nu met een aangepaste index.html
. Je kunt dit controleren met curl localhost
.
Voordat we de gewijzigde container indienen, is het een goed idee om deze te stoppen. Zodra deze is gestopt voeren we het indieningscommando uit:
Bevestig het maken van de afbeelding met het commando docker images
. Het toont de doweb
-afbeelding die we zojuist hebben gemaakt.
Om deze afbeelding te taggen en op te slaan in Docker Hub, voer de volgende commando’s uit om je afbeelding naar de openbare registry te pushen:
Je kunt de nieuwe afbeelding controleren door te zoeken in Docker Hub via de browser of de opdrachtprompt.
Stap 5 — Een Privé Registry Starten
Het is mogelijk om de registratie in privé-omgevingen te draaien om de afbeeldingen meer veilig te houden en de latentie tussen de Docker Engine en de afbeeldingsrepository te verminderen.
De Docker Registry is beschikbaar als een container die kan worden gelanceerd zoals elke andere container. Omdat de registratie meerdere afbeeldingen bevat, is het goed idee om er een opslagvolume aan te attenueren.
Bekijk dat de container in de achtergrond wordt uitgevoerd met de poort 5000
exposeerd en de registry
map naar het host bestandssysteem gepaard. U kunt verifiëren dat de container is gestart door de docker ps
opdracht uit te voeren.
We kunnen nu een lokale afbeelding labelen en pushen naar de privé-registratie. Laat ons eerst de busybox
container van Docker Hub pullen en taggen.
De vorige commando bevestigt dat de busybox
container nu is getagged met localhost:5000
, dus push de afbeelding naar de privé-registratie.
Na de afbeelding push naar de lokale registratie, probeer ze nu te removeren en haal ze weer uit de registratie.
We hebben de volle cirkel gevolgd van het pullen van de afbeelding, taggen, pushen naar de lokale registratie, en, uiteindelijk, haal hem terug uit de omgeving.
Er kunnen momenten zijn waarin je de privé-registratie op een aparte host wilt draaien. De Docker Engine op verschillende machines zal met de remote registry communiceren om afbeeldingen te halen en te pushnen.
Omdat het register niet beveiligd is, moeten we de configuratie van Docker Engine aanpassen om toegang tot een onveilig register mogelijk te maken. Doe dit door het bestand daemon.json
te wijzigen dat zich bevindt in /etc/docker/daemon.json
. Maak het bestand aan als het niet bestaat.
Voeg de volgende ingang toe:
{
"insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"]
}
Vervang REMOTE_REGISTRY_HOST
door de hostnaam of het IP-adres van het externe register. Herstart Docker Engine om ervoor te zorgen dat de configuratiewijzigingen worden toegepast.
##Conclusie
Deze handleiding heeft je geholpen om aan de slag te gaan met Docker. Het besprak de essentiële concepten, inclusief installatie, containerbeheer, imagebeheer, opslag en privéregister. De komende sessies en artikelen in deze reeks zullen je helpen om verder te gaan dan de basis van Docker.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-docker