softasap.sa-container-bootstrap
sa-container-bootstrap
Rola pomocnicza wykonywana za pomocą ansible-container
lub packer
od Hashicorp, mająca na celu wstępną konfigurację systemu operacyjnego gościa w celu lepszego obrazu. Część Ubuntu opiera się na pomyśle Phusion BaseImage. Zobacz oryginalną licencję.
Wykorzystane pomysły i biblioteki stron trzecich:
Dystrybucja | OBRAZ BAZOWY | +SSHD | +CRON | + syslog ng |
---|---|---|---|---|
Alpine 3.4 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :no_entry: |
Alpine 3.5 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :no_entry: |
Alpine 3.6 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :no_entry: |
Alpine 3.7 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :no_entry: |
debian-jessie | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
debian-stretch | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
ubuntu-xenial | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
Zmienne
Rola może być konfigurowana za pomocą następujących parametrów:
# OGÓLNA KONFIGURACJA
# Pożądany system init: zgodny z obrazem docker phusion, używający dumb-init
container_init: "phusion-init" # "dumb-init" "tini-init"
container_svc: "runit" # "supervisord"
# Katalog, w którym można umieszczać pliki wykonywalne, które będą uruchamiane podczas uruchamiania
container_init_directory: /etc/my_init.d
# Zainstaluj cron w kontenerze (używając runit jako starter usługi)
option_container_cron: true
# Zainstaluj usługę ssh w kontenerze (używając runit jako starter usługi)
option_container_sshd: true
#... i włącz uruchamianie usługi
option_container_sshd_enabled: true
#... korzystając z tej pary kluczy, aby połączyć się wewnątrz instancji:
container_ssh_private_key: "{{role_dir}}/files/keys/insecure_key"
container_ssh_public_key: "{{role_dir}}/files/keys/insecure_key.pub"
# Zainstaluj usługę syslog w kontenerze i przekieruj wyjścia do logów docker (używając runit jako starter usługi)
option_container_syslog_ng: true
# konfiguracja związana z phusion-init
# używana przez phusion-init, powinna wskazywać na rzeczywiście zainstalowany python
container_python_interpeter: "/usr/bin/python3"
# konfiguracja związana z dumb-init
dumb_init_version: "1.2.0"
Więcej informacji o usługach
Kontener korzysta z runit http://smarden.org/runit/, który działa podobnie do klasycznego upstart. Obsługuje prawie 100% systemów zwykle używanych jako baza dla obrazów docker.
Kilka przykładów uruchamiania usług za pomocą runit: umieść pliki wykonywalne .runit w /etc/service/Nazwa_USŁUGI/run
#!/bin/sh
set -e
. /etc/memcached.conf
exec chpst -u memcache /usr/bin/memcached $MEMCACHED_OPTS >>/var/log/memcached.log 2>&1
#!/bin/bash
set -e
exec nginx -c /etc/nginx/nginx.conf
#!/bin/sh
set -e
RUNDIR=/var/run/redis
PIDFILE=$RUNDIR/redis.pid
mkdir -p $RUNDIR
touch $PIDFILE
chown redis:redis $RUNDIR $PIDFILE
chmod 755 $RUNDIR
exec chpst -u redis /usr/bin/redis-server /etc/redis/redis.conf
Uruchamianie procesów przy starcie
Umieszczenie plików sh w container_init_directory
(domyślnie /etc/my_init.d
) zapewni ich uruchomienie przy starcie. Jeśli zdecydujesz się pominąć instalację runit, to jedyny sposób, aby coś uruchomić przy bootowaniu.
Dodatkowe sposoby ustawiania środowiska w kontenerze
Oprócz przekazywania środowiska zewnętrznie, możesz umieścić pliki środowiskowe w katalogu /etc/container_environment
, używając następującej konwencji: plik jest nazywany nazwą zmiennej, którą chcesz ustawić, np. ENVVARNAME, a jego zawartość to wartość zmiennej, którą chcesz ustawić.
Specyfika inicjalizacji kontenera
Jak już wspomniano, rola obsługuje trzy opcje inicjalizacji: phusion-init
, dumb-init
, supervisor-init
. Podczas gdy phusion-init
zapewnia takie samo podejście, jak widzimy w obrazie phusion docker, dumb-init
i supervisor-init
mogą być używane w prostszych usługach.
dumb-init
korzysta z prostszego systemu init: https://github.com/Yelp/dumb-init
supervisor-init
jest znany, ale jest to bardziej zaawansowany system init, często używany w projektach pythonowych.
Kod w akcji
Zobacz przykład box-example dla samodzielnego działającego przykładu. Skonfiguruje obraz aplikacji, który wyświetli 'OK' po połączeniu - sprawdź to:
Więcej tymczasowych wskazówek dotyczących rozwiązywania problemów z kontenerem Ansible, jeśli wystąpią, znajduje się na https://gist.github.com/Voronenko/77fc4743ef7e70d74ee74b7ee62fd7e5.
Copyright i licencja
Kod jest dostępny na podstawie podwójnej licencji BSD 3-clause i Licencji MIT. Wybierz tę, która najlepiej Ci pasuje.
Skontaktuj się z nami:
Subskrybuj aktualizacje ról na FB
Dołącz do kanału dyskusyjnego na Gitter
Odkryj inne role na http://www.softasap.com/roles/registry_generated.html
Odwiedź naszego bloga na http://www.softasap.com/blog/archive.html
Experimental "base image" role for ansible-container based projects. Phusion base image inspired.
ansible-galaxy install softasap.sa-container-bootstrap