CoreOS + Docker
Trækker og kører det seneste register
Registry konfiguration
Redis caching (valgfrit)
Opbygning af container
Konfigurer din lokale Docker-klient
Hvad er det næste?
Vi kender og elsker alle Docker, en platform til at skabe, administrere og distribuere applikationscontainere på tværs af flere maskiner. Docker Inc. leverer en service til at være vært for open source-containere, der skal downloades (eller trækkes) som et git-lager kendt som "Docker Registry". Tænk på det som en GitHub til Docker-containere.
Men hvad hvis du vil være vært for dit eget register adskilt fra det offentlige? Nå, Docker Inc. har open source deres Registry-applikation på GitHub.
Denne vejledning vil tage dig igennem processen med at konfigurere et privat Docker-register ved hjælp af CoreOS på en ny VPS.
CoreOS + Docker
Vi kommer ikke til at bruge et væld af tid på at gennemgå præcis, hvad Docker og CoreOS kan gøre, da det er uden for denne tutorials rammer. I det væsentlige er CoreOS designet til massive serverklynger, det er lille, hurtigt og får regelmæssige sikkerhedsopdateringer automatisk. Dets rodfilsystem er også skrivebeskyttet, hvilket betyder, at du skal bruge Docker til at køre enhver form for software, der ikke er inkluderet i basisinstallationen.
Dette gør Core OS til et perfekt værtssystem til Docker!
Trækker og kører det seneste register
Docker Inc. har leveret registreringsdatabasen som et billede på øverste niveau, det betyder, at vi kan trække det ned med en simpel:
docker pull registry
This can take a few minutes depending on the connection speed.
Et plus ved at være et billede på øverste niveau betyder også, at det får regelmæssig support og opdateringer.
Lad os nu teste registreringsdatabasen. Vi kan oprette en ny container ved hjælp af registreringsdatabasen:
docker run -p 5000:5000 -d --name=basic_registry registry
For dem, der ikke har brugt Docker for meget, -p
står flaget for PORT
, hvilket betyder, at vi eksponerer port 5000 på fra containeren til værtsport 5000.
Den -d
flag står for daemon
, vil dette medføre, at beholderen til at køre i baggrunden og ikke udskrive output til den aktuelle SSH session, ønsker vi også at nævne dette grundlæggende test beholder ved hjælp af den --name
indstilling, så vi nemt kan administrere det senere.
Sørg for, at din grundlæggende registreringsbeholder kører med docker ps
. Outputtet skal ligne:
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øg også http://YOUR_IP:5000
i din webbrowser, og du skulle få en besked 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 nu dit eget (meget grundlæggende) containerregister kørende! Men vi er ikke færdige endnu.
Måske vil du holde dette privat fra nysgerrige øjne, eller måske gemme dine billeder på Amazon S3 i stedet for lokal lagring. Lad os gennemgå de forskellige konfigurationsmuligheder i næste afsnit.
Før vi går videre, lad os dræbe testcontaineren, så vi ikke løber ind i modstridende havne.
docker kill basic_registry
Registry konfiguration
Der er to måder, hvorpå vi kan overføre konfiguration til Docker Registry. Den ene måde er at overføre miljøvariabler til en ny container, og den anden er at tilføje en konfigurationsfil.
Her er et par af de almindelige konfigurationsmuligheder, vi vil bruge:
loglevel
- Den mindste mængde information for at logge på konsollen. Standard er info
.
standalone
- Skal dette register handle på egen hånd? (Forespørger aldrig i det offentlige register.) Standard er true
.
index_endpoint
- Hvis ikke selvstændigt, hvilket andet indeks vil vi forespørge på? Standard index.docker.io
.
cache
og cache_lru
- Muligheder vedrørende brug af en Redis-cache til små filer, vi vil komme ind på dette senere.
storage
- Hvilken storage-backend skal vi bruge til denne server? (I dette selvstudie bruger vi lokalt).
storage_path
- Hvis vi bruger lokal lagring, hvilken mappe skal vi så bruge til at opbevare filer i?
Før vi begynder at arbejde med konfigurationen, har vi brug for en basisfil at arbejde med. Filen fra Docker Registry repository på GitHub fungerer fint:
wget https://raw.githubusercontent.com/docker/docker-registry/0.8/config/config_sample.yml
Filen skal gemme med succes med et output som:
2014-09-14 14:09:01 (156 MB/s) - 'config_sample.yml' saved [5384/5384]
Store! Nu kan vi ændre denne fil, så den passer til vores behov.
Den eneste teksteditor, der følger med Core OS, er vim
, men bare rolig, hvis du aldrig har brugt det før, dette vil forklare trin for trin, hvad du skal redigere, og hvordan du gør det.
vim config_sample.yml
Når du har filen åben, skal du trykke på I
og nederst i højre hjørne skal vises: -- INSERT --
for indsættelsestilstand. Rul hele vejen til bunden af filen ved hjælp af dine piletaster, du skulle se en sektion mærket prod
.
Vi vil ændre de to linjer, ændringerne er nedenfor
prod:
<<: *local
storage_path: _env:STORAGE_PATH:/data
Det, vi har gjort, er at ændre prod
konfigurationen, så den stammer fra local
sektionen i stedet for s3
sektionen. Så overskrev vi for storage_path
at bruge stien /data
inde i den nye container.
Når du har bekræftet, at alle ændringerne er korrekte, skal du trykke for ESC
at afslutte indsætningstilstand og indtaste :wq
(det betyder, at du skal skrive ændringerne til filen og afslutte vim.)
Lad os nu omdøbe filen til bare config.yml
mv config_sample.yml config.yml
Redis caching (valgfrit)
Hvis du gerne vil bruge redis til at fremskynde dit containerregister, er det så simpelt som at trække en ny container fra det offentlige register og tilføje et par flere linjer med konfiguration.
Træk først billedet på øverste niveau af Redis:
docker pull redis
Når billedet er trukket med succes, kan vi køre det og navngive det, ligesom vi gjorde med testregistret:
docker run -d --name registry-redis redis
Fordi redis er i hukommelsen, behøver vi ikke at lave nogen konfiguration for det, da vi vil linke det til registreringsdatabasen i senere trin.
Endnu en gang skal du sikre dig, at den kører ved at bruge 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
Nu genåbne den config.yml
i vim
og indtaste indsætningstilstand ligesom første gang vi redigeret det.
Tilføj følgende linjer under prod
afsnittet, og sørg for at indrykke korrekt. Denne gang tilføjer vi kun 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øvariablerne REDIS_PORT_6379_TCP_ADDR
og REDIS_PORT_6379_TCP_PORT
videregives til registreringsdatabasen ved sammenkobling med Redis-beholderen.
Med det har du nu opsat en Redis-container, der vil arbejde hånd i hånd med din registreringscontainer. Nu til at bygge registreringsdatabasen!
Opbygning af container
Vi har al konfigurationen sat og klar, nu skal vi bygge den faktiske registreringsbeholder.
vim Dockerfile
Tænd op for at oprette en ny Dockerfile. Gå ind i indsættelsestilstand, og følg nedenstående redigeringer.
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 det væsentlige at udvide registreringsdatabasen, så det bruger vores konfigurationsfil og indstillinger. En Dockerfile er et sæt byggeinstruktioner, som Docker kan læse og bygge. Hvis du gerne vil lære mere om Dockerfiles og deres syntaks, så tag et kig på den officielle Docker-webstedsdokumentation.
Dernæst skal vi bygge beholderen til brug.
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
Nu er vi klar til at løbe!
Lad os lave en mappe på vores værtssystem til at montere i containeren som /data
volumen.
mkdir registry-data
Nu kan vi skrue en ny container op. Hvis du planlægger at bruge Redis-cachen, skal du bruge den 2. kommando 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
Besøg for at sikre, at din server kører korrekt http://YOUR_IP:5000
. Du vil se følgende besked:
"docker-registry server (prod) (v0.8.1)"
Læg mærke til (prod)
betydningen af, at vores konfigurationsændringer var vellykkede!
Nu hvor vi har vores eget kørende register, vil vi have Docker-klienten på vores lokale maskiner til at begynde at bruge det. Normalt ville du bruge kommandoen: docker login
, men til vores brug skal vi tilføje endnu et argument til login-kommandoen:
docker login YOUR_IP:5000
Indtast et brugernavn og en adgangskode (tænk på dette som at oprette en ny konto) og ignorer meddelelsen, der siger, at du skal aktivere den.
Lad os derefter trække et lagerbillede og skubbe det op til vores eget lager.
# 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 skubber korrekt, skal den endelige besked være i stil med:
Pushing tag for rev [a9eb17255234] on
Tillykke! Du har opsat dit helt eget docker-lager.
Hvad er det næste?
Her er nogle ideer til, hvordan du forbedrer dit nye private register:
- Omvendt proxy ved hjælp af Nginx eller Apache for at placere yderligere sikkerhed foran den, som simpel HTTP-godkendelse.
- Få et domæne til din server og opsæt det, så du kan få adgang til dit register med noget som: registry.mysite.com
- Køb (eller underskriv selv) et SSL-certifikat for at tilføje endnu mere beskyttelse, hvis dine containere indeholder følsomme oplysninger.