CoreOS + Docker
Vlečenje in zagon najnovejšega registra
Konfiguracija registra
Predpomnjenje Redis (izbirno)
Gradnja posode
Konfigurirajte lokalnega odjemalca Docker
Kaj je naslednje?
Vsi poznamo in imamo radi Docker, platformo za ustvarjanje, upravljanje in distribucijo aplikacijskih vsebnikov na več računalnikih. Docker Inc. ponuja storitev za gostovanje odprtokodnih vsebnikov, ki jih je treba prenesti (ali potegniti), kot je git repozitorij, znan kot »Docker Registry«. Pomislite na to kot na GitHub za vsebnike Docker.
Kaj pa, če želite gostiti svoj lasten register, ločen od javnega? No, Docker Inc. je odprl svojo aplikacijo Registry na GitHub.
Ta vadnica vas bo popeljala skozi postopek nastavitve zasebnega registra Docker z uporabo CoreOS na novem VPS.
CoreOS + Docker
Ne bomo porabili veliko časa za pregledovanje, kaj točno zmoreta Docker in CoreOS, saj je to izven obsega te vadnice. V bistvu je CoreOS zasnovan za velike strežniške gruče, je majhen, hiter in samodejno prejema redne varnostne posodobitve. Njegov korenski datotečni sistem je tudi samo za branje, kar pomeni, da morate uporabiti Docker za zagon katere koli vrste programske opreme, ki ni vključena v osnovno namestitev.
Zaradi tega je Core OS popoln gostiteljski sistem za Docker!
Vlečenje in zagon najnovejšega registra
Docker Inc. je zagotovil register kot sliko najvišje ravni, kar pomeni, da ga lahko povlečemo navzdol s preprostim:
docker pull registry
This can take a few minutes depending on the connection speed.
Plus, da je slika najvišje ravni, pomeni tudi, da dobiva redno podporo in posodobitve.
Zdaj pa preizkusimo register. S sliko registra lahko ustvarimo nov vsebnik:
docker run -p 5000:5000 -d --name=basic_registry registry
Za tiste, ki Dockerja niso uporabljali preveč, -p
zastavica pomeni PORT
, kar pomeni, da razkrivamo vrata 5000 iz vsebnika na vrata gostitelja 5000.
Oznaka -d
pomeni daemon
, to bo povzročilo, da se vsebnik izvaja v ozadju in ne tiska izhodnih podatkov v trenutno sejo SSH, prav tako želimo poimenovati ta osnovni testni vsebnik z --name
možnostjo, da ga bomo lahko pozneje zlahka upravljali.
Prepričajte se, da se vaš osnovni vsebnik registra izvaja z uporabo docker ps
. Izhod bi moral izgledati podobno:
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
Obiščite tudi http://YOUR_IP:5000
v svojem spletnem brskalniku in prejeli bi naslednje sporočilo:
"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.
Zdaj imate zagnan lasten (zelo osnovni) register vsebnikov! Ampak še nismo končali.
Morda želite to ohraniti zasebno pred radovednimi očmi ali morda shranite svoje slike na Amazon S3 namesto v lokalno shranjevanje. Oglejmo si različne možnosti konfiguracije v naslednjem razdelku.
Preden nadaljujemo, uničimo testni vsebnik, da ne naletimo na konfliktna vrata.
docker kill basic_registry
Konfiguracija registra
Obstajata dva načina, kako lahko konfiguracijo prenesemo v register Docker. Eden od načinov je prenos spremenljivk okolja v nov vsebnik, drugi pa je, da dodate konfiguracijsko datoteko.
Tukaj je nekaj pogostih konfiguracijskih možnosti, ki jih bomo uporabljali:
loglevel
- Najmanjša količina informacij za prijavo v konzolo. Privzeto je info
.
standalone
- Ali naj ta register deluje samostojno? (Nikoli ne poizveduje po javnem registru.) Privzeto je true
.
index_endpoint
- Če ni samostojen, kateri drugi indeks bomo poizvedovali? Privzeto index.docker.io
.
cache
in cache_lru
- Možnosti, ki se nanašajo na uporabo predpomnilnika Redis za majhne datoteke, se bomo dotaknili pozneje.
storage
– Kakšno zaledno zaledno shrambo naj uporabimo za ta strežnik? (V tej vadnici bomo uporabljali lokalno).
storage_path
- Če uporabljate lokalno shranjevanje, kateri imenik naj uporabimo za shranjevanje datotek?
Preden začnemo delati s konfiguracijo, potrebujemo osnovno datoteko za delo. Datoteka iz skladišča registra Docker na GitHubu bo delovala čisto v redu:
wget https://raw.githubusercontent.com/docker/docker-registry/0.8/config/config_sample.yml
Datoteka se mora uspešno shraniti z izhodom, kot je:
2014-09-14 14:09:01 (156 MB/s) - 'config_sample.yml' saved [5384/5384]
Super! Zdaj lahko to datoteko spremenimo tako, da ustreza našim potrebam.
Edini urejevalnik besedil, ki je priložen Core OS, je vim
, vendar ne skrbite, če ga še nikoli niste uporabljali, to bo korak za korakom razložilo, kaj urejati in kako to storiti.
vim config_sample.yml
Ko odprete datoteko, pritisnite I
in v spodnjem desnem kotu naj se prikaže: -- INSERT --
za način vstavljanja. S puščičnimi tipkami se pomaknite do dna datoteke in videti bi morali razdelek z oznako prod
.
Spremenili bomo dve vrstici, spremembe so spodaj
prod:
<<: *local
storage_path: _env:STORAGE_PATH:/data
Kar smo naredili, smo spremenili prod
konfiguracijo, da izhaja iz local
razdelka namesto iz s3
razdelka. Nato smo prepisali, da storage_path
bi uporabili pot /data
znotraj novega vsebnika.
Ko potrdite, da so vse spremembe pravilne, pritisnite ESC
za izhod iz načina vstavljanja in vnesite :wq
(to pomeni, da zapišite spremembe v datoteko in zaprite vim.)
Zdaj pa preimenujmo datoteko v just config.yml
mv config_sample.yml config.yml
Predpomnjenje Redis (izbirno)
Če želite uporabiti redis za pospešitev registra vsebnikov, je to tako preprosto, kot da povlečete nov vsebnik iz javnega registra in dodate še nekaj vrstic konfiguracije.
Najprej povlecite sliko najvišje ravni Redis:
docker pull redis
Ko je slika uspešno potegnjena, jo lahko zaženemo in jo poimenujemo tako, kot smo to storili s testnim registrom:
docker run -d --name registry-redis redis
Ker je redis v pomnilniku, nam zanj ni treba narediti nobene konfiguracije, saj ga bomo v kasnejših korakih povezali z vsebnikom registra.
Še enkrat se prepričajte, da deluje, tako da uporabite 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
Zdaj ponovno odpre config.yml
v vim
in začne vložek način, tako kot prvič smo ga uredili.
Dodajte naslednje vrstice pod prod
razdelek, pri čemer pazite, da so pravilno zamaknjene. Tokrat dodajamo le cache
in 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
Spremenljivke okolja REDIS_PORT_6379_TCP_ADDR
in REDIS_PORT_6379_TCP_PORT
se prenesejo v vsebnik registra po povezavi z vsebnikom Redis.
S tem imate zdaj nastavljen vsebnik Redis, ki bo deloval z roko v roki z vašim vsebnikom registra. Zdaj pa na gradnjo registra!
Gradnja posode
Vso konfiguracijo imamo in pripravljeno, zdaj moramo zgraditi dejanski vsebnik registra.
Razvneti vim Dockerfile
, da ustvarite nov Dockerfile. Vstopite v način vstavljanja in sledite spodnjim urejanjem.
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
Zgoraj smo v bistvu razširili sliko registra, tako da bo uporabljala našo konfiguracijsko datoteko in nastavitve. Datoteka Docker je niz navodil za gradnjo, ki jih Docker lahko bere in gradi. Če želite izvedeti več o datotekah Docker in njihovi sintaksi, si oglejte uradno dokumentacijo spletnega mesta Docker.
Nato moramo zgraditi posodo za uporabo.
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
Zdaj smo pripravljeni na tek!
Naredimo imenik v našem gostiteljskem sistemu, ki ga vgradimo v vsebnik kot /data
nosilec.
mkdir registry-data
Zdaj lahko zavrtimo novo posodo. Če nameravate uporabiti predpomnilnik Redis, uporabite 2. ukaz spodaj.
# 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
Če želite zagotoviti, da vaš strežnik deluje pravilno, obiščite http://YOUR_IP:5000
. Videli boste naslednje sporočilo:
"docker-registry server (prod) (v0.8.1)"
Upoštevajte, kaj (prod)
pomeni, da so bile naše spremembe konfiguracije uspešne!
Zdaj, ko imamo lasten tekoči register, želimo, da ga začne uporabljati odjemalec Docker na naših lokalnih strojih. Običajno bi uporabili ukaz: docker login
, za našo uporabo pa moramo ukazu za prijavo dodati še en argument:
docker login YOUR_IP:5000
Vnesite uporabniško ime in geslo (mislite na to, kot da bi ustvarili nov račun) in prezrite sporočilo, ki pravi, da ga morate aktivirati.
Nato potegnimo sliko in jo potisnemo v naše lastno skladišče.
# 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
Če vse poteka pravilno, bi moralo biti končno sporočilo naslednje:
Pushing tag for rev [a9eb17255234] on
Čestitam! Nastavili ste svoje lastno skladišče dockerjev.
Kaj je naslednje?
Tukaj je nekaj idej, kako izboljšati svoj novi zasebni register:
- Povratni proxy z uporabo Nginxa ali Apacheja za dodatno zaščito pred njim, kot je preprosto overjanje HTTP.
- Pridobite domeno za svoj strežnik in jo nastavite, tako da lahko dostopate do svojega registra z nečim kot je: registry.mysite.com
- Kupite (ali sami podpišite) potrdilo SSL, da dodate še večjo zaščito, če vaši vsebniki vsebujejo občutljive podatke.