
Виталий
06.01.2017
22:32:35
ну тут пока важная общая идея, как сбилденные контейнеры поместить на прод и перезапустить там все. Общий подход интересует. Делал?

Pavel
06.01.2017
22:35:48
Общий подход таков: сбилденные контейнеры поместить на прод и перезапустить там все.
Ну есть всякие swarm, kubernetes и т.д.

Виталий
06.01.2017
23:03:30

Google

Pavel
06.01.2017
23:04:51
в докере это через репозиторий
Построенный контейнер пушишь в докер-репозиторий (registry), а на продах его вытягиваешь

Виталий
06.01.2017
23:05:41
ок
какими средствами можно в автоматическом режиме (командой из ci) вытянуть имеджи на прод и перезапустить там все?
у меня уже есть сбилденные контейнеры. Я хочу сбвинуться дальше :) не знаю куда идти и что читать

Pavel
06.01.2017
23:06:50
Это команды bash либо встроенные доменные языки CI систем
Можно в крайнем случае без регистра даже, просто экспортировать контейнер в файл и копировать его на прод

Виталий
06.01.2017
23:08:05
нет, надо из регистри

Pavel
06.01.2017
23:08:54
https://docs.docker.com/engine/reference/commandline/push/ вот это читал?

Виталий
06.01.2017
23:09:15
я понимаю что это баш и бла бла бла
конечно читал
я же говорю, после отрбаоты CI у меня в регистри появляются нужные образы контейнеров с кодом приложения и полным фаршем

Pavel
06.01.2017
23:10:26
https://docs.docker.com/engine/reference/commandline/pull/ а вот это? :)

Google

Виталий
06.01.2017
23:11:05
осталось только в тот же CI добавить волшебную логику которая волшебно идет на прод и просить докер на проде подтянуть новые образы и пересоздать нужные контейнеры
я сейчас это все руками делаю.

Pavel
06.01.2017
23:11:49
Как перезапустить - слишком абстрактный вопрос. Перезапускай как тебе удобно. В примитивном случае просто стопаешь один контейнер и запускаешь другой.

Виталий
06.01.2017
23:12:10
Павел, ты реализовывал то, что хочу реализовать я?

Pavel
06.01.2017
23:12:22
Нет.
Потому что непонятно чего ты хочешь :)
Я реализовывал только понятные вещи.

Виталий
06.01.2017
23:12:53
да что не понятного?
Есть CI сервер который выполняет комады - это понятно?
команды выполняются на машине А
Продавшен сервер назодиться на машине Б
вопрос - как с машины А попросить машину Б сделать то, что мне нужно?
при этом соблюдая безопасность и все остальные понятные всем дела

Pavel
06.01.2017
23:13:49
Через ssh например?

Maxim
06.01.2017
23:14:04
в gitlab ci можно же подключиться по ssh, и произвести уже манипуляции с docker демоном
не?

santa
06.01.2017
23:14:31

Виталий
06.01.2017
23:14:58
вооот... ssh... я и спрашиваю как это можно сделать:) Так как я хз и вариантов нагуглить не удалось. Везде платные сервисы деплоя докеримеджей

Maxim
06.01.2017
23:15:41
смотри, у тебя есть сиай, который идет по ssh на сервер, после этого делает docker pull $image && docker run $image

Виталий
06.01.2017
23:15:42
Жену посадить за вторую машину
Вот! Единственный пока что вариант человек предожил.
Еще есть? Что там с ssh? Как авторизация? где ключик\пароль хранить

Maxim
06.01.2017
23:15:59
https://docs.gitlab.com/ee/ci/ssh_keys/README.html

Виталий
06.01.2017
23:17:02
во, вариант. Пока что единственный более или менее реальный и поддериваемый самим СИ. Ок

Google

Pavel
06.01.2017
23:17:17
Просто ssh это базовейшая вещь, никогда бы не подумал что такой ответ станет для тебя полезным

Виталий
06.01.2017
23:17:29
ssh - это руками
я сейчас так и делаю.
а о том что этот способ поддерживает СИ из коробки и ключики предусмотрены и тд и тп это уже знать надо

Pavel
06.01.2017
23:19:17
Так ты просто прочитай всю документацию по Gitlab по диагонали, чтобы вообще поиметь представление о том что он умеет потенциально

Виталий
06.01.2017
23:20:23
ну тоже вариант, но вот проблемка в том что ее много :)
Я прочел базовые вещи которые попадались в интернетах и по ссылкам рекомендованым а до этого не дошел. А чтобы по ней искать надо хотя бы примерно понимать что искать.
так, а что если у меня куча серверов по которым раскиданы имаджи и коннектриться к каждому не варинат?
Есть механизмы управления кластерами ... типа из СИ кинул команду кластеру а он сам там на докеры каждому серверу стукнет и все перезапустит?

