CoreOS + Docker
Tirant i executant l'últim registre
Configuració del registre
Redis caché (opcional)
Construcció del contenidor
Configureu el vostre client Docker local
Que segueix?
Tots coneixem i estimem Docker, una plataforma per crear, gestionar i distribuir contenidors d'aplicacions a diverses màquines. Docker Inc. ofereix un servei per allotjar contenidors de codi obert que es poden descarregar (o extreure) com un repositori git conegut com a "Registre Docker". Penseu-hi com un GitHub per a contenidors Docker.
Però, què passa si voleu allotjar el vostre propi registre separat del públic? Bé, Docker Inc. ha obert la seva aplicació de registre a GitHub.
Aquest tutorial us guiarà pel procés de configuració d'un registre Docker privat amb CoreOS en un nou VPS.
CoreOS + Docker
No passarem molt de temps repassant exactament què poden fer Docker i CoreOS, ja que està fora de l'abast d'aquest tutorial. En essència, CoreOS està dissenyat per a clústers de servidors massius, és petit, ràpid i obté actualitzacions de seguretat regulars automàticament. El seu sistema de fitxers arrel també és de només lectura, el que significa que heu d'utilitzar Docker per executar qualsevol tipus de programari que no estigui inclòs amb la instal·lació base.
Això fa que Core OS sigui un sistema amfitrió perfecte per a Docker!
Tirant i executant l'últim registre
Docker Inc. ha proporcionat el Registre com a imatge de nivell superior, això vol dir que el podem treure amb un senzill:
docker pull registry
This can take a few minutes depending on the connection speed.
Un avantatge de ser una imatge de primer nivell també significa que rep suport i actualitzacions periòdiques.
Ara provem el registre. Podem crear un nou contenidor mitjançant la imatge de registre:
docker run -p 5000:5000 -d --name=basic_registry registry
Per a aquells que no han utilitzat massa Docker, la -p
bandera PORT
significa , és a dir, estem exposant el port 5000 des del contenidor al port amfitrió 5000.
La -d
bandera significa daemon
, això farà que el contenidor s'executi en segon pla i no imprimeixi la sortida a la sessió SSH actual, també volem anomenar aquest contenidor de prova bàsic mitjançant l' --name
opció perquè puguem gestionar-lo fàcilment més endavant.
Assegureu-vos que el vostre contenidor de registre bàsic s'està executant amb docker ps
. La sortida hauria de ser semblant a:
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
A més, visiteu http://YOUR_IP:5000
el vostre navegador web i haureu de rebre un missatge com el següent:
"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.
Ara teniu el vostre propi registre de contenidors (molt bàsic) en funcionament! Però encara no hem acabat.
Potser voleu mantenir això privat de mirades indiscretes, o potser emmagatzemar les vostres imatges a Amazon S3 en lloc d'emmagatzemar localment. Anem a repassar les diferents opcions de configuració a la secció següent.
Abans de seguir endavant, matem el contenidor de prova perquè no ens trobem amb ports conflictius.
docker kill basic_registry
Configuració del registre
Hi ha dues maneres de passar la configuració al registre Docker. Una manera és passant variables d'entorn a un contenidor nou i l'altra és afegir un fitxer de configuració.
A continuació es mostren algunes de les opcions de configuració habituals que farem servir:
loglevel
- La quantitat mínima d'informació per iniciar sessió a la consola. El valor per defecte és info
.
standalone
- Aquest Registre hauria d'actuar per si mateix? (Mai consulteu el registre públic.) El valor per defecte és true
.
index_endpoint
- Si no és autònom, quin altre índex consultarem? Per defecte index.docker.io
.
cache
i cache_lru
- Opcions relacionades amb l'ús d'una memòria cau de Redis per a fitxers petits, en parlarem més endavant.
storage
- Quin backend d'emmagatzematge hem d'utilitzar per a aquest servidor? (En aquest tutorial farem servir local).
storage_path
- Si utilitzeu emmagatzematge local, quin directori hem d'utilitzar per guardar els fitxers?
Abans de començar a treballar amb la configuració, necessitem un fitxer base per treballar. El fitxer del dipòsit del registre de Docker a GitHub funcionarà bé:
wget https://raw.githubusercontent.com/docker/docker-registry/0.8/config/config_sample.yml
El fitxer s'ha de desar correctament amb una sortida com ara:
2014-09-14 14:09:01 (156 MB/s) - 'config_sample.yml' saved [5384/5384]
Genial! Ara podem modificar aquest fitxer per adaptar-lo a les nostres necessitats.
L'únic editor de text que inclou Core OS és vim
, però no us preocupeu si no l'heu utilitzat mai abans, això us explicarà pas a pas què heu d'editar i com fer-ho.
vim config_sample.yml
Un cop tingueu el fitxer obert, premeu I
i l'extrem inferior dret hauria de mostrar: -- INSERT --
per al mode d'inserció. Desplaceu-vos fins al final del fitxer amb les tecles de fletxa, hauríeu de veure una secció amb l'etiqueta prod
.
Anirem canviant les dues línies, els canvis són a continuació
prod:
<<: *local
storage_path: _env:STORAGE_PATH:/data
El que hem fet és canviar la prod
configuració perquè es derivi de la local
secció en lloc de la s3
secció. A continuació, vam sobreescriure storage_path
per utilitzar el camí /data
dins del nou contenidor.
Un cop hàgiu confirmat que tots els canvis són correctes, premeu ESC
per sortir del mode d'inserció i escriviu :wq
(això vol dir escriure els canvis al fitxer i sortir de vim).
Ara canviem el nom del fitxer a just config.yml
mv config_sample.yml config.yml
Redis caché (opcional)
Si voleu utilitzar redis per accelerar el vostre registre de contenidors, és tan senzill com treure un contenidor nou del registre públic i afegir unes quantes línies més de configuració.
Primer, estireu la imatge de nivell superior de Redis:
docker pull redis
Un cop s'ha extret la imatge correctament, podem executar-la i anomenar-la tal com hem fet amb el registre de prova:
docker run -d --name registry-redis redis
Com que redis està a la memòria, no cal que en fem cap configuració, ja que l'enllaçarem amb el contenidor del registre en passos posteriors.
Una vegada més, assegureu-vos que s'està executant utilitzant 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
Ara torni a obrir la config.yml
en vim
i introduïu la manera d'inserció a l'igual que la primera vegada que vam editar.
Afegiu les línies següents a sota de la prod
secció, assegurant-vos de sagnar correctament. Aquesta vegada només estem afegint cache
i 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
Les variables d'entorn REDIS_PORT_6379_TCP_ADDR
i REDIS_PORT_6379_TCP_PORT
es passen al contenidor del registre quan es connecten amb el contenidor Redis.
Amb això, ara heu configurat un contenidor Redis que funcionarà de la mà amb el vostre contenidor de registre. Ara a construir el registre!
Construcció del contenidor
Ja tenim tota la configuració preparada, ara hem de construir el contenidor del registre real.
Enceneu vim Dockerfile
per crear un nou Dockerfile. Entreu al mode d'inserció i seguiu les edicions següents.
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
El que hem fet anteriorment és essencialment ampliar la imatge del registre perquè utilitzi el nostre fitxer de configuració i la nostra configuració. Un Dockerfile és un conjunt d'instruccions de compilació perquè Docker pugui llegir i crear. Si voleu obtenir més informació sobre Dockerfiles i la seva sintaxi, feu una ullada a la documentació oficial del lloc de Docker.
A continuació, hem de construir el contenidor per utilitzar-lo.
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
Ara estem preparats per córrer!
Fem un directori al nostre sistema amfitrió per muntar-lo al contenidor com a /data
volum.
mkdir registry-data
Ara podem girar un nou contenidor. Si teniu previst utilitzar la memòria cau Redis, feu servir la segona ordre a continuació.
# 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
Per assegurar-vos que el vostre servidor funciona correctament, visiteu http://YOUR_IP:5000
. Veureu el missatge següent:
"docker-registry server (prod) (v0.8.1)"
Tingueu en compte que els (prod)
nostres canvis de configuració han tingut èxit!
Ara que tenim el nostre propi registre en execució, volem que el client Docker de les nostres màquines locals comenci a utilitzar-lo. Normalment utilitzareu l'ordre: docker login
, però per al nostre ús, hem d'afegir un argument més a l'ordre d'inici de sessió:
docker login YOUR_IP:5000
Introduïu un nom d'usuari i una contrasenya (penseu en això com fer un compte nou) i ignoreu el missatge que indica que heu d'activar-lo.
A continuació, traguem una imatge d'estoc i la introduïm al nostre propi dipòsit.
# 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
Si tot funciona correctament, el missatge final hauria de ser de la següent manera:
Pushing tag for rev [a9eb17255234] on
Felicitats! Heu configurat el vostre propi dipòsit docker.
Que segueix?
Aquí teniu algunes idees sobre com millorar el vostre registre privat nou:
- Proxy invers que utilitza Nginx o Apache per posar seguretat addicional al davant, com ara una simple autenticació HTTP.
- Obteniu un domini per al vostre servidor i configureu-lo perquè pugueu accedir al vostre registre amb alguna cosa com: registry.mysite.com
- Compreu (o autosigna) un certificat SSL per afegir encara més protecció si els vostres contenidors contenen informació sensible.