CoreOS + Docker
Trekker og kjører det nyeste registret
Registerkonfigurasjon
Redis caching (valgfritt)
Bygge containeren
Konfigurer din lokale Docker-klient
Hva blir det neste?
Vi kjenner og elsker alle Docker, en plattform for å lage, administrere og distribuere applikasjonsbeholdere på tvers av flere maskiner. Docker Inc. tilbyr en tjeneste for åpen kildekode-beholdere som skal lastes ned (eller trekkes) som et git-lager kjent som "Docker Registry." Tenk på det som en GitHub for Docker-containere.
Men hva om du vil være vert for ditt eget register atskilt fra det offentlige? Vel, Docker Inc. har åpen kildekode deres registerapplikasjon på GitHub.
Denne opplæringen tar deg gjennom prosessen med å sette opp et privat Docker-register ved å bruke CoreOS på en ny VPS.
CoreOS + Docker
Vi kommer ikke til å bruke massevis av tid på å gå gjennom nøyaktig hva Docker og CoreOS kan gjøre, siden det er utenfor denne opplæringen. I hovedsak er CoreOS designet for massive serverklynger, den er liten, rask og får regelmessige sikkerhetsoppdateringer automatisk. Rotfilsystemet er også skrivebeskyttet, noe som betyr at du må bruke Docker for å kjøre enhver form for programvare som ikke er inkludert i basisinstallasjonen.
Dette gjør Core OS til et perfekt vertssystem for Docker!
Trekker og kjører det nyeste registret
Docker Inc. har levert registeret som et toppnivåbilde, dette betyr at vi kan trekke det ned med en enkel:
docker pull registry
This can take a few minutes depending on the connection speed.
Et pluss ved å være et toppnivåbilde betyr også at det får regelmessig støtte og oppdateringer.
La oss nå teste ut registret. Vi kan opprette en ny beholder ved å bruke registerbildet:
docker run -p 5000:5000 -d --name=basic_registry registry
For de som ikke har brukt Docker for mye, -p
står flagget for PORT
, noe som betyr at vi eksponerer port 5000 på fra containeren til vertsport 5000.
Den -d
flagget står for daemon
, vil dette føre til at beholderen til å kjøre i bakgrunnen og ikke skrive ut til den aktuelle SSH sesjon, vi ønsker også å nevne dette grunnleggende test container med --name
alternativet, slik at vi enkelt kan administrere den senere.
Sørg for at den grunnleggende registerbeholderen kjører med docker ps
. Utgangen skal se ut som:
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
Besøk også http://YOUR_IP:5000
i nettleseren din, og du bør få en melding som følgende:
"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.
Du har nå ditt eget (veldig grunnleggende) containerregister som kjører! Men vi er ikke ferdige ennå.
Kanskje du vil holde dette privat fra nysgjerrige øyne, eller kanskje lagre bildene dine på Amazon S3 i stedet for lokal lagring. La oss gå over de ulike konfigurasjonsalternativene i neste avsnitt.
Før vi går videre, la oss drepe testbeholderen slik at vi ikke støter på motstridende porter.
docker kill basic_registry
Registerkonfigurasjon
Det er to måter vi kan sende konfigurasjon til Docker Registry. En måte er å sende miljøvariabler til en ny beholder, og den andre er å legge til en konfigurasjonsfil.
Her er noen av de vanlige konfigurasjonsalternativene vi kommer til å bruke:
loglevel
- Minimumsmengde informasjon for å logge på konsollen. Standard er info
.
standalone
– Bør dette registeret handle på egenhånd? (Forespør aldri det offentlige registeret.) Standard er true
.
index_endpoint
- Hvis ikke frittstående, hvilken annen indeks vil vi spørre etter? Standard index.docker.io
.
cache
og cache_lru
- Alternativer knyttet til bruk av en Redis-cache for små filer, vi skal komme inn på dette senere.
storage
- Hvilken lagringsstøtte skal vi bruke for denne serveren? (I denne opplæringen bruker vi lokalt).
storage_path
- Hvis du bruker lokal lagring, hvilken katalog bør vi bruke for å holde filer i?
Før vi begynner å jobbe med konfigurasjonen, trenger vi en basisfil å jobbe med. Filen fra Docker Registry-depotet på GitHub vil fungere helt fint:
wget https://raw.githubusercontent.com/docker/docker-registry/0.8/config/config_sample.yml
Filen skal lagres med en utgang som:
2014-09-14 14:09:01 (156 MB/s) - 'config_sample.yml' saved [5384/5384]
Flott! Nå kan vi endre denne filen for å passe våre behov.
Det eneste tekstredigeringsprogrammet som følger med Core OS er vim
, men ikke bekymre deg hvis du aldri har brukt det før, dette vil forklare trinn for trinn hva du skal redigere og hvordan du gjør det.
vim config_sample.yml
Når du har åpnet filen, trykk på I
og nederst til høyre skal vises: -- INSERT --
for innsettingsmodus. Rull helt til bunnen av filen ved å bruke piltastene, du bør se en seksjon merket prod
.
Vi kommer til å endre de to linjene, endringene er nedenfor
prod:
<<: *local
storage_path: _env:STORAGE_PATH:/data
Det vi har gjort er å endre prod
konfigurasjonen slik at den kommer fra local
seksjonen i stedet for s3
seksjonen. Deretter overskrev vi for storage_path
å bruke banen /data
inne i den nye beholderen.
Når du har bekreftet at alle endringene er riktige, trykk for ESC
å avslutte innsettingsmodus og skriv :wq
(dette betyr at du skriver endringene til filen og avslutter vim.)
La oss nå gi nytt navn til filen til bare config.yml
mv config_sample.yml config.yml
Redis caching (valgfritt)
Hvis du vil bruke redis for å øke hastigheten på beholderregistret, er det så enkelt som å trekke en ny beholder fra det offentlige registret og legge til noen flere linjer med konfigurasjon.
Først, trekk toppnivåbildet av Redis:
docker pull redis
Når bildet er hentet vellykket, kan vi kjøre det og navngi det akkurat som vi gjorde med testregisteret:
docker run -d --name registry-redis redis
Fordi redis er i minnet, trenger vi ikke å gjøre noen konfigurasjon for det, da vi vil koble det til registerbeholderen i senere trinn.
Igjen, sørg for at den kjører ved å bruke 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
Åpne nå inn config.yml
igjen vim
og gå inn i innsettingsmodus akkurat som første gang vi redigerte den.
Legg til følgende linjer under prod
seksjonen, og pass på å rykke inn riktig. Denne gangen legger vi bare til cache
og 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
Miljøvariablene REDIS_PORT_6379_TCP_ADDR
og REDIS_PORT_6379_TCP_PORT
sendes til registerbeholderen ved kobling med Redis-beholderen.
Med det har du nå satt opp en Redis-beholder som vil fungere hånd i hånd med registerbeholderen din. Nå på å bygge registeret!
Bygge containeren
Vi har all konfigurasjonen satt og klar, nå må vi bygge selve registerbeholderen.
Fyr opp for vim Dockerfile
å lage en ny Dockerfile. Gå inn i innsettingsmodus og følg redigeringene nedenfor.
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
Det vi har gjort ovenfor er i hovedsak å utvide registerbildet slik at det vil bruke vår konfigurasjonsfil og innstillinger. En Dockerfile er et sett med byggeinstruksjoner for Docker å lese og bygge. Hvis du vil lære mer om Dockerfiles og deres syntaks, ta en titt på den offisielle Docker-sidedokumentasjonen.
Deretter må vi bygge beholderen for bruk.
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
Nå er vi klare til å løpe!
La oss lage en katalog på vertssystemet vårt som skal monteres i beholderen som /data
volumet.
mkdir registry-data
Nå kan vi spinne opp en ny container. Hvis du planlegger å bruke Redis-cachen, bruk den andre kommandoen nedenfor.
# 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
For å sikre at serveren din kjører riktig, besøk http://YOUR_IP:5000
. Du vil se følgende melding:
"docker-registry server (prod) (v0.8.1)"
Legg merke til (prod)
betydningen av konfigurasjonsendringene våre var vellykkede!
Nå som vi har vårt eget kjørende register, vil vi at Docker-klienten på våre lokale maskiner skal begynne å bruke den. Vanligvis vil du bruke kommandoen: docker login
, men for vår bruk må vi legge til ett argument til til påloggingskommandoen:
docker login YOUR_IP:5000
Skriv inn et brukernavn og passord (tenk på dette som å lage en ny konto) og ignorer meldingen som sier at du må aktivere den.
Deretter tar vi et lagerbilde og skyver det opp til vårt eget depot.
# 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
Hvis alt trykker riktig, bør den endelige meldingen være slik:
Pushing tag for rev [a9eb17255234] on
Gratulerer! Du har satt opp ditt eget docker-lager.
Hva blir det neste?
Her er noen ideer om hvordan du kan forbedre ditt nye private register:
- Omvendt proxy ved å bruke Nginx eller Apache for å plassere ekstra sikkerhet foran den, som enkel HTTP-autentisering.
- Skaff deg et domene for serveren din og konfigurer det slik at du kan få tilgang til registeret ditt med noe sånt som: registry.mysite.com
- Kjøp (eller selvsigner) et SSL-sertifikat for å legge til enda mer beskyttelse hvis beholderne dine inneholder sensitiv informasjon.