CoreOS + Docker
Stiahnutie a spustenie najnovšieho registra
Konfigurácia registra
Ukladanie do vyrovnávacej pamäte Redis (voliteľné)
Stavba kontajnera
Nakonfigurujte svojho lokálneho klienta Docker
Čo bude ďalej?
Všetci poznáme a milujeme Docker, platformu na vytváranie, správu a distribúciu kontajnerov aplikácií na viacerých počítačoch. Docker Inc. poskytuje službu na hosťovanie kontajnerov s otvoreným zdrojovým kódom, ktoré sa majú stiahnuť (alebo stiahnuť), ako je úložisko git známe ako „register Docker“. Predstavte si to ako GitHub pre kontajnery Docker.
Ale čo ak chcete hostiť svoj vlastný register oddelený od verejného? No, spoločnosť Docker Inc. sprístupnila svoju aplikáciu Registry na GitHub.
Tento tutoriál vás prevedie procesom nastavenia súkromného registra Docker pomocou CoreOS na novom VPS.
CoreOS + Docker
Nebudeme tráviť veľa času skúmaním toho, čo presne Docker a CoreOS dokážu, pretože to nie je v rámci tohto návodu. CoreOS je v podstate navrhnutý pre masívne serverové klastre, je malý, rýchly a automaticky dostáva pravidelné aktualizácie zabezpečenia. Jeho koreňový súborový systém je tiež iba na čítanie, čo znamená, že na spustenie akéhokoľvek softvéru, ktorý nie je súčasťou základnej inštalácie, musíte použiť Docker.
Vďaka tomu je Core OS dokonalým hostiteľským systémom pre Docker!
Stiahnutie a spustenie najnovšieho registra
Spoločnosť Docker Inc. poskytla register ako obraz najvyššej úrovne, čo znamená, že ho môžeme stiahnuť pomocou jednoduchého:
docker pull registry
This can take a few minutes depending on the connection speed.
Plus, že ide o obraz najvyššej úrovne, tiež znamená, že dostáva pravidelnú podporu a aktualizácie.
Teraz poďme otestovať register. Môžeme vytvoriť nový kontajner pomocou obrazu registra:
docker run -p 5000:5000 -d --name=basic_registry registry
Pre tých, ktorí nepoužívajú Docker príliš veľa, -p
príznak znamená PORT
, čo znamená, že odhaľujeme port 5000 z kontajnera na hostiteľský port 5000.
-d
Vlajka znamená daemon
, to spôsobí, že kontajner bežať na pozadí a nemožno tlačiť výstup do aktuálneho SSH, chceme tiež pomenovať základné testovaciu nádobu s použitím --name
voľby, takže ju môžeme ľahko spravovať neskôr.
Uistite sa, že váš základný kontajner databázy Registry beží pomocou docker ps
. Výstup by mal vyzerať podobne ako:
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
Navštívte tiež http://YOUR_IP:5000
vo svojom webovom prehliadači a mali by ste dostať správu ako je táto:
"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.
Teraz máte spustený svoj vlastný (veľmi základný) register kontajnerov! Ale ešte sme neskončili.
Možno to chcete udržať v súkromí pred zvedavými očami alebo možno ukladať svoje obrázky na Amazon S3 namiesto miestneho úložiska. V ďalšej časti si prejdeme rôzne možnosti konfigurácie.
Než sa pohneme ďalej, zabijme testovací kontajner, aby sme nenarazili na konfliktné porty.
docker kill basic_registry
Konfigurácia registra
Existujú dva spôsoby, ako môžeme odovzdať konfiguráciu do registra Docker. Jedným zo spôsobov je odovzdanie premenných prostredia do nového kontajnera a druhým je pridanie konfiguračného súboru.
Tu je niekoľko bežných možností konfigurácie, ktoré budeme používať:
loglevel
- Minimálne množstvo informácií na prihlásenie do konzoly. Predvolená hodnota je info
.
standalone
- Mal by tento register konať sám? (Nikdy sa nepýta na verejný register.) Predvolená hodnota je true
.
index_endpoint
- Ak nie samostatný, aký ďalší index budeme dopytovať? Predvolené index.docker.io
.
cache
a cache_lru
- Možnosti týkajúce sa používania vyrovnávacej pamäte Redis pre malé súbory, tomu sa budeme venovať neskôr.
storage
- Aký backend úložiska by sme mali použiť pre tento server? (V tomto návode budeme používať lokálne).
storage_path
- Ak používame lokálne úložisko, aký adresár by sme mali použiť na uchovávanie súborov?
Predtým, ako začneme pracovať s konfiguráciou, potrebujeme základný súbor, s ktorým budeme pracovať. Súbor z úložiska Docker Registry na GitHub bude fungovať dobre:
wget https://raw.githubusercontent.com/docker/docker-registry/0.8/config/config_sample.yml
Súbor by sa mal úspešne uložiť s výstupom, ako napríklad:
2014-09-14 14:09:01 (156 MB/s) - 'config_sample.yml' saved [5384/5384]
skvelé! Teraz môžeme tento súbor upraviť tak, aby vyhovoval našim potrebám.
Jediný textový editor, ktorý sa dodáva s Core OS, je vim
, ale nebojte sa, ak ste ho nikdy predtým nepoužili, krok za krokom vám vysvetlí, čo a ako upraviť.
vim config_sample.yml
Keď máte súbor otvorený, stlačte I
a v pravom dolnom rohu by sa malo zobraziť: -- INSERT --
pre režim vkladania. Prejdite úplne na koniec súboru pomocou klávesov so šípkami, mali by ste vidieť sekciu označenú prod
.
Budeme meniť dva riadky, zmeny sú nižšie
prod:
<<: *local
storage_path: _env:STORAGE_PATH:/data
Urobili sme zmenu prod
konfigurácie tak, aby bola odvodená od local
sekcie namiesto s3
sekcie. Potom sme prepísali, storage_path
aby sme použili cestu /data
vo vnútri novej nádoby.
Keď sa ubezpečíte, že všetky zmeny sú správne, stlačením ESC
ukončite režim vkladania a zadajte :wq
(to znamená zapíšte zmeny do súboru a ukončite vim.)
Teraz premenujeme súbor na just config.yml
mv config_sample.yml config.yml
Ukladanie do vyrovnávacej pamäte Redis (voliteľné)
Ak by ste chceli použiť redis na zrýchlenie registra kontajnerov, je to také jednoduché, ako vytiahnuť nový kontajner z verejného registra a pridať niekoľko ďalších riadkov konfigurácie.
Najprv vytiahnite obrázok najvyššej úrovne Redis:
docker pull redis
Po úspešnom stiahnutí obrázka ho môžeme spustiť a pomenovať tak, ako sme to urobili s testovacím registrom:
docker run -d --name registry-redis redis
Pretože redis je v pamäti, nemusíme preň robiť žiadnu konfiguráciu, pretože ho prepojíme s kontajnerom registra v neskorších krokoch.
Ešte raz sa uistite, že beží pomocou 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
Teraz znovu otvoriť config.yml
v vim
a vstúpi vložka režimu, rovnako ako prvýkrát sme ho upravovať.
Pridajte nasledujúce riadky pod prod
časť, pričom dbajte na správne odsadenie. Tentokrát pridávame len cache
a 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
Premenné prostredia REDIS_PORT_6379_TCP_ADDR
a REDIS_PORT_6379_TCP_PORT
sú odovzdané do kontajnera registra po prepojení s kontajnerom Redis.
Vďaka tomu máte teraz nastavený kontajner Redis, ktorý bude fungovať ruka v ruke s kontajnerom vášho registra. Teraz na budovanie registra!
Stavba kontajnera
Konfiguráciu máme nastavenú a pripravenú, teraz musíme vytvoriť skutočný kontajner registra.
Nahodiť vim Dockerfile
vytvoriť novú Dockerfile. Zadajte režim vkladania a postupujte podľa nižšie uvedených úprav.
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
To, čo sme urobili vyššie, je v podstate rozšíriť obraz databázy Registry, takže bude používať náš konfiguračný súbor a nastavenia. Dockerfile je súbor pokynov na zostavenie, ktoré si Docker môže prečítať a zostaviť. Ak sa chcete dozvedieť viac o súboroch Docker a ich syntaxi, pozrite si oficiálnu dokumentáciu lokality Docker.
Ďalej musíme postaviť kontajner na použitie.
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
Teraz sme pripravení bežať!
Urobme adresár v našom hostiteľskom systéme, ktorý pripojíme do kontajnera ako /data
zväzok.
mkdir registry-data
Teraz môžeme roztočiť novú nádobu. Ak plánujete používať vyrovnávaciu pamäť Redis, použite 2. príkaz nižšie.
# 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
Aby ste sa uistili, že váš server beží správne, navštívte stránku http://YOUR_IP:5000
. Uvidíte nasledujúcu správu:
"docker-registry server (prod) (v0.8.1)"
Všimnite si, že (prod)
naše konfiguračné zmeny boli úspešné!
Teraz, keď máme vlastný spustený register, chceme, aby ho klient Docker na našich lokálnych počítačoch začal používať. Zvyčajne by ste použili príkaz: docker login
, ale pre naše použitie musíme k príkazu login pridať ešte jeden argument:
docker login YOUR_IP:5000
Zadajte používateľské meno a heslo (myslite si to ako vytvorenie nového účtu) a ignorujte správu, že ho musíte aktivovať.
Ďalej vytiahneme obrázok z akcie a posunieme ho do nášho vlastného úložiska.
# 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
Ak všetko funguje správne, konečná správa by mala vyzerať takto:
Pushing tag for rev [a9eb17255234] on
Gratulujem! Nastavili ste svoje vlastné úložisko dockerov.
Čo bude ďalej?
Tu je niekoľko nápadov, ako zlepšiť svoj nový súkromný register:
- Reverzný proxy pomocou Nginx alebo Apache, aby sa pred neho umiestnilo ďalšie zabezpečenie, ako napríklad jednoduché overenie HTTP.
- Získajte doménu pre svoj server a nastavte ju tak, aby ste mohli pristupovať k svojmu registru pomocou niečoho ako: register.mysite.com
- Zakúpte si (alebo svojpomocne podpíšte) certifikát SSL, aby ste získali ešte väčšiu ochranu, ak vaše kontajnery obsahujú citlivé informácie.