CoreOS + Docker
Povlačenje i pokretanje najnovijeg registra
Konfiguracija registra
Redis predmemorija (opcionalno)
Izgradnja kontejnera
Konfigurirajte svoj lokalni Docker klijent
Što je sljedeće?
Svi znamo i volimo Docker, platformu za stvaranje, upravljanje i distribuciju kontejnera aplikacija na više računala. Docker Inc. pruža uslugu za smještaj otvorenih spremnika za preuzimanje (ili povlačenje) poput git repozitorija poznatog kao "Docker Registry". Zamislite to kao GitHub za Docker kontejnere.
Ali što ako želite ugostiti svoj vlastiti registar odvojen od javnog? Pa, Docker Inc. je otvorio svoju aplikaciju Registry na GitHubu.
Ovaj vodič će vas odvesti kroz proces postavljanja privatnog Docker registra pomoću CoreOS-a na novom VPS-u.
CoreOS + Docker
Nećemo trošiti puno vremena na to što točno Docker i CoreOS mogu učiniti, jer je to izvan dosega ovog vodiča. U biti, CoreOS je dizajniran za masivne klastere poslužitelja, mali je, brz i automatski dobiva redovita sigurnosna ažuriranja. Njegov korijenski datotečni sustav je također samo za čitanje, što znači da morate koristiti Docker za pokretanje bilo koje vrste softvera koji nije uključen u osnovnu instalaciju.
To čini Core OS savršenim host sustavom za Docker!
Povlačenje i pokretanje najnovijeg registra
Docker Inc. je dao Registry kao sliku najviše razine, što znači da ga možemo povući prema dolje jednostavnim:
docker pull registry
This can take a few minutes depending on the connection speed.
Plus što je slika vrhunske razine također znači da dobiva redovitu podršku i ažuriranja.
Sada testirajmo registar. Možemo stvoriti novi spremnik pomoću slike registra:
docker run -p 5000:5000 -d --name=basic_registry registry
Za one koji nisu previše koristili Docker, -p
zastavica je za PORT
, što znači da izlažemo port 5000 iz spremnika na port hosta 5000.
Oznaka -d
označava daemon
, to će uzrokovati pokretanje spremnika u pozadini, a ne ispis izlaza na trenutnu SSH sesiju, također želimo imenovati ovaj osnovni testni spremnik pomoću --name
opcije tako da možemo lako upravljati njime kasnije.
Provjerite radi li se vaš osnovni spremnik registra pomoću docker ps
. Izlaz bi trebao izgledati slično:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
edfb54e4a8c4 registry:0.8.1 "/bin/sh -c 'exec do 7 seconds ago Up 6 seconds 0.0.0.0:5000->5000/tcp basic_registry
Također, posjetite http://YOUR_IP:5000
u svom web pregledniku i trebali biste dobiti poruku poput sljedeće:
"docker-registry server (dev) (v0.8.1)"
Notice the word dev
in the parenthesis. This means that the server is currently running the dev config. We'll look over more configuration soon.
Sada imate pokrenut vlastiti (vrlo osnovni) registar spremnika! Ali još nismo gotovi.
Možda želite ovo sačuvati privatno od znatiželjnih očiju ili možda pohranite svoje slike na Amazon S3 umjesto u lokalnoj pohrani. Prođimo kroz različite opcije konfiguracije u sljedećem odjeljku.
Prije nego krenemo dalje, uništimo testni spremnik kako ne bismo naišli na konfliktne portove.
docker kill basic_registry
Konfiguracija registra
Postoje dva načina na koje možemo prenijeti konfiguraciju u Docker Registry. Jedan način je prosljeđivanje varijabli okruženja u novi spremnik, a drugi je dodavanje konfiguracijske datoteke.
Evo nekoliko uobičajenih opcija konfiguracije koje ćemo koristiti:
loglevel
- Minimalna količina informacija za prijavu na konzolu. Zadano je info
.
standalone
- Treba li ovaj Registar djelovati samostalno? (Nikad ne postavlja upite javnom registru.) Zadana postavka je true
.
index_endpoint
- Ako nije samostalan, koji ćemo drugi indeks tražiti? Zadano index.docker.io
.
cache
i cache_lru
- Opcije koje se odnose na korištenje Redis predmemorije za male datoteke, to ćemo se dotaknuti kasnije.
storage
- Koju pozadinu za pohranu trebamo koristiti za ovaj poslužitelj? (U ovom vodiču koristit ćemo lokalno).
storage_path
- Ako koristimo lokalnu pohranu, koji direktorij bismo trebali koristiti za čuvanje datoteka?
Prije nego počnemo raditi s konfiguracijom, potrebna nam je osnovna datoteka za rad. Datoteka iz spremišta Docker Registry na GitHubu će raditi sasvim dobro:
wget https://raw.githubusercontent.com/docker/docker-registry/0.8/config/config_sample.yml
Datoteka bi se trebala uspješno spremiti s izlazom kao što je:
2014-09-14 14:09:01 (156 MB/s) - 'config_sample.yml' saved [5384/5384]
Sjajno! Sada možemo modificirati ovu datoteku kako bi odgovarala našim potrebama.
Jedini uređivač teksta koji dolazi s Core OS-om je vim
, ali ne brinite ako ga nikada prije niste koristili, ovo će objasniti korak po korak što urediti i kako to učiniti.
vim config_sample.yml
Nakon što otvorite datoteku, pritisnite I
i donji desni kut bi trebao prikazati: -- INSERT --
za način umetanja. Pomaknite se do dna datoteke pomoću tipki sa strelicama, trebali biste vidjeti odjeljak s oznakom prod
.
Promijenit ćemo dva retka, promjene su ispod
prod:
<<: *local
storage_path: _env:STORAGE_PATH:/data
Ono što smo učinili je da promijenimo prod
konfiguraciju da proizlazi iz local
odjeljka umjesto s3
odjeljka. Zatim smo prepisali da storage_path
bismo koristili put /data
unutar novog spremnika.
Nakon što ste potvrdili da su sve promjene točne, pritisnite ESC
za izlaz iz načina umetanja i upišite :wq
(to znači da upišite promjene u datoteku i zatvorite vim.)
Sada preimenujmo datoteku u just config.yml
mv config_sample.yml config.yml
Redis predmemorija (opcionalno)
Ako želite upotrijebiti redis za ubrzavanje registra spremnika, jednostavno je kao povlačenje novog spremnika iz javnog registra i dodavanje još nekoliko redaka konfiguracije.
Prvo povucite gornju sliku Redisa:
docker pull redis
Nakon što se slika uspješno povuče, možemo je pokrenuti i imenovati kao što smo učinili s testnim registrom:
docker run -d --name registry-redis redis
Budući da je redis u memoriji, za njega ne trebamo ništa konfigurirati jer ćemo ga povezati sa spremnikom registra u kasnijim koracima.
Još jednom, provjerite radi li pomoću docker ps
:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
54f65641eccf redis:2.8 "redis-server" 2 seconds ago Up 1 seconds 6379/tcp registry-redis
Sada ponovno otvorite config.yml
in vim
i uđite u način umetanja kao i prvi put kada smo ga uređivali.
Dodajte sljedeće retke ispod prod
odjeljka, pazeći da su pravilno uvučeni. Ovaj put samo dodajemo cache
i cache_lru
.
cache:
host: _env:REDIS_PORT_6379_TCP_ADDR
port: _env:REDIS_PORT_6379_TCP_PORT
db: 0
cache_lru:
host: _env:REDIS_PORT_6379_TCP_ADDR
port: _env:REDIS_PORT_6379_TCP_PORT
db: 1
Varijable okoline REDIS_PORT_6379_TCP_ADDR
i REDIS_PORT_6379_TCP_PORT
prosljeđuju se u spremnik registra nakon povezivanja s Redis spremnikom.
Uz to, sada ste postavili Redis spremnik koji će raditi ruku pod ruku s vašim spremnikom registra. Sada na izgradnju registra!
Izgradnja kontejnera
Imamo sve konfiguracije postavljene i spremne, sada moramo izgraditi stvarni spremnik registra.
vim Dockerfile
Pokrenite da biste stvorili novi Dockerfile. Uđite u način umetanja i slijedite izmjene u nastavku.
FROM registry:latest
# Add the custom configuration file we made
ADD ./config.yml /docker-registry/config/config.yml
# Create the data directory
RUN mkdir /data
# Set the configuration file to config.yml
env DOCKER_REGISTRY_CONFIG /docker-registry/config/config.yml
# Make sure we use the prod configuration settings
env SETTINGS_FLAVOR prod
Ono što smo učinili iznad je u biti proširiti sliku registra tako da će koristiti našu konfiguracijsku datoteku i postavke. Dockerfile je skup uputa za izgradnju koje Docker čita i gradi. Ako želite saznati više o Dockerfiles i njihovoj sintaksi, pogledajte službenu dokumentaciju Docker web-mjesta.
Zatim moramo napraviti spremnik za upotrebu.
docker build -t my_registry .
Sending build context to Docker daemon 13.82 kB
Sending build context to Docker daemon
Step 0 : FROM registry
---> e42d15ec8417
Step 1 : ADD ./config.yml /docker-registry/config/config.yml
---> 4339f026d459
Removing intermediate container 2d5138fbcd34
Step 2 : RUN mkdir /data
---> Running in a090f0bdbfd1
---> 8eb27ba6e12a
Removing intermediate container a090f0bdbfd1
Step 3 : env DOCKER_REGISTRY_CONFIG /docker-registry/config/config.yml
---> Running in 565b5bfb2b22
---> 914462e46dc0
Removing intermediate container 565b5bfb2b22
Step 4 : env SETTINGS_FLAVOR prod
---> Running in 31a92847b851
---> b5949575c374
Removing intermediate container 31a92847b851
Successfully built b5949575c374
Sada smo spremni za trčanje!
Napravimo direktorij na našem host sustavu za montiranje u spremnik kao /data
volumen.
mkdir registry-data
Sada možemo pokrenuti novi kontejner. Ako planirate koristiti Redis predmemoriju, upotrijebite 2. naredbu u nastavku.
# For a non-Redis cache registry
docker run -d -p 5000:5000 -v /home/core/registry-data:/data --name=private_reg my_registry
# For a Redis cached registry (Must have followed Redis Caching section above)
docker run -d -p 5000:5000 -v /home/core/registry-data:/data --name=private_reg --link registry-redis:redis my_registry
Kako biste bili sigurni da vaš poslužitelj radi ispravno, posjetite http://YOUR_IP:5000
. Vidjet ćete sljedeću poruku:
"docker-registry server (prod) (v0.8.1)"
Primijetite što (prod)
znači da su naše promjene konfiguracije bile uspješne!
Sada kada imamo vlastiti pokrenuti registar, želimo da ga Docker klijent na našim lokalnim strojevima počne koristiti. Obično biste koristili naredbu: docker login
, ali za našu upotrebu moramo dodati još jedan argument naredbi za prijavu:
docker login YOUR_IP:5000
Unesite korisničko ime i lozinku (razmišljajte o tome kao na stvaranju novog računa) i zanemarite poruku koja kaže da ga morate aktivirati.
Zatim, povucimo stokovnu sliku i gurnimo je u naše vlastito spremište.
# Pull the busybox image from the public registry
docker pull busybox
# Tag it with our IP/URL
docker tag busybox YOUR_IP:5000/busybox
# Push it to our newly made registry
docker push YOUR_IP:5000/busybox
Ako je sve ispravno, konačna poruka trebala bi biti u sljedećim redovima:
Pushing tag for rev [a9eb17255234] on
Čestitamo! Postavili ste svoje vlastito docker spremište.
Što je sljedeće?
Evo nekoliko ideja kako poboljšati svoj novi privatni registar:
- Obrnuti proxy pomoću Nginxa ili Apachea za postavljanje dodatne sigurnosti ispred njega, poput jednostavne HTTP auth.
- Nabavite domenu za svoj poslužitelj i postavite je tako da svom registru možete pristupiti nečim poput: registry.mysite.com
- Kupite (ili sami potpišite) SSL certifikat za dodatnu zaštitu ako vaši spremnici sadrže osjetljive podatke.