Pavel
06.01.2017
23:21:28
Короче базово, тебе нужно на билд сервере создать .sh скрипт, в который напихать башевских команд подключения к продакшен серверам и перезапуска там контейнеров.
И этот скрипт запускать по окончании билда контейнера
Можно делать это ансиблом, солтом, и еще 100500 способов
По маске сервера пинговать..

Виталий
06.01.2017
23:23:46
сейчас про swarm читаю
я думаю в докере предусмотрено то, что мне надо только надо это найти

Pavel
06.01.2017
23:24:12
Я слышал что он глючный

Виталий
06.01.2017
23:24:35
я слышал что докер дырявый )

Pavel
06.01.2017
23:24:47
ага
докер не для слабаков

Vladimir
06.01.2017
23:25:25
в докере предусмотрен только докер

Sergey
07.01.2017
01:06:06
ssh - это руками
ssh root@remote.host 'uptime; df -h'
твоя ci такую команду может запустить?
вместо uptime, как ты понял, можно запускать нужные тебе команды или скормить shell скрипт, который лежит локально. ну и авторизацию настроить по ключам

Google

Sergey
07.01.2017
01:06:22
когда появится кластер - тогда можно и усложнить

Виталий
07.01.2017
09:44:50
Коллеги, кто знает в чем может быть причина?
-----
$ eval $(ssh-agent -s)
Agent pid 23
$ ssh-add < (echo "$SSH_PRIVATE_KEY")
/bin/sh: eval: line 60: syntax error: unexpected "("
ERROR: Build failed: exit code 2
запускаю в alpine linux через /bin/sh

Aleksey
07.01.2017
18:28:55

Evgeny
07.01.2017
18:28:59
BusyBox sh != Bash

Aleksey
07.01.2017
18:29:00
не?

Виталий
07.01.2017
18:29:25

Vlad
07.01.2017
18:30:31
Убери пробел перед скобкой. https://docs.gitlab.com/ce/ci/ssh_keys/README.html

Admin
ERROR: S client not available

Виталий
07.01.2017
18:30:51
я уже как угодно пробовал и с ним и без него
/var/www/html # ssh-add <(echo "key")
sh: syntax error: unexpected "("
и я думаю что не в пробеле дело
я сейчас в файл загоню текст, а потом из файла читать буду

Vlad
07.01.2017
18:32:47
echo "$SSH_PRIVATE_KEY" | ssh-add

Виталий
07.01.2017
18:38:29
$ eval $(ssh-agent -s)
Agent pid 23
$ mkdir -p ~/.ssh
$ echo "${SSH_PRIVATE_KEY}" | ssh-add
ERROR: Build failed: exit code 1
:)
такой вариант решил проблему
- mkdir -p ~/.ssh
- echo "${SSH_PRIVATE_KEY}" > ~/.ssh/id_rsa
- chmod 0600 ~/.ssh/id_rsa
- ssh-add -k ~/.ssh/id_rsa

Vlad
07.01.2017
18:44:42
А зачем ssh-add если уже записал в id_rsa?

Google

Виталий
07.01.2017
18:45:19
фак, точно

Vlad
07.01.2017
18:46:51

Виталий
07.01.2017
18:47:16
Привычка
я вот только не понял, почему гитлаб рекомендовал в доке читать из переменной и добавлять через ssh-add, если можно создать файл. Может что-то связанное с безопасностью?
С файлом не нужно ставить ssh-agent и запускать его и прочее.

Vlad
07.01.2017
18:49:20
и на диске ничего не хранится

Виталий
07.01.2017
18:50:13
ну вот не получилось у меня читать с переменной
тонкостей sh не познал еще:(
гугление не помогло

Vladimir
07.01.2017
18:59:48
Молодой человек, простите конечно, но вам по-моему в другое окошко.

Виталий
07.01.2017
19:00:52

Алексей
08.01.2017
08:40:54
вот читаю я https://blog.docker.com/2017/01/docker-storage-infinit-faq/
и вижу там такой вот слайд
и понимаю докер опять сломает всю логику.
сейчас по контейнеру на каждый процесс. а потом внутри процесса будь добр разбей всё по механике хранения

Evgeny
08.01.2017
11:37:00
Может в контейнере это будет склеиваются?

Phil
08.01.2017
11:38:27

Алексей
08.01.2017
12:12:24

Phil
08.01.2017
12:13:42

Алексей
08.01.2017
12:14:01
ну infinit же
новый софтваре сторадж купленный докером