# Понедельник 5 твитов
Всем привет. Меня зовут Саша, я работаю в компании @docker уже почти 2 года и на этой неделе веду этот твиттер.
15:57Я сейчас нахожусь в городе Остин, где будет проходить конференция OSCON. Если вы тоже там, то приходите завтра в будку докера - поболтаем.
15:59Сегодня у меня день осмотра достопримечательностей, поэтому я не буду особо активен, но вы можете задавать мне вопросы, а я завтра отвечу.
16:01Если вам нужен docker4mac, то подписывайтесь на beta.docker.com и шлите мне ваш dockerID на lk4d4(at)docker.com
16:04Ну и перед тем как отправиться в дебри Техаса скажу, что 100% времени я пишу на языке Go :)
16:06# Вторник 32 твита
Больше обо мне можно узнать из интервью @GolangShow golangshow.com/episode/2015/0… и @KSDaemon sdcast.ksdaemon.ru/2016/02/sdcast…
2:26Пришёл на OSCON pic.twitter.com/Kp1KHXrgvt
15:53Хаскелисты не забыты pic.twitter.com/CtYoNdm5U9
15:57Все собирают свои будки, слева Microsoft pic.twitter.com/pve7ga5NQV
16:07Будка гитхаба в виде контейнера - подозрительно pic.twitter.com/XoKxXhzsmj
16:08А будка докера не в форме контейнера pic.twitter.com/fwk48YJLmC
16:11Ну что ж постараемся начать более техническую часть. Немного расскажу про github.com/docker/docker
16:29Долгое время docker был одним исполняемым файлом. Он почти на 100% написан на Go.
16:31Исключение составляет хак для вхождения в существующие linux namespaces: github.com/opencontainers…
16:32Сейчас докер состоит из 5 исполняемых файлов
16:321. Основной демон - github.com/docker/docker/…
16:353. Демон для запуска контейнеров - github.com/docker/contain…
16:384. Прослойка для поддержания контейнеров пока демоны мертвы - github.com/docker/contain…
16:405. Исполняемый файл, который собственно запускает контейнер - github.com/opencontainers…
16:41Меня тут отвлекли на перенос какой-то коробки. Но вкратце все в докере написано на Go.
17:05Краткое включение с OSCON pic.twitter.com/lGo33Kn5X9
17:06Go довольно быстрый и простой язык со сборкой мусора. Я еще не встречал языков на которых так легко писать.
17:09И что немаловажно Go очень легко читать. Особенно это важно для opensource проектов.
17:10Есть ограниченный набор вещей, которые в Go сложнее сделать, чем в C(fork, setns), но для 99.99% задач он подходит очень хорошо.
17:14Ну ладно, спою дифирамбы Go попозже. Расскажу немного про контейнеры.
17:18Контейнеры в Linux состоят из трех частей.
17:201. Изоляция - Linux namespaces
Сейчас можно изолировать сеть, юзеров, хостнейм, маунты и прочее, больше здесь man7.org/linux/man-page…
2. Ограничение действий - Linux capabilities, apparmor/selinux, seccomp. Все это довольно гибкие механизмы ограничения действий.
17:23Capabilities man7.org/linux/man-page… здесь все просто - каждый CAP отвечает за некоторый набор действий.
17:24Apparmor и SELinux это системы безопасности от Canonical и RedHat. Для них можно писать более сложные правила.
17:25Seccomp man7.org/linux/man-page… - позволяет фильтровать syscalls и аргументы к ним. Очень эффективная и гибкая система.
17:283. Ограничение ресурсов - Linux cgroups man7.org/linux/man-page… . Память, CPU и прочее.
17:31Все это дело поддерживается докером конечно же.
17:34Про linux namespaces в Go вы можете найти в моих постах lk4d4.darth.io/categories/nam…
17:35Существуют и другие системы контейнеризации помимо докера. LXC и LXD на C от компании Canonical, rkt на Go от CoreOS например.
17:36Есть очень крутая система контейнеров на Rust - github.com/tailhook/vagga
17:40Кстати докер поддерживает еще и нативные контейнеры windows, которые выйдут позже в этом году msdn.microsoft.com/en-us/virtuali…
17:47# Среда 12 твитов
У nginx на OSCON клёвые футболки со штатом Техас pic.twitter.com/9Bh7IYYFfQ
16:44Гошная подушка жутковата pic.twitter.com/TiUymTrdSO
16:58С подачи @M0sth8 пробуем facebook.github.io/reason/
17:39Штука на которой построен docker4mac github.com/docker/hyperkit
17:51Немного про то, где я пишу код
Я использую Gentoo Linux с unstable пакетами.
@backendsecret Мой shell это zsh.
18:31Мой window manager это dwm, в нем я открываю терминал st(suckless terminal), где открывается tmux c уже упомянутым zsh.
18:33Там уже я открываю vim, где пишу код :) Рекомендую плагин vim-go для него.
18:34Мои конфиги можно найти здесь - github.com/LK4D4/dotfiles
18:34Суперкрутая 9p библиотека для Go github.com/docker/go-p9p
18:48Простейшие контейнеры на Go github.com/LK4D4/unc
19:42Немного чтива pic.twitter.com/lv1W6r6Gyo22:20
# Четверг 8 твитов
Здесь вы можете увидеть трюк для запуска кода в однопоточном окружении в go github.com/opencontainers…
Это называется C constructor :)
Идея в том, что этот код запускается перед инициализацией кода рантайма.
18:37Есть еще волшебное место в стандартной библиотеке, где код запускается в однопоточном окружении golang.org/src/syscall/ex…
18:40Этот код исполняется при использовании exec.Cmd
18:41Docker на OSCON. pic.twitter.com/QTMVgMHt1M
19:00Weekly #golang report github.com/LK4D4/report/b…20:05
etcd probably just merged something big :)
Через 20 минут начинаем запись 57го эпизода @GolangShow. Трансляция тут golangshow.com/online/20:07
# Пятница 2 твита
@solomonstre @vieux First Docker PR accepted. :-) Thanks @LK4D4math!17:08
@LK4D4math Thanks for your help today with my first docker PR!17:08
# Суббота 3 твита
Пример tcp proxy на Go github.com/docker/docker/…
21:19Пример pubsub на Go github.com/docker/docker/…
21:22Поиск по префиксам на Go github.com/docker/docker/…
21:23# Воскресенье 1 твит
Только что дочитал книжку "An astronaut's guide to life on Earth". Очень круто, всем рекомендую.
1:08# Ссылки
github.com
- https://github.com/docker/docker
- https://github.com/opencontainers/runc/blob/master/libcontainer/nsenter/nsexec.c
- https://github.com/docker/docker/tree/master/cmd/dockerd
- https://github.com/docker/docker/tree/master/cmd/docker
- https://github.com/docker/containerd/tree/master/containerd
- https://github.com/docker/containerd/tree/master/containerd-shim
- https://github.com/opencontainers/runc
- https://github.com/tailhook/vagga
- https://github.com/docker/hyperkit
- https://github.com/LK4D4/dotfiles
- https://github.com/docker/go-p9p
- https://github.com/LK4D4/unc
- https://github.com/opencontainers/runc/blob/master/libcontainer/nsenter/nsenter.go#L8
- https://github.com/LK4D4/report/blob/master/reports/golang-may19.md
- https://github.com/docker/docker/blob/master/pkg/proxy/tcp_proxy.go
- https://github.com/docker/docker/blob/master/pkg/pubsub/publisher.go
- https://github.com/docker/docker/blob/master/pkg/truncindex/truncindex.go
other
- http://beta.docker.com/
- http://docker.com/
- https://golangshow.com/episode/2015/08-27-014/
- http://golangshow.com/online/
- https://sdcast.ksdaemon.ru/2016/02/sdcast-39/
- http://man7.org/linux/man-pages/man7/namespaces.7.html
- http://man7.org/linux/man-pages/man7/capabilities.7.html
- http://man7.org/linux/man-pages/man2/seccomp.2.html
- http://man7.org/linux/man-pages/man7/cgroups.7.html
- http://lk4d4.darth.io/categories/namespaces/
- https://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/manage_docker
- https://forums.docker.com/
- https://www.docker.com/products/docker-cloud
- http://facebook.github.io/reason/
- https://golang.org/src/syscall/exec_linux.go#L57