CoreOS + Docker
Tërheqja dhe ekzekutimi i regjistrit më të fundit
Konfigurimi i regjistrit
Redis memorie (opsionale)
Ndërtimi i kontejnerit
Konfiguro klientin tuaj lokal Docker
Ç'pritet më tej?
Ne të gjithë e njohim dhe e duam Docker, një platformë për të krijuar, menaxhuar dhe shpërndarë kontejnerë aplikacionesh nëpër makina të shumta. Docker Inc. ofron një shërbim për të pritur kontejnerë me burim të hapur për t'u shkarkuar (ose tërhequr) si një depo git i njohur si "Regjistri i Docker". Mendoni si një GitHub për kontejnerët Docker.
Por, çka nëse dëshironi të organizoni regjistrin tuaj të ndarë nga ai publik? Epo, Docker Inc. ka aplikacionin e tyre të Regjistrit me burim të hapur në GitHub.
Ky tutorial do t'ju çojë në procesin e konfigurimit të një regjistri privat Docker duke përdorur CoreOS në një VPS të ri.
CoreOS + Docker
Ne nuk do të shpenzojmë shumë kohë duke analizuar saktësisht se çfarë mund të bëjnë Docker dhe CoreOS, pasi është jashtë fushëveprimit të këtij tutoriali. Në thelb, CoreOS është krijuar për grupe masive serverësh, është i vogël, i shpejtë dhe merr përditësime të rregullta sigurie automatikisht. Sistemi i tij i skedarëve rrënjë është gjithashtu vetëm për lexim, që do të thotë se duhet të përdorni Docker për të ekzekutuar çdo lloj softueri që nuk përfshihet me instalimin bazë.
Kjo e bën Core OS një sistem të përsosur pritës për Docker!
Tërheqja dhe ekzekutimi i regjistrit më të fundit
Docker Inc. ka ofruar Regjistrin si një imazh të nivelit të lartë, kjo do të thotë se ne mund ta heqim atë me një të thjeshtë:
docker pull registry
This can take a few minutes depending on the connection speed.
Një plus i të qenit një imazh i nivelit të lartë do të thotë gjithashtu se ai merr mbështetje dhe përditësime të rregullta.
Tani le të testojmë regjistrin. Ne mund të krijojmë një enë të re duke përdorur imazhin e regjistrit:
docker run -p 5000:5000 -d --name=basic_registry registry
Për ata që nuk e kanë përdorur shumë Docker, -p
flamuri qëndron për PORT
, që do të thotë se ne po ekspozojmë portin 5000 nga kontejneri në portin pritës 5000.
-d
Flamuri qëndron për daemon
, kjo do të shkaktojë enë për të kandiduar në sfond dhe jo të shtypura prodhimit të seancës aktuale SSH, ne gjithashtu duam për të përmendur këtë enë bazë provë duke përdorur --name
opsionin në mënyrë që ne mund të menaxhoni me lehtësi më vonë.
Sigurohuni që kontejneri juaj bazë i regjistrit po funksionon duke përdorur docker ps
. Prodhimi duhet të duket i ngjashëm me:
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
Gjithashtu, vizitoni http://YOUR_IP:5000
në shfletuesin tuaj të internetit dhe duhet të merrni një mesazh si më poshtë:
"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.
Tani keni regjistrin tuaj (shumë themelor) të kontejnerëve që funksionon! Por ne nuk kemi mbaruar ende.
Ndoshta ju dëshironi ta mbani këtë privat nga sytë kureshtarë, ose ndoshta t'i ruani imazhet tuaja në Amazon S3 në vend të ruajtjes lokale. Le të shqyrtojmë opsionet e ndryshme të konfigurimit në seksionin tjetër.
Përpara se të vazhdojmë, le të vrasim kontejnerin e provës në mënyrë që të mos hasim në porte konfliktuale.
docker kill basic_registry
Konfigurimi i regjistrit
Ka dy mënyra se si mund të kalojmë konfigurimin në Regjistrin Docker. Një mënyrë është duke kaluar variablat e mjedisit në një kontejner të ri dhe tjetra është të shtoni një skedar konfigurimi.
Këtu janë disa nga opsionet e zakonshme të konfigurimit që do të përdorim:
loglevel
- Sasia minimale e informacionit për të hyrë në tastierë. Parazgjedhja është info
.
standalone
- A duhet të veprojë vetë ky Regjistr? (Asnjëherë nuk pyet regjistrin publik.) Parazgjedhja është true
.
index_endpoint
- Nëse jo i pavarur, çfarë indeksi tjetër do të kërkojmë? E paracaktuar index.docker.io
.
cache
dhe cache_lru
- Opsionet që kanë të bëjnë me përdorimin e një cache Redis për skedarë të vegjël, do t'i prekim më vonë.
storage
- Çfarë backend ruajtëse duhet të përdorim për këtë server? (Në këtë tutorial ne do të përdorim lokal).
storage_path
- Nëse përdorim memorie lokale, çfarë drejtorie duhet të përdorim për të mbajtur skedarët?
Përpara se të fillojmë të punojmë me konfigurimin, na duhet një skedar bazë për të punuar. Skedari nga depoja e Docker Registry në GitHub do të funksionojë mirë:
wget https://raw.githubusercontent.com/docker/docker-registry/0.8/config/config_sample.yml
Skedari duhet të ruhet me sukses me një dalje të tillë si:
2014-09-14 14:09:01 (156 MB/s) - 'config_sample.yml' saved [5384/5384]
E madhe! Tani mund ta modifikojmë këtë skedar për t'iu përshtatur nevojave tona.
I vetmi redaktues teksti që vjen me Core OS është vim
, por mos u shqetësoni nëse nuk e keni përdorur kurrë më parë, kjo do të shpjegojë hap pas hapi se çfarë të modifikoni dhe si ta bëni atë.
vim config_sample.yml
Pasi të keni hapur skedarin, shtypni I
dhe këndi i poshtëm djathtas duhet të shfaqet: -- INSERT --
për modalitetin e futjes. Lëvizni deri në fund të skedarit duke përdorur tastet me shigjeta, duhet të shihni një seksion të etiketuar prod
.
Ne do të ndryshojmë dy rreshtat, ndryshimet janë më poshtë
prod:
<<: *local
storage_path: _env:STORAGE_PATH:/data
Ajo që kemi bërë është të ndryshojmë prod
konfigurimin për të nxjerrë nga local
seksioni në vend të s3
seksionit. Më pas ne shkruajmë storage_path
për të përdorur shtegun /data
brenda kontejnerit të ri.
Pasi të keni konfirmuar që të gjitha ndryshimet janë të sakta, shtypni ESC
për të dalë nga modaliteti i futjes dhe shkruani :wq
(kjo do të thotë të shkruani ndryshimet në skedar dhe të dilni nga vim.)
Tani le ta riemërtojmë skedarin në just config.yml
mv config_sample.yml config.yml
Redis memorie (opsionale)
Nëse dëshironi të përdorni redis për të shpejtuar regjistrin e kontejnerëve, është po aq e thjeshtë sa të tërhiqni një kontejner të ri nga regjistri publik dhe të shtoni disa rreshta të tjerë konfigurimi.
Së pari, tërhiqni imazhin e nivelit të lartë të Redis:
docker pull redis
Pasi imazhi të jetë tërhequr me sukses, ne mund ta ekzekutojmë atë dhe ta emërtojmë ashtu siç bëmë me regjistrin e provës:
docker run -d --name registry-redis redis
Për shkak se redis është në memorie, nuk kemi nevojë të bëjmë ndonjë konfigurim për të, pasi do ta lidhim me kontejnerin e regjistrit në hapat e mëvonshëm.
Edhe një herë, sigurohuni që të funksionojë duke përdorur 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
Tani rihapni config.yml
in vim
dhe futni modalitetin e futjes ashtu si herën e parë që e modifikuam.
Shtoni rreshtat e mëposhtëm poshtë prod
seksionit, duke u siguruar që të keni hyrë siç duhet. Këtë herë ne vetëm po shtojmë cache
dhe 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
Variablat e mjedisit REDIS_PORT_6379_TCP_ADDR
dhe REDIS_PORT_6379_TCP_PORT
kalohen në kontejnerin e regjistrit pas lidhjes me kontejnerin Redis.
Me këtë, ju tani keni konfiguruar një enë Redis që do të funksionojë krah për krah me kontejnerin tuaj të regjistrit. Tani në ndërtimin e regjistrit!
Ndërtimi i kontejnerit
Ne i kemi të gjitha konfigurimet të vendosura dhe gati, tani duhet të ndërtojmë kontejnerin aktual të regjistrit.
Zjarr deri vim Dockerfile
për të krijuar një Dockerfile re. Hyni në modalitetin e futjes dhe ndiqni modifikimet më poshtë.
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
Ajo që kemi bërë më sipër është në thelb zgjerimi i imazhit të regjistrit në mënyrë që ai të përdorë skedarin dhe cilësimet tona të konfigurimit. Një Dockerfile është një grup udhëzimesh ndërtimi për Docker për t'i lexuar dhe ndërtuar. Nëse dëshironi të mësoni më shumë për Dockerfiles dhe sintaksën e tyre, hidhini një sy dokumentacionit zyrtar të faqes Docker.
Më pas duhet të ndërtojmë enën për përdorim.
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
Tani jemi gati të vrapojmë!
Le të krijojmë një direktori në sistemin tonë pritës për ta montuar në kontejner si /data
vëllim.
mkdir registry-data
Tani mund të rrotullojmë një enë të re. Nëse planifikoni të përdorni cache Redis, përdorni komandën e dytë më poshtë.
# 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
Për t'u siguruar që serveri juaj po funksionon siç duhet, vizitoni http://YOUR_IP:5000
. Do të shihni mesazhin e mëposhtëm:
"docker-registry server (prod) (v0.8.1)"
Vini re (prod)
kuptimin që ndryshimet tona të konfigurimit ishin të suksesshme!
Tani që kemi regjistrin tonë të ekzekutimit, duam që klienti Docker në makinat tona lokale të fillojë ta përdorë atë. Zakonisht ju do të përdorni komandën: docker login
, por për përdorimin tonë, ne duhet të shtojmë një argument më shumë në komandën e hyrjes:
docker login YOUR_IP:5000
Futni një emër përdoruesi dhe fjalëkalim (mendoni këtë si krijimi i një llogarie të re) dhe injoroni mesazhin që thotë se duhet ta aktivizoni atë.
Më pas, le të tërheqim një imazh të aksioneve dhe ta shtyjmë atë në depon tonë.
# 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
Nëse çdo gjë shtyn siç duhet, mesazhi përfundimtar duhet të jetë në vijat e:
Pushing tag for rev [a9eb17255234] on
urime! Ju keni konfiguruar depon tuaj të dokerit.
Ç'pritet më tej?
Këtu janë disa ide se si të përmirësoni regjistrin tuaj të ri privat:
- Përfaqësuesi i kundërt duke përdorur Nginx ose Apache për të vendosur siguri shtesë përpara tij, si vërtetimi i thjeshtë HTTP.
- Merrni një domen për serverin tuaj dhe konfiguroni atë në mënyrë që të mund të hyni në regjistrin tuaj me diçka si: registry.mysite.com
- Blini (ose vetë-nënshkruani) një certifikatë SSL për të shtuar edhe më shumë mbrojtje nëse kontejnerët tuaj përmbajnë informacione të ndjeshme.