Oamenii care îl fac pe Docker să o descrie folosind o metaforă pentru o tehnologie destul de veche: containerul de transport maritim.
În timp ce nici măcar nu ne gândim sau nu le observăm prea mult acum, containerul de transport maritim era de fapt o tehnologie destul de revoluționară în vremurile sale. Indiferent de forma sau mărimea elementului original, folosind un container standard, proprietarul vasului / avionului / camionul / ce-ai-a putut să-și dea seama cu ușurință câte resurse au nevoie să aloce.
Docker încearcă să ia același nivel de conveniență și să-l aducă în lumea serverului. Este extensia firească a unor instrumente cum ar fi Vagrant, care vă permit să implementați aceeași mașină virtuală pe care o utilizați în dezvoltarea în medii de producție. Mașinile virtuale în stil vagrant sunt minunate, dar sunt grele. Ei iau o mulțime de resurse pentru a rula, multe dintre ele fiind redundante: o imagine vagabondă încarcă o întreagă copie nouă de Linux într-una existentă. Nu ar fi mai bine dacă ați putea folosi confortul și uniformitatea Vagrantului, dar nu trebuie să reîncărcați întregul sistem de operare? Ei bine, exact asta face Docker.
În acest tutorial, vă voi trece prin întregul flux de lucru Docker. Mai întâi vom parcurge pașii pentru a obține o aplicație web Python simplă, care are câteva dependențe de Python și depinde de o bază de date Redis pentru ca persistența să funcționeze. Apoi vom instala Docker și vom instala toate cerințele aplicației web (dependentele Redis, Python și Python) într-o singură imagine Docker. Apoi vom folosi acea imagine și vom implementa pe un alt server.
Vom utiliza o aplicație de probă pentru jucării, dar pașii pentru a implementa propriile aplicații reale ar fi foarte asemănători.
Pentru a începe, veți avea nevoie fie de o cutie Linux care rulează o versiune recentă a Ubuntu, fie o mașină virtuală care rulează o versiune recentă a Ubuntu. Dacă doriți să urmați pe deplin tutorialul și să implementați aplicația, atunci veți avea nevoie și de oa doua mașină (sau oa doua mașină virtuală) pe care să o deplasați.
Primul pas este de a instala Docker în sine. Docker-ul se află într-o dezvoltare foarte rapidă, astfel încât cel mai simplu mod de instalare se schimbă destul de repede. Consultați secțiunea Docker de început, dacă doriți să verificați marginea de tăiere.
În caz contrar, urmați pașii de mai jos și vom configura o instalare Docker bazată pe o mașină virtuală Vagrant, care va funcționa pe oricare dintre cele mai importante sisteme de operare. În primul rând, mergeți pe site-ul Vagrant și instalați cele mai recente Vagrant și VirtualBox pentru sistemul dvs. de operare.
Odată instalat Vagrant, creați un folder nou, deschideți un prompt de comandă acolo și procedați în felul următor:
vagrant init hashicorp / precise64 (... așteaptă un timp ...) vagrant up vagrant ssh
Vagrantul a avut grijă să creeze o mașină virtuală care să ruleze Ubuntu 12.04 pentru tine și acum ai fost în SSH. Acum putem urma instrucțiunile de instalare ale Ubuntu de la Docker. Verificați site-ul web în cazul în care au existat modificări de la data la care a fost scris, dar, cel mai probabil, aveți posibilitatea să inserați direct următoarele comenzi în terminal:
# instalați nucleul de backed sudo apt-get update sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring # reboot sudo reboot
Veți reveni la promptul mașinii dvs. locale atunci când VM repornește, deci așteptați câteva momente și faceți altul:
vagrant ssh
... la SSH înapoi în VM. Acum că cerințele preliminare ale Docker-ului au fost instalate cu succes, trebuie să mergem mai departe și să instalăm chiar Docker. Inserați următoarea comandă:
curl -s https://get.docker.io/ubuntu/ | sudo sh
... care va lua un script de instalare Docker simplu de pe site-ul Docker și va rula. Docker ar trebui să fie acum instalat cu succes, așa că să începem să jucăm cu el.
O singura data apt-get
și-a terminat magia, faceți următoarele:
sudo Docker rulați -i-t ubuntu / bin / bash
... pentru a verifica și a vedea că instalarea a avut succes. Dacă funcționează, Docker va continua să descarce o imagine Ubuntu Docker și după un timp, veți ajunge la ceea ce arata ca un prompt root. Simțiți-vă liber să jucați puțin, veți observa că vă aflați într-un mediu care este complet separat de mașina gazdă. Probabil ați observat rădăcină
și #
semnați promptul. Vii ca utilizator root într-un mediu virtual nou. Dacă emiteți a utilizatori
comanda, veți vedea că ceilalți utilizatori nu mai sunt prezenți.
Merită să luați un minut pentru a vă explica ce docher
comanda pe care tocmai ați făcut-o și cum sa întâmplat această magie.
alerga
ComandaUtilitatea Docker pare să fi avut o mare inspirație git
este interfața de linie de comandă și, ca rezultat, utilizează subcomandările. În acest caz, am rulat alerga
subcomanda. alerga
comanda necesită două argumente: o imagine și o comandă.
De asemenea, este inteligent, deci dacă (ca și în acest caz) nu aveți instalat acea imagine, acesta va interoga depozitul central Docker și va descărca unul pentru dvs. Aici i-am spus să o conducă ubuntu
imagine și Docker informat că ar trebui să înceapă / Bin / bash
în interiorul acelei imagini. -T
și -eu
spuneți Docker să atribuiți un TTY și să rulați în "modul interactiv", cu alte cuvinte, pentru a obține un prompt de comandă. Motivul pentru aceasta este faptul că Docker funcționează puțin diferit de alte programe de virtualizare cu care ați putea fi familiarizați. Imaginile Docker nu "boot", ele rulează. Utilizând instalarea Linux existentă, pornirea unei imagini Docker poate fi imediată. În unele moduri, Docker este mai aproape de Linux chroot
decât la instrumentele de virtualizare mai tradiționale, cum ar fi VMWare sau VirtualBox.
Există și alte diferențe cheie față de instrumentele de virtualizare standard. Să facem un experiment rapid și să creăm un fișier și să tipăm conținutul acestuia:
ecou Un experiment> experiment.txt
Acum când o faci:
cat experiment.txt
Acesta va imprima fericit:
Un experiment
Până acum, atât de bine, experimentul nostru stupid funcționează exact așa cum era de așteptat. Hai să ieșim din Docker și să ne întoarcem la linia de comandă a mașinii gazdă:
Ieșire
Dacă reporniți Docker cu aceeași comandă pe care ați folosit-o înainte:
sudo Docker rulați -i-t ubuntu / bin / bash
... veți observa că lucrurile nu se mai comportă așa cum v-ați aștepta. Dacă încercați să pisați fișierul pe care l-am creat ultima dată, primiți acum un mesaj de eroare:
root @ e97acdf4160c: / # cat experiment.txt cat: experiment.txt: Nici un astfel de fișier sau director
Deci ce se întâmplă? Schimbările la imaginile Docker nu persistă în mod prestabilit. Pentru a salva modificările într-o imagine Docker, trebuie să faceți asta comite
lor, git
stil. S-ar putea să vă obișnuiți puțin, dar este destul de puternic, deoarece înseamnă că puteți, de asemenea, să-i "ramificați" git
stil (mai târziu despre asta).
Pentru moment, să facem ceva mai util. Să instalăm piton
, Redis
și câteva alte utilitare pe care le vom folosi pentru a rula aplicația noastră demo în scurt timp. După aceea, vom comite
să ne menținem schimbările. Porniți o copie a programului Docker pe cea mai recentă imagine Ubuntu:
docker -t -i ubuntu / bin / bash
Este posibil ca imaginea bazei Ubuntu să nu includă Python, deci verificați dacă ați primit o copie tastând piton
la promptitudine. Dacă primiți un mesaj de eroare, atunci să-l instalăm:
apt-get actualizare apt-get install python
Până acum, bine. Este posibil ca mai tarziu sa dorim sa facem alte proiecte care folosesc Python, asa ca sa mergem mai departe si sa salvam aceste schimbari. Deschideți un alt prompt de comandă (dacă utilizați instalarea Vagrant recomandată mai sus, va trebui să vagrant ssh
din nou de la un prompt separat) și faceți următoarele:
docker ps
Veți obține o listă de mai jos, din toate containerele Docker care rulează în prezent:
ID IMAGE COMMAND CREATED PORTURI STATUT 54a11224dae6 ubuntu: 12.04 / bin / bash acum 6 minute Sus 6 minute
Numărul de sub coloana ID este important: acesta este ID-ul containerului. Acestea sunt unice, dacă ieșiți din container și executați din nou aceeași imagine, veți vedea un număr nou acolo.
Deci, acum că am instalat Python, să salvăm schimbările. Pentru a face acest lucru, utilizați comite
care are două argumente: containerul ale cărui modificări doriți să le stocați și numele imaginii. Convenția Docker este de a utiliza un userid urmat de a /
și numele scurt al imaginii. Deci, în acest caz, să o numim Tuts / python
. Eliberați următoarea comandă pentru a salva instalarea Python, asigurându-vă că ați înlocuit ID-ul pentru containerul dvs. cu ultimul pas
docker comite tuts / python
După câteva secunde, se va întoarce cu o serie de litere și numere. Acesta este ID-ul imaginii pe care tocmai l-ați salvat. Puteți rula această imagine ori de câte ori doriți și vă puteți referi la ea fie prin acest număr de identificare, fie mai ușor de memorat Tuts / python
numele pe care l-am atribuit.
Să rulam o copie a imaginii pe care tocmai am făcut-o:
docker rulați -t -i tuts / python / bin / bash
În acest moment, ar trebui să aveți două ferestre terminale deschise care rulează două sesiuni separate Docker.
Veți observa acum că dacă tastați piton
în oricare dintre ele, nu veți mai primi un mesaj de eroare. Încercați să creați un fișier în a doua fereastră:
touch / testfile
Acum, reveniți la fereastra Docker originală și încercați să vizualizați fișierul:
pisică / testfile
Veți primi un mesaj de eroare. Acest lucru se datorează faptului că rulați o mașină virtuală complet diferită bazată pe imaginea pe care ați creat-o cu debarcader
comanda. Sistemele dvs. de fișiere sunt complet separate.
Dacă deschideți un alt terminal (din nou, va trebui să rulați vagrant ssh
dacă utilizați Vagrant) și faceți următoarele:
docker ps
... veți vedea asta docher
afișează acum două imagini care rulează, nu doar una. Puteți să vă angajați separat în fiecare din aceste imagini. Pentru a continua cu git
metafora, lucrați acum cu două filiale și sunt liberi să "se diferențieze".
Să mergem mai departe și să închidem ultima fereastră pe care am deschis-o. Dacă alergi docker ps
din nou, va fi acum doar un singur ID enumerate. Dar dacă vrei să te întorci la un container anterior? Dacă tastați:
docker ps -a
Docker va lista toate containerele anterioare, de asemenea. Nu puteți rula un container care a ieșit, dar puteți utiliza codurile anterioare ale containerului pentru a comemora imagini noi. Dacă rulați noua imagine, atunci veți reveni la starea anterioară a recipientului.
Să închidem ferestrele noi pe care le-am deschis și să revenim la terminalul pentru prima sesiune Docker pe care am început-o. Odată ce ați revenit, continuați și instalați mai multe instrumente pentru aplicația noastră mică. În acest caz, trebuie să instalați managerul de pachete Python, două module Python pentru a permite Python să acționeze ca un server web și să interacționeze cu Redis
, și serverul Redis în sine.
apt-get instalează python-pip redis-server pip instalare sticlă redis
Odată terminate, să angajăm această imagine. Din altă fereastră de terminal, executați următoarea comandă:
docker ps
... și ia o notă de ID-ul și o comite sub numele Tuts / pyredis
:
docker comite tuts / pyredis
Deci, acum avem o imagine Docker care conține instrumentele necesare pentru a rula o mică aplicație web Python, cu Redis servind ca backend. Dacă aveți proiecte viitoare care vor folosi același stiva, tot ce trebuie să faceți pentru a le iniția este: docker rulați -t -i tuts / pyredis / bin / bash
și se angajează odată ce ați adăugat codul sursă.
Ok, așa că fundalul nostru este înființat. Acum, pentru a configura aplicația în sine!
Am creat o mică aplicație care folosește modulele Redis și Python pe care le-am instalat până acum. Aplicația este destul de simplă, tot ceea ce face este să afișeze o listă a tastelor Redis și oferă o interfață rudimentară pentru a le adăuga și a le edita. Să obținem codul sursă pe mașina dvs. gazdă ( vagrant ssh
sesiune):
cd git clone https://github.com/nikvdp/tuts-docker.git pyredis
În directorul de acasă al mașinii gazdă, veți avea acum un a pyredis
care conține scriptul Python pe care îl vom folosi. Deci, cum mergem să copiem această aplicație în imaginea noastră Docker?
Ei bine, Docker are o caracteristică plăcută care vă permite să montați un director local în interiorul containerului. Să rulam o altă imagine Docker și să montează dosarul:
docker run -v ~ / pyredis: / tuts: rw -t -i tuts / pyredis / bin / bash
Acest lucru este la fel ca al nostru alerga
comenzi de la înainte, cu adăugarea -v
parametru.
De fapt, această comandă vă permite să partajați un dosar între Docker și mașina gazdă. :
indică căile de împărțire. În cazul nostru, ne împărtășim pyredis
dosar, situat la ~ / Pyredis
pe mașina noastră și montarea acesteia / tuts
în interiorul imaginii Docker. rw
pe capăt este pentru "read-write" și înseamnă că modificările aduse imaginii Docker vor apărea, de asemenea, pe mașina noastră.
La promptul dvs. Docker, puteți face acum:
cd / tuts ls
... și a vedea conținutul ~ / Pyredis
folder pe aparatul dvs..
Această parte este temporară, totuși, dacă executați această imagine Docker pe un alt computer sau re-executați această imagine fără -v
, imaginea nu va mai avea acces la ea. Să o copiem într-o altă locație din interiorul imaginii Docker:
cp-R / tuts / / pyredis
Deoarece modificările aduse sistemelor de fișiere Docker sunt efemere în mod implicit, să salvăm acest lucru în imagine făcând din nou docker ps
pentru a obține codul nostru de containere și pentru a ne angaja modificările:
docker comite tuts / pyredis
Veți observa că ne-am angajat la același nume de imagine pe care l-am angajat ultima oară, Tuts / pyredis
. Docker va actualiza imaginea și va păstra un jurnal al tuturor modificărilor pentru dvs. Ca git
, dacă vă încurcați, vă puteți întoarce la o versiune bună pur și simplu docker alerga
dându-i ID-ul. Pentru a vedea istoricul unei imagini, încercați următoarele:
istoricul dockerilor tuts / pyredis
Veți vedea ceva de genul:
ID CREATED CREATED de tuts / pyredis: ultimele 10 secunde în urmă / bin / bash 4c3712e7443c 1 oră în urmă / bin / bash ubuntu: 12.10 6 luni în urmă / bin / bash 27cf78414709 6 luni în urmă
Aceasta este o istorie a tuturor comitetelor pe care le-am făcut în procesul de creare a Tuts / pyredis
imagine, inclusiv pe cele pe care le-am angajat în diferite nume ca Tuts / python
. Dacă doriți să vă întoarceți la comitet chiar înainte de a ne copia pyredis
aplicație în / pyredis
ați putea încerca (schimbarea ID-urilor pentru a se potrivi cu ceea ce arată dvs.):
docker rulați -t -i 4c3712e7443c / bin / bash
... și veți găsi că nu există / pyredis
director.
Deci acum avem toate piesele în loc. Următorul pas este de a rula aplicația din interiorul containerului. De vreme ce implementăm o aplicație web, va trebui să specificăm o modalitate de a accesa aplicația pe web. alerga
comanda te-a acoperit (din nou). Comanda Run Docker acceptă a -p
care vă permite să specificați cum vor fi mapate porturile.
Dacă utilizați Vagrant pentru a rula programul Docker, va trebui să configurați redirecționarea portului Vagrant înainte de a putea efectua teste semnificative. Dacă nu utilizați Vagrant, treceți cu ușurință acest pas.
Dacă utilizați Vagrant pentru a testa acest lucru, va trebui să configurați redirecționarea portului astfel încât browserul Web al mașinii dvs. locale să poată accesa porturile din VM Vagrant, care la rândul său vor transmite portul instanței Docker. Deci, în cazul nostru, vom instala portul 9000 al mașinii noastre locale pentru a ne transmite la Vulcanul VM 9000, care, la rândul său, Tuts / pyredis
Portul instanței portului 8080.
Pe mașina dvs. locală, reveniți la dosarul pe care l-ați introdus pentru prima oară vagrant init
. Veți găsi un fișier text numit pur și simplu Vagrantfile
. Deschideți-l în editorul dvs. de text preferat și căutați următoarea porțiune:
# Creați o mapare a porturilor redirecționate, care permite accesul la un anumit port # din cadrul aparatului dintr-un port al mașinii gazdă. În exemplul de mai jos, # accesarea "localhost: 8080" va accesa portul 80 al mașinii de oaspeți. # config.vm.network "forwarded_port", oaspete: 80, gazdă: 8080
Dezrobiți linia finală și schimbați porturile de la 80 și 8080 la 8080
și 9000
. Rezultatul ar trebui să arate astfel:
# Creați o mapare a porturilor redirecționate, care permite accesul la un anumit port # din cadrul aparatului dintr-un port al mașinii gazdă. În exemplul de mai jos, # accesarea "localhost: 8080" va accesa portul 80 al mașinii de oaspeți. config.vm.network "forwarded_port", vizitator: 8080, gazdă: 9000
Acum rulați:
reîncărcarea vagonului
... care va determina VM-ul Vagrant să se repornească cu portul corect înainte. Odată ce acest lucru este complet, puteți rula vagrant ssh
din nou și continuați tutorialul.
Micul nostru pyredis
Aplicația implicită deschide un mic server web pe portul 8080. Următoarea comandă vă va permite să accesați portul 8080 prin portul 9000 pe mașina gazdă:
docker rulați -t -i -p 9000: 8080 tuts / pyredis / bin / bash
Veți primi o solicitare de root pentru Docker, deci porniți aplicația noastră:
redis-serverul 2> & 1> / dev / null & python /pyredis/app.py
Dacă totul merge bine, veți vedea următoarele:
Sticlă v0.11.6 pornire server (folosind WSGIRefServer ()) ... Ascultarea pe http: // localhost: 8080 / Hit Ctrl-C pentru a părăsi.
Acest lucru înseamnă că serverul rulează. Pe mașina dvs. locală, aprindeți un browser web și indicați-l localhost: 9000
(dacă faceți acest tutorial pe un server la distanță, asigurați-vă că aveți acces la rețea la portul 9000 și înlocuiți-l gazdă locală
cu adresa serverului dvs. web).
Cu puțin noroc, ar trebui să vedeți ecranul principal pentru aplicația noastră mică. Mergeți mai departe și adăugați câteva chei și schimbați unele valori. Datele ar trebui să persiste. Cu toate acestea, dacă ieșiți din prompterul Docker și reporniți Docker, baza de date va fi din nou goală, ceea ce trebuie păstrat în minte dacă intenționați să găzduiți baza dvs. de date într-un container Docker.
Deci, acest lucru este minunat pentru testare, dar obiectivul aici este să puteți implementa aplicația. Nu doriți să introduceți comenzi pentru a porni aplicația manual de fiecare dată.
Docker vine din nou la salvare. Când vă angajați, Docker poate salva automat unele informații de rulare, cum ar fi porturile pe care să le hartă și ce comenzi să se execute la pornirea imaginii. În acest fel, tot ce trebuie să faceți este să tastați docher
și Docker va avea grijă de restul. Reutilizarea adevărată.
Pentru scriptul nostru, avem doar două comenzi pentru a rula la pornire:
redis-serverul 2> & 1> / dev / null & python /pyredis/app.py
Cel mai simplu mod de a face acest lucru este de a crea un mic script de lansare care rulează aceste două comenzi. Să începem Tuts / pyredis
din nou și adăugați un mic script de lansare (copiați direct și lipiți mai jos, în promptul Docker):
docker rulați -t -i tuts / pyredis / bin / bash pisică> /pyredis/launch.sh <&1 > / dev / null și #! / bin / sh python /pyredis/app.py EOF chmod + x /pyredis/launch.sh
Aceasta a salvat comenzile pe care le folosim pentru a lansa serverul Python într-un mic script de bash numit launch.sh
și stabilește bitul executabil astfel încât să fie mai ușor de rulat.
Acum, că scenariul se află în imagine cu succes, de la un alt terminal, comiteți-l astfel încât acesta să persevereze (amintiți-vă să faceți a docker ps
pentru a obține mai întâi codul celui mai recent container al dvs.):
docker comite tuts / pyrdis
Hai să încercăm asta. Dacă ieșiți din prompterul Docker și îl rulați din nou cu următoarea comandă, ar trebui să puteți accesa aplicația web Pyredis la localhost: 9000
, ca și ultima oară.
docker rulați -t -i -p 8000: 8080 tuts / pyredis / bin / bash /pyredis/launch.sh
Ok, deci acum putem rula aplicația noastră mică cu o singură comandă. Dar sunt mai multe! Docker vă permite să salvați unele informații de configurare implicite cu comitetele dvs. În acest fel, nu trebuie să ne amintim să tastați maparea portului și să lansați informații de comandă de fiecare dată și puteți da o imagine Docker altcuiva. Ei pot rula apoi cu un simplu docker alerga
și Docker are grijă de restul.
Pentru a configura acest lucru, trebuie să transmiteți în anumite informații JSON comenzii commit. Există o mulțime de parametri pe care îi puteți folosi, dar pentru moment ne vom ocupa doar de porturile de mapare și de scenariile de inițializare. Activați editorul de text preferat și lipiți-l în următoarele:
"cmd": ["/ bin / bash", "/pyredis/launch.sh"], "PortSpecs": ["9000: 8080"]
Aceasta reprezintă informațiile pe care le-am introdus în -p
precum și calea către scriptul de lansare. Un important aspect de observat este faptul că pentru cmd
opțiune, fiecare loc unde ați folosi în mod normal un spațiu este de fapt trecut ca un parametru separat.
Salvați fragmentul JSON într-un fișier numit runconfig.json
și să actualizăm Docker să o folosească.
docker comite -run = $ (cat runconfig.json) tuts / pyredis
Acum, dacă faceți:
docker rula tuts / pyredis
Vei vedea sticla
începeți și puteți accesa aplicația prin intermediul browserului.
Creatorii docker-ului au creat un registru public pe care oricine îl poate împinge și scoate imagini Docker. Aceasta înseamnă că implementarea noii dvs. aplicații pe un server de la distanță este la fel de ușoară precum împingerea acesteia în registrul central al Docker și apoi tragerea acestuia de pe un server unde ați instalat Docker.
E destul de simplu, așa că te voi referi la documentația proprie a lui Docker. Dacă, în schimb, doriți să implementați în mod privat, citiți mai departe secțiunea (ele) următoare.
Excelent, acum avem o imagine Docker ușor de folosit care rulează pe mașină. Următorul pas este implementarea acestuia pe un server!
Această parte este puțin complicată. Modelul de distribuție al Docker se bazează pe ideea depozitelor. Aveți posibilitatea să împingeți și să trageți imaginile Docker într-un depozit Docker cât doriți și diferite servere pot trage cu plăcere diferite imagini. Acest lucru este minunat, dar, din păcate, este nevoie de un pic de muncă pentru a vă găzdui propriul depozit. Dacă găzduiți sau creați software open source, puteți utiliza direct magazia publică Docker pentru a stoca imaginile. Cu toate acestea, dacă desfășurați codul proprietar, probabil că nu doriți să faceți acest lucru. Acest lucru vă oferă două opțiuni:
Primul este mai simplu, dar pierde multe dintre caracteristicile superioare ale lui Docker, cum ar fi păstrarea istoricului imaginilor și capacitatea de a stoca port maparea și configurarea rula în interiorul imaginii. Dacă acestea sunt importante pentru dvs., treceți la următoarea secțiune pentru a afla cum să vă configurați propriul depozit Docker (privat). Dacă doriți doar să puteți implementa imaginile pe serverele dvs., puteți utiliza această metodă.
Primul pas este să exportați containerul într-un .gudron
Arhiva. Puteți face acest lucru prin intermediul Docker's export
comanda. Pentru a implementa aplicația de exemplu pe care am folosit-o în acest tutorial, ați face ceva în felul următor:
doc de export> pyredis.tar
Docker va sta și se va descurca de ceva timp, dar după aceea veți avea un a pyredis.tar
fișierul care conține imaginea pe care ați creat-o. Puteți apoi să copiați pyredis.tar
la serverul dvs. și executați următoarele:
cat piredis.tar Docker import -
Docker va sta din nou pentru o vreme și în cele din urmă va scuipa identitatea noii imagini pe care a creat-o. Poti comite
acest lucru la un nume mai memorabil făcând acest lucru:
docker comite tuts / pyredis
Aplicația noastră tutorial este implementată acum și o puteți executa cu aceeași comandă de execuție ca înainte:
docker rulați -t -i -p 8000: 8080 tuts / pyredis / bin / bash /pyredis/launch.sh
Modul mai răcoros de a implementa aplicația dvs. este să găzduiți propriul magazin Docker. Obțineți Docker instalat pe o mașină și executați următoarea comandă:
docker rulați-p 5000: 5000 samalba / doc-registru
Așteaptă un pic pentru a descărca piesele și ar trebui să vezi în curând câteva mesaje despre pornirea unicorn și a muncitorilor de boot.
Aceasta înseamnă că registrul Docker este în funcțiune (în interiorul containerului Docker propriu) și este accesibil mașinii dvs. locale de la portul 5000. Ușor de înclinat, dar minunat. Să ne setăm mai întâi acreditările de conectare și apoi să împingem imaginea Docker pe care am creat-o mai devreme în tutorial în noul nostru registru. Într-un nou terminal, executați următoarele
docker login localhost: 5000
Mergeți mai departe și introduceți numele de utilizator, parola și e-mailul pe care doriți să îl utilizați în magazia dvs. Docker.
În scopul de a împinge Tuts / pyredis
app în repo, trebuie mai întâi să o "etichetăm" cu informațiile adresei de depozit privat cum ar fi:
eticheta de docare tuts / pyredis localhost: 5000 / tuts / pyredis
Aceasta îi spune lui Docker să creeze o nouă etichetă Tuts / pyredis
și asociați-o cu repo rulând la localhost: 5000
. Vă puteți gândi la această etichetă ca pe numele acestei imagini în depozit. Pentru consecvență, am păstrat aceleași nume și l-am marcat localhost: 5000 / Tuts / pyredis
, dar acest nume ar putea fi cu ușurință ceva complet diferit (cum ar fi localhost: 5000 / pyredis_prod
.)
Dacă alergi portocale imagini
acum veți vedea că există o imagine nouă cu numele localhost: 5000 / Tuts / pyredis
. Mecanismul Docker pentru specificarea depozitelor este strâns legat de mecanismul său de numire (sau de etichetare așa cum o pune Docker), deci tot ce aveți nevoie.
Pentru a împinge imaginea pe care am creat-o în depozitul nostru, trebuie doar să faceți împingere prin împingere
și numele imaginii etichetate complet (inclusiv adresa):
docker împinge localhost: 5000 / tuts / pyredis
Docker se va conecta la depozitul dvs. care rulează la localhost: 5000
și începeți să vă împingeți schimbările. Veți vedea o mulțime de mesaje despre diferitele cereri HTTP implicate care apar în cealaltă fereastră de terminal (cea care rulează samalba / Docker-registru
), iar informațiile despre încărcare vor trece în acest moment. Acest lucru va dura ceva timp, așa că ați putea dori să luați o cafea.
Un avertisment, dat fiind că magazia noastră Docker rulează în interiorul unui container Docker, trebuie să angajăm imaginea repozitorului după ce terminăm împingerea. În caz contrar, deoarece modificările sistemului de fișiere Docker sunt efemere, în mod implicit, imaginea pe care am împins-o în repo va dispărea imediat ce închidem local samalba / Docker-registru
Docker container.
Pentru a face acest lucru, faceți obișnuit docker ps
pentru a obține codul de funcționare samalba / Docker-registru
apoi contactează-l cu un nou container. Acest lucru nu este ideal, dacă faceți acest lucru în producție, doriți să configurați volume Docker sau să utilizați -v
opțiunea de mai sus pentru a persista fișierul repo direct pe server, în loc de interiorul containerului, dar acest lucru se află în afara scopului acestui tutorial.
Acum, pentru partea distractivă: implementarea noii noastre imagini Docker pe un nou server. Deoarece la momentul acestei scrieri, depozitările Docker nu au mecanisme de securitate sau autentificare, vom face treaba noastră peste tuneluri SSH securizate. De la mașina virtuală în care ați configurat Tuts / pyredis
tutorial, ssh
în serverul de producție și în portul 5000, cum ar fi:
ssh -R 5000: localhost: 5000 -l
-R
pavilion la ssh
înseamnă că atunci când te conectezi localhost: 5000
pe serverul de producție, SSH va trimite conexiunea înapoi la portul 5000 pe mașina dvs. virtuală, care la rândul său va fi redirecționată către samalba / Docker-registru
container în care trăim repo-ul nostru.
Dacă programul Docker nu este instalat pe acest server, continuați și instalați-l conform instrucțiunilor de instalare. Odată ce ați pornit programul Docker, implementarea imaginii dvs. este la fel de simplă:
docker trage localhost: 5000 / tuts / pyredis
Deoarece am creat un tunel prin SSH, Docker va crede că trage de pe serverul local localhost: 5000, dar acesta va fi tunelat la localhost local: 5000, care la rândul său devine redirecționat la Docker. Dați-i puțin timp să se descarce, dar odată ce ați terminat, ar trebui să aveți posibilitatea să rulați aplicația noastră pyredis exact așa cum am executat-o pe versiunea originală VM, inclusiv configurația de configurare și porturile salvate salvate:
docker rula tuts / pyredis
Deci asta e fundamentul lui Docker. Cu aceste informații puteți să creați și să gestionați imaginile Docker, să le împingeți și să le trageți la repo publice și private și să le implementați pe servere separate.
Acesta este un tutorial intro, deci există o mulțime de caracteristici Docker care nu au fost acoperite aici. Două dintre cele mai notabile sunt Dockerfiles și volume.
Documentele Docker sunt fișiere text pe care Docker le poate rula pentru a inițializa și a furniza imagini Docker. Aceștia pot face mult mai rapid procesul de crear