CoreOS + Docker
Ištraukite ir paleiskite naujausią registrą
Registro konfigūracija
Redis talpyklos kaupimas (neprivaloma)
Konteinerio statyba
Sukonfigūruokite vietinį „Docker“ klientą
Kas toliau?
Visi žinome ir mėgstame „Docker“ – platformą, leidžiančią kurti, valdyti ir platinti programų konteinerius keliuose įrenginiuose. „Docker Inc.“ teikia paslaugą, skirtą atvirojo kodo konteineriams, kuriuos reikia atsisiųsti (arba ištraukti), priglobti, pavyzdžiui, „git“ saugyklą, vadinamą „Docker registru“. Pagalvokite apie tai kaip apie „GitHub“, skirtą „Docker“ konteineriams.
Bet ką daryti, jei norite priglobti savo registrą, atskirtą nuo viešojo? Na, „Docker Inc.“ atidarė savo registro programą „GitHub“.
Ši instrukcija padės jums nustatyti privatų „Docker“ registrą naudojant „CoreOS“ naujame VPS.
CoreOS + Docker
Nepraleisime daug laiko aiškindami, ką tiksliai gali padaryti „Docker“ ir „CoreOS“, nes tai nepatenka į šios mokymo programos taikymo sritį. Iš esmės „CoreOS“ sukurta didžiulėms serverių grupėms, ji yra maža, greita ir automatiškai gauna reguliarius saugos atnaujinimus. Jo šakninė failų sistema taip pat yra tik skaitoma, tai reiškia, kad turite naudoti „Docker“, kad paleistumėte bet kokią programinę įrangą, kuri nėra įtraukta į bazinį diegimą.
Dėl to „Core OS“ yra puiki „Docker“ prieglobos sistema!
Ištraukite ir paleiskite naujausią registrą
„Docker Inc.“ pateikė registrą kaip aukščiausio lygio vaizdą, o tai reiškia, kad galime jį panaikinti naudodami paprastą:
docker pull registry
This can take a few minutes depending on the connection speed.
Aukščiausio lygio vaizdo pliusas taip pat reiškia, kad jis reguliariai palaikomas ir atnaujinamas.
Dabar išbandykime registrą. Mes galime sukurti naują konteinerį naudodami registro vaizdą:
docker run -p 5000:5000 -d --name=basic_registry registry
Tiems, kurie nenaudojo Docker per daug, -p
vėliavėlė reiškia PORT
, tai reiškia , kad mes atskleidžiame 5000 prievadą iš konteinerio į 5000 prievadą.
-d
Vėliava reiškia daemon
, tai sukels konteineris paleisti fone, o ne spausdinti išėjimo į dabartinę SSH sesijos, mes taip pat norime pavadinti šią pagrindinę bandymo indą, naudojant --name
variantą, kad mes galime lengvai valdyti jį vėliau.
Įsitikinkite, kad jūsų pagrindinis registro konteineris veikia naudojant docker ps
. Išvestis turėtų atrodyti panašiai:
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
Be to, apsilankykite http://YOUR_IP:5000
savo žiniatinklio naršyklėje ir turėtumėte gauti tokį pranešimą:
"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.
Dabar veikia jūsų (labai paprastas) konteinerio registras! Bet mes dar nebaigėme.
Galbūt norite, kad tai būtų privati nuo smalsių akių, o gal saugokite savo vaizdus „Amazon S3“, o ne vietinėje saugykloje. Peržiūrėkime įvairias konfigūracijos parinktis kitame skyriuje.
Prieš eidami toliau, užmuškime bandomąjį konteinerį, kad nepatektume į nesuderinamus prievadus.
docker kill basic_registry
Registro konfigūracija
Yra du būdai, kaip galime perduoti konfigūraciją „Docker“ registrui. Vienas iš būdų yra perduoti aplinkos kintamuosius į naują konteinerį, o kitas – pridėti konfigūracijos failą.
Štai keletas įprastų konfigūravimo parinkčių, kurias naudosime:
loglevel
- Minimalus informacijos kiekis, kurį reikia prisijungti prie konsolės. Numatytasis yra info
.
standalone
– Ar šis registras turėtų veikti savarankiškai? (Niekada neklausia viešajame registre.) Numatytoji reikšmė yra true
.
index_endpoint
– Jei ne atskiras, kokio kito indekso užklausą darysime? Numatytasis index.docker.io
.
cache
ir cache_lru
- Parinktys, susijusios su Redis talpyklos naudojimu mažiems failams. Tai paliesime vėliau.
storage
– Kokią saugyklos programą turėtume naudoti šiam serveriui? (Šiame vadove naudosime vietinį).
storage_path
- Jei naudojate vietinę saugyklą, kokį katalogą turėtume naudoti failams laikyti?
Prieš pradėdami dirbti su konfigūracija, turime dirbti su baziniu failu. Failas iš „Docker“ registro saugyklos „GitHub“ veiks puikiai:
wget https://raw.githubusercontent.com/docker/docker-registry/0.8/config/config_sample.yml
Failas turėtų būti sėkmingai išsaugotas naudojant tokią išvestį kaip:
2014-09-14 14:09:01 (156 MB/s) - 'config_sample.yml' saved [5384/5384]
Puiku! Dabar galime modifikuoti šį failą, kad jis atitiktų mūsų poreikius.
Vienintelė teksto rengyklė, kuri pateikiama kartu su „Core OS“, yra vim
, bet nesijaudinkite, jei jos niekada anksčiau nenaudojote. Tai žingsnis po žingsnio paaiškins, ką redaguoti ir kaip tai padaryti.
vim config_sample.yml
Atidarę failą, paspauskite I
ir apatiniame dešiniajame kampe turėtų būti rodomas: -- INSERT --
įterpimo režimui. Naudodami rodyklių klavišus slinkite iki failo apačios, turėtumėte pamatyti skyrių, pažymėtą prod
.
Mes pakeisime dvi eilutes, pakeitimai pateikti žemiau
prod:
<<: *local
storage_path: _env:STORAGE_PATH:/data
Ką mes padarėme, tai pakeitėme prod
konfigūraciją, kad ji būtų gauta iš local
sekcijos, o ne iš s3
sekcijos. Tada perrašėme storage_path
naudoti kelią /data
naujame konteineryje.
Kai patvirtinsite, kad visi pakeitimai yra teisingi, paspauskite , ESC
kad išeitumėte iš įterpimo režimo ir įveskite tekstą :wq
(tai reiškia, kad įrašykite pakeitimus į failą ir išeikite iš vim).
Dabar pervadinkime failą į tik config.yml
mv config_sample.yml config.yml
Redis talpyklos kaupimas (neprivaloma)
Jei norite naudoti redis, kad paspartintumėte sudėtinio rodinio registrą, tai taip paprasta, kaip iš viešojo registro išimti naują sudėtinį rodinį ir pridėti dar kelias konfigūracijos eilutes.
Pirmiausia ištraukite aukščiausio lygio Redis vaizdą:
docker pull redis
Kai vaizdas bus sėkmingai ištrauktas, galime jį paleisti ir pavadinti taip, kaip darėme su bandomuoju registru:
docker run -d --name registry-redis redis
Kadangi redis yra atmintyje, mums nereikia atlikti jo konfigūracijos, nes vėlesniais veiksmais susiesime jį su registro konteineriu.
Dar kartą įsitikinkite, kad jis veikia, naudodami 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
Dabar vėl atidaryti config.yml
po vim
ir įveskite įterpti režimu kaip ir pirmą kartą, mes jį redagavo.
Po prod
skyriumi pridėkite šias eilutes ir būtinai tinkamai įtraukėte. Šį kartą tik pridedame cache
ir 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
Aplinkos kintamieji REDIS_PORT_6379_TCP_ADDR
ir REDIS_PORT_6379_TCP_PORT
perduodami į registro konteinerį, kai susiejami su Redis konteineriu.
Dabar turite nustatyti „Redis“ konteinerį, kuris veiks kartu su jūsų registro konteineriu. Dabar kurkite registrą!
Konteinerio statyba
Turime visą konfigūraciją ir paruošėme, dabar turime sukurti tikrąjį registro konteinerį.
Ugnį iki vim Dockerfile
sukurti naują Dockerfile. Įjunkite įterpimo režimą ir vykdykite toliau pateiktus pakeitimus.
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
Tai, ką padarėme aukščiau, iš esmės išplėtė registro vaizdą, kad jame būtų naudojamas mūsų konfigūracijos failas ir nustatymai. „Dockerfile“ yra kūrimo instrukcijų rinkinys, skirtas „Docker“ skaityti ir kurti. Jei norite sužinoti daugiau apie „Dockerfiles“ ir jų sintaksę, peržiūrėkite oficialią „Docker“ svetainės dokumentaciją.
Toliau turime sukurti konteinerį naudojimui.
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
Dabar mes pasiruošę bėgti!
Sukurkime savo prieglobos sistemos katalogą, kuris būtų įtrauktas į konteinerį kaip /data
tomas.
mkdir registry-data
Dabar galime susukti naują konteinerį. Jei planuojate naudoti Redis talpyklą, naudokite toliau pateiktą 2-ąją komandą.
# 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
Norėdami įsitikinti, kad serveris veikia tinkamai, apsilankykite http://YOUR_IP:5000
. Pamatysite šį pranešimą:
"docker-registry server (prod) (v0.8.1)"
Atkreipkite dėmesį, kad (prod)
mūsų konfigūracijos pakeitimai buvo sėkmingi!
Dabar, kai turime savo veikiantį registrą, norime, kad „Docker“ klientas vietiniuose kompiuteriuose pradėtų jį naudoti. Paprastai jūs naudojate komandą: docker login
, bet mums reikia pridėti dar vieną prisijungimo komandos argumentą:
docker login YOUR_IP:5000
Įveskite vartotojo vardą ir slaptažodį (pagalvokite apie tai kaip naujos paskyros sukūrimą) ir nekreipkite dėmesio į pranešimą, kad turite jį suaktyvinti.
Tada ištraukime pradinį vaizdą ir nukelkime jį į savo saugyklą.
# 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
Jei viskas vyksta teisingai, galutinis pranešimas turėtų būti toks:
Pushing tag for rev [a9eb17255234] on
Sveikiname! Jūs nustatėte savo docker saugyklą.
Kas toliau?
Štai keletas idėjų, kaip patobulinti naują privatų registrą:
- Apverskite tarpinį serverį naudodami „Nginx“ arba „Apache“, kad prieš jį pateiktumėte papildomą apsaugą, pvz., paprastą HTTP autentifikavimą.
- Gaukite domeną savo serveriui ir nustatykite jį, kad galėtumėte pasiekti savo registrą naudodami kažką panašaus į registry.mysite.com
- Įsigykite (arba patys pasirašykite) SSL sertifikatą, kad padidintumėte apsaugą, jei konteineriuose yra neskelbtinos informacijos.