ЦореОС + Доцкер
Повлачење и покретање најновијег регистра
Конфигурација регистра
Редис кеширање (опционо)
Изградња контејнера
Конфигуришите свој локални Доцкер клијент
Шта је следеће?
Сви знамо и волимо Доцкер, платформу за креирање, управљање и дистрибуцију контејнера апликација на више машина. Доцкер Инц. пружа услугу за хостовање контејнера отвореног кода који се преузимају (или повлаче) као гит спремиште познато као „Доцкер Регистри“. Замислите то као ГитХуб за Доцкер контејнере.
Али шта ако желите да угостите сопствени регистар одвојен од јавног? Па, Доцкер Инц. је отворио своју апликацију Регистри на ГитХуб-у.
Овај водич ће вас одвести кроз процес подешавања приватног Доцкер регистра користећи ЦореОС на новом ВПС-у.
ЦореОС + Доцкер
Нећемо трошити много времена на то што тачно Доцкер и ЦореОС могу да ураде, јер је то ван оквира овог упутства. У суштини, ЦореОС је дизајниран за масивне кластере сервера, мали је, брз и аутоматски добија редовна безбедносна ажурирања. Његов основни систем датотека је такође само за читање, што значи да морате да користите Доцкер за покретање било које врсте софтвера који није укључен у основну инсталацију.
Ово чини Цоре ОС савршеним хост системом за Доцкер!
Повлачење и покретање најновијег регистра
Доцкер Инц. је обезбедио регистар као слику највишег нивоа, што значи да можемо да га повучемо надоле једноставним:
docker pull registry
This can take a few minutes depending on the connection speed.
Плус што је слика највишег нивоа такође значи да добија редовну подршку и ажурирања.
Хајде сада да тестирамо регистар. Можемо да креирамо нови контејнер користећи слику регистратора:
docker run -p 5000:5000 -d --name=basic_registry registry
За оне који нису превише користили Доцкер, -p
заставица означава PORT
, што значи да излажемо порт 5000 из контејнера на порт хоста 5000.
Ознака је -d
скраћеница за daemon
, ово ће довести до покретања контејнера у позадини и не штампања излаза у тренутној ССХ сесији, такође желимо да назовемо овај основни тестни контејнер користећи --name
опцију тако да можемо лако да управљамо њиме касније.
Уверите се да ваш основни контејнер регистратора ради помоћу docker ps
. Излаз би требао изгледати слично:
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
Такође, посетите http://YOUR_IP:5000
у свом веб претраживачу и требало би да добијете поруку попут следеће:
"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.
Сада имате покренут сопствени (веома основни) регистар контејнера! Али још нисмо готови.
Можда желите да ово сачувате приватно од радозналих очију или можда да сачувате своје слике на Амазон С3 уместо у локалном складишту. Хајде да прођемо кроз различите опције конфигурације у следећем одељку.
Пре него што кренемо даље, хајде да убијемо тест контејнер да не бисмо наишли на конфликтне портове.
docker kill basic_registry
Конфигурација регистра
Постоје два начина на које можемо проследити конфигурацију Доцкер регистру. Један начин је прослеђивање променљивих окружења у нови контејнер, а други је додавање конфигурационе датотеке.
Ево неколико уобичајених опција конфигурације које ћемо користити:
loglevel
- Минимална количина информација за логовање на конзолу. Подразумевано је info
.
standalone
- Да ли овај Регистар треба да делује самостално? (Никада не поставља упите јавном регистру.) Подразумевано је true
.
index_endpoint
- Ако није самосталан, који други индекс ћемо тражити? Подразумевано index.docker.io
.
cache
и cache_lru
- Опције које се односе на коришћење Редис кеш меморије за мале датотеке, то ћемо се дотакнути касније.
storage
– Коју позадину за складиштење треба да користимо за овај сервер? (У овом водичу ћемо користити локални).
storage_path
- Ако користите локалну меморију, који директоријум треба да користимо за чување датотека?
Пре него што почнемо да радимо са конфигурацијом, потребна нам је основна датотека за рад. Датотека из Доцкер Регистри спремишта на ГитХуб-у ће радити сасвим добро:
wget https://raw.githubusercontent.com/docker/docker-registry/0.8/config/config_sample.yml
Датотека би требало да буде успешно сачувана са излазом као што је:
2014-09-14 14:09:01 (156 MB/s) - 'config_sample.yml' saved [5384/5384]
Сјајно! Сада можемо да изменимо ову датотеку тако да одговара нашим потребама.
Једини уређивач текста који долази са Цоре ОС-ом је vim
, али не брините ако га никада раније нисте користили, ово ће објаснити корак по корак шта да уређујете и како да то урадите.
vim config_sample.yml
Када отворите датотеку, притисните I
и доњи десни угао би требало да прикаже: -- INSERT --
за режим уметања. Померите се скроз до дна датотеке помоћу тастера са стрелицама, требало би да видите одељак са ознаком prod
.
Променићемо две линије, промене су испод
prod:
<<: *local
storage_path: _env:STORAGE_PATH:/data
Оно што смо урадили је да променимо prod
конфигурацију тако да произилази из local
секције уместо s3
одељка. Затим смо заменили да storage_path
бисмо користили путању /data
унутар новог контејнера.
Када потврдите да су све промене тачне, притисните ESC
да бисте изашли из режима уметања и укуцајте :wq
(то значи да упишите промене у датотеку и затворите вим.)
Сада преименујмо датотеку у јуст config.yml
mv config_sample.yml config.yml
Редис кеширање (опционо)
Ако желите да користите редис да бисте убрзали свој регистар контејнера, то је једноставно као да извучете нови контејнер из јавног регистра и додате још неколико редова конфигурације.
Прво повуците слику највишег нивоа Редис-а:
docker pull redis
Када се слика успешно повуче, можемо је покренути и именовати је као што смо урадили са тест регистром:
docker run -d --name registry-redis redis
Пошто је редис у меморији, не морамо да радимо никакву конфигурацију за њега, јер ћемо га повезати са контејнером регистратора у каснијим корацима.
Још једном, уверите се да ради користећи 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
Сада поново отворите config.yml
ин vim
и уђите у режим уметања као и први пут када смо га уређивали.
Додајте следеће редове испод prod
одељка, пазећи да су правилно увучени. Овог пута само додајемо cache
и 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
Променљиве окружења REDIS_PORT_6379_TCP_ADDR
и REDIS_PORT_6379_TCP_PORT
прослеђују се у контејнер регистратора након повезивања са Редис контејнером.
Уз то, сада имате подешавање Редис контејнера који ће радити руку под руку са вашим контејнером регистра. Сада на изградњу регистра!
Изградња контејнера
Имамо комплетну и спремну конфигурацију, сада треба да направимо стварни контејнер регистратора.
vim Dockerfile
Покрените се да бисте креирали нови Доцкерфиле. Уђите у режим уметања и пратите измене у наставку.
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
Оно што смо урадили изнад је у суштини проширити слику регистратора тако да ће користити нашу конфигурациону датотеку и подешавања. Доцкерфиле је скуп инструкција за прављење које Доцкер чита и прави. Ако желите да сазнате више о Доцкер фајловима и њиховој синтакси, погледајте званичну документацију Доцкер сајта.
Затим морамо да направимо контејнер за употребу.
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
Сада смо спремни за трчање!
Хајде да направимо директоријум на нашем хост систему који ће се монтирати у контејнер као /data
волумен.
mkdir registry-data
Сада можемо да завртимо нови контејнер. Ако планирате да користите Редис кеш, користите 2. команду испод.
# 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
Да бисте били сигурни да ваш сервер ради исправно, посетите http://YOUR_IP:5000
. Видећете следећу поруку:
"docker-registry server (prod) (v0.8.1)"
Приметите шта (prod)
значи да су наше промене конфигурације биле успешне!
Сада када имамо сопствени покренути регистар, желимо да Доцкер клијент на нашим локалним машинама почне да га користи. Обично бисте користили команду: docker login
, али за нашу употребу морамо да додамо још један аргумент команди за пријаву:
docker login YOUR_IP:5000
Унесите корисничко име и лозинку (размишљајте о томе као да направите нови налог) и занемарите поруку која каже да морате да га активирате.
Затим, хајде да извучемо стоковну слику и гурнемо је у наше сопствено складиште.
# 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
Ако је све исправно, коначна порука би требало да буде на следећи начин:
Pushing tag for rev [a9eb17255234] on
Честитам! Поставили сте своје сопствено доцкер спремиште.
Шта је следеће?
Ево неколико идеја о томе како да побољшате свој нови приватни регистар:
- Обрнути прокси помоћу Нгинк-а или Апацхе-а за постављање додатне сигурности испред њега, попут једноставне ХТТП аутх.
- Набавите домен за свој сервер и подесите га тако да можете приступити свом регистру помоћу нечег попут: регистри.мисите.цом
- Купите (или сами потпишите) ССЛ сертификат да бисте додали још више заштите ако ваши контејнери садрже осетљиве информације.