CoreOS + Docker
Stažení a spuštění nejnovějšího registru
Konfigurace registru
Ukládání do mezipaměti Redis (volitelné)
Stavba kontejneru
Nakonfigurujte místního klienta Docker
Co bude dál?
Všichni známe a milujeme Docker, platformu pro vytváření, správu a distribuci aplikačních kontejnerů na více počítačích. Docker Inc. poskytuje službu pro hostování kontejnerů s otevřeným zdrojovým kódem, které lze stáhnout (nebo stáhnout) jako úložiště git známé jako „Docker Registry“. Představte si to jako GitHub pro kontejnery Docker.
Ale co když chcete hostit svůj vlastní registr oddělený od veřejného? No, společnost Docker Inc. otevřela svou aplikaci Registry na GitHubu.
Tento tutoriál vás provede procesem nastavení soukromého registru Docker pomocí CoreOS na novém VPS.
CoreOS + Docker
Nebudeme trávit spoustu času procházením toho, co přesně Docker a CoreOS umí, protože to je mimo rozsah tohoto návodu. CoreOS je v podstatě navržen pro masivní serverové clustery, je malý, rychlý a automaticky dostává pravidelné aktualizace zabezpečení. Jeho kořenový souborový systém je také pouze pro čtení, což znamená, že ke spuštění jakéhokoli softwaru, který není součástí základní instalace, musíte použít Docker.
Díky tomu je Core OS dokonalým hostitelským systémem pro Docker!
Stažení a spuštění nejnovějšího registru
Společnost Docker Inc. poskytla registr jako obraz nejvyšší úrovně, což znamená, že jej můžeme stáhnout pomocí jednoduchého:
docker pull registry
This can take a few minutes depending on the connection speed.
Výhodou obrazu nejvyšší úrovně je také pravidelná podpora a aktualizace.
Nyní otestujeme registr. Můžeme vytvořit nový kontejner pomocí obrazu registru:
docker run -p 5000:5000 -d --name=basic_registry registry
Pro ty, kteří Docker příliš nepoužívali, -p
příznak znamená PORT
, což znamená, že zpřístupňujeme port 5000 z kontejneru na hostitelský port 5000.
-d
Vlajka znamená daemon
, to způsobí, že kontejner běžet na pozadí a nelze tisknout výstup do aktuálního SSH, chceme také pojmenovat základní zkušební nádobu s použitím --name
volby, takže ji můžeme snadno spravovat později.
Ujistěte se, že váš základní kontejner registru běží pomocí docker ps
. Výstup by měl vypadat podobně jako:
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
Navštivte také http://YOUR_IP:5000
ve svém webovém prohlížeči a měli byste obdržet zprávu, jako je tato:
"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.
Nyní máte spuštěný svůj vlastní (velmi základní) registr kontejnerů! Ale ještě jsme neskončili.
Možná to chcete udržet v soukromí před zvědavýma očima, nebo možná ukládat své obrázky na Amazon S3 místo místního úložiště. V další části si projdeme různé možnosti konfigurace.
Než budeme pokračovat, zabijme testovací kontejner, abychom nenarazili na konfliktní porty.
docker kill basic_registry
Konfigurace registru
Existují dva způsoby, jak předat konfiguraci do registru Docker. Jedním ze způsobů je předání proměnných prostředí do nového kontejneru a druhým je přidání konfiguračního souboru.
Zde je několik běžných možností konfigurace, které budeme používat:
loglevel
- Minimální množství informací pro přihlášení do konzole. Výchozí je info
.
standalone
- Měl by tento rejstřík jednat samostatně? (Nikdy se nedotazuje na veřejný registr.) Výchozí hodnota je true
.
index_endpoint
- Pokud ne samostatný, jaký další index budeme dotazovat? Výchozí index.docker.io
.
cache
a cache_lru
- Možnosti týkající se použití mezipaměti Redis pro malé soubory, tím se dotkneme později.
storage
- Jaký backend úložiště bychom měli použít pro tento server? (V tomto tutoriálu budeme používat místní).
storage_path
- Pokud používáme místní úložiště, jaký adresář bychom měli použít k uchovávání souborů?
Než začneme pracovat s konfigurací, potřebujeme základní soubor, se kterým budeme pracovat. Soubor z úložiště registru Docker na GitHubu bude fungovat dobře:
wget https://raw.githubusercontent.com/docker/docker-registry/0.8/config/config_sample.yml
Soubor by se měl úspěšně uložit s výstupem, jako je:
2014-09-14 14:09:01 (156 MB/s) - 'config_sample.yml' saved [5384/5384]
Skvělý! Nyní můžeme tento soubor upravit tak, aby vyhovoval našim potřebám.
Jediný textový editor, který je dodáván s Core OS, je vim
, ale nebojte se, pokud jste jej nikdy předtím nepoužili, krok za krokem vám vysvětlí, co a jak upravit.
vim config_sample.yml
Jakmile budete mít soubor otevřený, stiskněte I
a v pravém dolním rohu by se mělo zobrazit: -- INSERT --
pro režim vkládání. Přejděte úplně na konec souboru pomocí kláves se šipkami, měli byste vidět část označenou prod
.
Budeme měnit dva řádky, změny jsou níže
prod:
<<: *local
storage_path: _env:STORAGE_PATH:/data
Udělali jsme změnu prod
konfigurace tak, aby byla odvozena od local
sekce místo s3
sekce. Potom jsme přepsali, storage_path
abychom použili cestu /data
uvnitř nového kontejneru.
Jakmile se ujistíte, že jsou všechny změny správné, stisknutím ESC
ukončete režim vkládání a zadejte :wq
(to znamená zapište změny do souboru a ukončete vim.)
Nyní přejmenujme soubor na just config.yml
mv config_sample.yml config.yml
Ukládání do mezipaměti Redis (volitelné)
Chcete-li použít redis k urychlení registru kontejnerů, je to stejně jednoduché jako stažení nového kontejneru z veřejného registru a přidání několika dalších řádků konfigurace.
Nejprve vytáhněte obrázek nejvyšší úrovně Redis:
docker pull redis
Jakmile je obraz úspěšně stažen, můžeme jej spustit a pojmenovat stejně jako u testovacího registru:
docker run -d --name registry-redis redis
Protože je redis v paměti, nemusíme pro něj provádět žádnou konfiguraci, protože jej propojíme s kontejnerem registru v pozdějších krocích.
Ještě jednou se ujistěte, že běží pomocí 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
Nyní znovu otevřít config.yml
v vim
a vstoupí vložka režimu, stejně jako poprvé jsme ho upravovat.
Přidejte následující řádky pod prod
část a ujistěte se, že jsou odsazeny správně. Tentokrát přidáváme pouze cache
a 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
Proměnné prostředí REDIS_PORT_6379_TCP_ADDR
a REDIS_PORT_6379_TCP_PORT
jsou předány do kontejneru registru po propojení s kontejnerem Redis.
S tím máte nyní nastaven kontejner Redis, který bude fungovat ruku v ruce s vaším kontejnerem registru. Nyní k budování registru!
Stavba kontejneru
Veškerou konfiguraci máme nastavenou a připravenou, nyní musíme vytvořit skutečný kontejner registru.
Spusťte vim Dockerfile
a vytvořte nový soubor Dockerfile. Vstupte do režimu vkládání a postupujte podle níže uvedených úprav.
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
To, co jsme udělali výše, je v podstatě rozšířit obraz registru tak, aby používal náš konfigurační soubor a nastavení. Dockerfile je sada instrukcí pro sestavení, které má Docker číst a sestavit. Pokud se chcete dozvědět více o Dockerfiles a jejich syntaxi, podívejte se na oficiální dokumentaci webu Docker.
Dále musíme postavit kontejner pro použití.
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
Nyní jsme připraveni běžet!
Vytvoříme adresář na našem hostitelském systému, který připojíme do kontejneru jako /data
svazek.
mkdir registry-data
Nyní můžeme roztočit nový kontejner. Pokud plánujete používat mezipaměť Redis, použijte 2. příkaz níže.
# 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
Chcete-li se ujistit, že váš server běží správně, navštivte http://YOUR_IP:5000
. Zobrazí se následující zpráva:
"docker-registry server (prod) (v0.8.1)"
Všimněte si, že (prod)
naše změny konfigurace byly úspěšné!
Nyní, když máme vlastní běžící registr, chceme, aby jej klient Docker na našich místních počítačích začal používat. Obvykle byste použili příkaz: docker login
, ale pro naše použití musíme k příkazu login přidat ještě jeden argument:
docker login YOUR_IP:5000
Zadejte uživatelské jméno a heslo (představte si to jako vytvoření nového účtu) a ignorujte zprávu, která říká, že jej musíte aktivovat.
Dále vytáhneme obrázek ze skladu a posuneme ho do našeho vlastního úložiště.
# 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
Pokud vše funguje správně, konečná zpráva by měla vypadat takto:
Pushing tag for rev [a9eb17255234] on
Gratulujeme! Nastavili jste své vlastní úložiště dockerů.
Co bude dál?
Zde je několik nápadů, jak zlepšit svůj nový soukromý registr:
- Reverzní proxy pomocí Nginx nebo Apache, abyste před něj umístili další zabezpečení, jako je jednoduché HTTP auth.
- Získejte doménu pro svůj server a nastavte ji, abyste mohli přistupovat k registru pomocí něčeho jako: registry.mysite.com
- Pokud vaše kontejnery obsahují citlivé informace, kupte si (nebo podepište) certifikát SSL, abyste získali ještě větší ochranu.