FAQ Jak skonfigurować i wdrożyć niestandardowe szablony aplikacji w Container Station 3?

QNAP

Bot
Management
29 Kwiecień 2013
2 108
34
88
Taipei
www.qnap.com
Szablony aplikacji Container Station umożliwiają wdrażanie wstępnie skonfigurowanych kontenerów w środowisku QNAP. Domyślnie Container Station udostępnia kolekcję QNAP-Verified Templates, ale możesz dodać dodatkowe niestandardowe szablony aplikacji, aby spełnić Twoje specyficzne potrzeby. Możesz hostować te niestandardowe szablony aplikacji bezpośrednio na urządzeniu QNAP lub na zewnętrznym serwerze WWW.

Ten samouczek wyjaśnia dwie metody hostowania niestandardowych szablonów aplikacji na urządzeniu QNAP oraz jak skonfigurować Container Station, aby uzyskać dostęp do tych niestandardowych szablonów aplikacji.

  • Tworzenie pliku niestandardowego szablonu aplikacji[/URL]
  • Hostowanie niestandardowego szablonu aplikacji w kontenerze NGINX[/URL]
  • Hostowanie niestandardowego szablonu aplikacji za pomocą serwera WWW QNAP[/URL]
  • Dodawanie niestandardowego szablonu aplikacji do Container Station[/URL]
  • Wdrażanie niestandardowego szablonu aplikacji[/URL]

Tworzenie pliku niestandardowego szablonu aplikacji

Pierwszym krokiem jest utworzenie pliku niestandardowego szablonu aplikacji. Domyślnie Container Station udostępnia listę kontenerów, które są zweryfikowane pod kątem prawidłowego działania z urządzeniem QNAP. Możesz pobrać i zmodyfikować QNAP-Verified Templates tutaj lub samodzielnie utworzyć nowy plik.

Uwaga:
Możesz modyfikować plik szablonu w dowolnym edytorze tekstu.

Format szablonu aplikacji

Definicje szablonów aplikacji są zapisane w formacie JSON. Prawidłowe szablony składają się z tablicy oraz jednego lub więcej elementów szablonu kontenera. Każdy element szablonu kontenera to obiekt JSON, który zawiera wszystkie obowiązkowe lub opcjonalne pola danych. Format powinien być podobny do poniższego przykładu:

Kod:
{
  "templates": [
    {
      // template1
    },
    {
      // template2
    },
    ...
  ]
}

Format elementu JSON

type

Atrybut | Opis
Opis | Typ kontenera (Docker lub LXD) dla tego szablonu.
Ważność | Wymagane
Format | Liczba całkowita
Dopuszczalne wartości |
  • 1: Używane dla kontenerów Docker.
  • 10: Używane dla kontenerów LXD.

title

Atrybut | Opis
Opis | Tytuł szablonu.
Ważność | Wymagane
Format | Ciąg znaków
Dopuszczalne wartości | Dowolna wartość ciągu znaków

sub_title

Atrybut | Opis
Opis | Informacje o wersji szablonu.
Ważność | Wymagane
Format | Ciąg znaków
Dopuszczalne wartości | Dowolna wartość ciągu znaków

description

Atrybut | Opis
Opis | Opis używany do dostarczania informacji o szablonie.
Ważność | Wymagane
Format | Ciąg znaków
Dopuszczalne wartości | Dowolna wartość ciągu znaków

logo

Atrybut | Opis
Opis | Lokalizacja logo dla szablonu.
Ważność | Opcjonalne
Format | Ciąg znaków
Dopuszczalne wartości | Dowolny prawidłowy adres URL lub ścieżka względna do domeny sieciowej, w której hostowany jest niestandardowy szablon aplikacji.

location

Atrybut | Opis
Opis | Adres URL szablonu. Może to być strona internetowa wprowadzająca do szablonu.
Ważność | Opcjonalne
Format | Ciąg znaków
Dopuszczalne wartości | Dowolny prawidłowy adres URL

platform

Atrybut | Opis
Opis | Obsługiwana platforma. Musi zawierać prawidłową wartość.
Ważność | Wymagane
Format | Ciąg znaków
Dopuszczalne wartości |
  • linux: Każda platforma
  • linux/amd64: 64-bitowy x86
  • linux/arm64: 64-bitowy ARM
  • linux/arm: 32-bitowy ARM
Przykład |
Kod:
{
  "platform": "linux/amd64"
}

image

Atrybut | Opis
Opis | Obraz skojarzony z szablonem.
Ważność | Wymagane
Format | Ciąg znaków
Dopuszczalne wartości | Dowolny prawidłowy obraz
Przykład |
Kod:
{
  "image": "nginx:latest"
}

command

Atrybut | Opis
Opis | Polecenie do uruchomienia w kontenerze Docker. Jeśli nieokreślone, kontener używa domyślnego polecenia określonego w Dockerfile.
Ważność | Opcjonalne
Format | Ciąg znaków
Dopuszczalne wartości | Dowolna wartość ciągu znaków
Przykład |
Kod:
{
  "command": "nginx -g 'daemon off;'"
}

entrypoint

Atrybut | Opis
Opis | Punkt wejścia do uruchomienia kontenera Docker. Jeśli nieokreślony, kontener używa domyślnego punktu wejścia określonego w Dockerfile.
Ważność | Opcjonalne
Format | Ciąg znaków
Dopuszczalne wartości | Dowolna wartość ciągu znaków
Przykład |
Kod:
{
  "entrypoint": "/docker-entrypoint.sh"
}

env

Atrybut | Opis
Opis | Tablica JSON opisująca zmienne środowiskowe wymagane przez szablon. Każdy element w tablicy musi być prawidłowym obiektem JSON.
Ważność | Opcjonalne
Format | Tablica
Dopuszczalne wartości | Prawidłowa tablica JSON
Format tablicy |
  • name: (Wymagane) Nazwa zmiennej środowiskowej obsługiwanej w obrazie kontenera.
  • value: (Wymagane) Wartość przypisana do zmiennej.
Przykład |
Kod:
{
  "env": [
    { "name": "ENV_VAR1", "value": "" },
    { "name": "ENV_VAR2", "value": "value2" }
  ]
}

labels

Atrybut | Opis
Opis | Tablica JSON opisująca etykiety skojarzone z szablonem. Każdy element w tablicy musi być prawidłowym obiektem JSON.
Ważność | Opcjonalne
Format | Tablica
Dopuszczalne wartości | Prawidłowa tablica JSON
Format tablicy |
  • name: (Wymagane) Nazwa klucza etykiety.
  • value: (Wymagane) Wartość przypisana do klucza.
Przykład |
Kod:
{
  "labels": [
    { "name": "com.example.vendor", "value": "Acme Incorporated" },
    { "name": "com.example.label-with-value", "value": "foo" },
    { "name": "version", "value": "1.0" }
  ]
}

volumes

Atrybut | Opis
Opis | Tablica JSON opisująca woluminy powiązane z szablonem. Każdy element w tablicy musi być prawidłowym obiektem JSON z wymaganą właściwością `container`.
Ważność | Opcjonalne
Format | Tablica
Akceptowane wartości | Prawidłowa tablica JSON
Format tablicy |
  • `container`: (Wymagane) Ścieżka kontenera.
  • `volume`: (Opcjonalne) Nazwa woluminu Docker.
  • `bind`: (Opcjonalne dla kontenerów Docker, Wymagane dla kontenerów LXD) Ścieżka hosta używana jako źródło montowania typu `bind`.
  • `readonly`: (Opcjonalne) Jeśli ustawiono na `true`, wolumin jest montowany w trybie tylko do odczytu.
Przykład |
Kod:
{
  "volumes": [
    {
      "container": "/usr/share/nginx/html"
    },
    {
      "container": "/usr/share/nginx/html"
      "volume": "nginx-vol"
    },
    {
      "container": "/usr/share/nginx/html/my-templates.json",
      "bind": "/Container/my-templates.json  ",
      "readonly": true
    }
  ]
}

ports

Atrybut | Opis
Opis | Tablica JSON opisująca porty udostępniane przez szablon. Każdy element w tablicy musi być prawidłowym ciągiem JSON określającym numer portu w kontenerze, a także protokół. Może być opcjonalnie poprzedzony numerem portu i dwukropkiem (na przykład `8080:`) w celu zdefiniowania portu mapowanego na hoście. Jeśli port hosta nie jest określony, host Docker automatycznie przypisuje port po uruchomieniu kontenera.
Ważność | Opcjonalne
Format | Tablica
Akceptowane wartości | Prawidłowa tablica JSON
Przykład |
Kod:
{
  "ports": ["8080:80/tcp", "443/tcp", "80/udp"]
}

hostname

Atrybut | Opis
Opis | Nazwa hosta kontenera. Może pomóc w łatwej identyfikacji kontenera.
Ważność | Opcjonalne
Format | Ciąg znaków
Akceptowane wartości | Dowolna wartość ciągu znaków
Przykład |
Kod:
{
  "hostname": "myContainerHostName"
}

restart_policy

Atrybut | Opis
Opis | Zasada ponownego uruchamiania powiązana z kontenerem Docker. Jeśli nieokreślona, wartość domyślna to `unless-stopped`.
Ważność | Opcjonalne
Format | Ciąg znaków
Akceptowane wartości |
  • `no`: Nie uruchamiaj kontenera automatycznie ponownie.
  • `on-failure`: Uruchom kontener ponownie, jeśli zakończy działanie z powodu błędów, takich jak kod wyjścia różny od zera.
  • `always`: Zawsze uruchamiaj kontener ponownie, jeśli się zatrzyma. Jeśli zostanie zatrzymany ręcznie, uruchomi się ponownie tylko po ponownym uruchomieniu Container Station lub ręcznym ponownym uruchomieniu kontenera.
  • `unless-stopped`: Podobnie jak `always`, z tą różnicą, że gdy kontener zostanie zatrzymany ręcznie, nie uruchomi się ponownie nawet po ponownym uruchomieniu Container Station.
Przykład |
Kod:
{
  "restart_policy": "unless-stopped"
}

auto_start_policy

Atrybut | Opis
Opis | Zasada automatycznego uruchamiania powiązana z kontenerem LXD. Jeśli nieokreślona, wartość domyślna to `retain`.
Ważność | Opcjonalne
Format | Ciąg znaków
Akceptowane wartości |
  • `no`: Nie uruchamiaj kontenera automatycznie ponownie.
  • `always`: Zawsze uruchamiaj kontener ponownie, jeśli się zatrzyma. Jeśli zostanie zatrzymany ręcznie, uruchomi się ponownie tylko po ponownym uruchomieniu Container Station lub ręcznym ponownym uruchomieniu kontenera.
  • `retain`: Podobnie jak `always`, z tą różnicą, że gdy kontener zostanie zatrzymany ręcznie, nie uruchomi się ponownie nawet po ponownym uruchomieniu Container Station.
Przykład |
Kod:
{
  "auto_start_policy": "retain"
}

interactive

Atrybut | Opis
Opis | Określa, czy kontener Docker powinien uruchomić się w trybie pierwszoplanowym. Jeśli nieokreślona, wartość domyślna to `true`.
Ważność | Opcjonalne
Format | Wartość logiczna
Akceptowane wartości |
  • `true`: Uruchom kontener Docker w trybie pierwszoplanowym.
  • `false`: Uruchom kontener w trybie odłączonym.
Przykład |
Kod:
{
  "interactive": false
}

tty

Atrybut | Opis
Opis | Określa, czy kontener Docker powinien mieć przydzielony pseudo-TTY. Jeśli nieokreślona, wartość domyślna to `true`.
Ważność | Opcjonalne
Format | Wartość logiczna
Akceptowane wartości |
  • `true`: Przydziela pseudo-TTY kontenerowi Docker.
  • `false`: Nie przydziela pseudo-TTY kontenerowi Docker.
Przykład |
Kod:
{
  "tty": false
}

privileged

Atrybut | Opis
Opis | Określa, czy kontener powinien uruchomić się w trybie uprzywilejowanym. Jeśli nieokreślona, wartość domyślna to `false`.
Ważność | Opcjonalne
Format | Wartość logiczna
Akceptowane wartości |
  • `true`: Uruchamia kontener w trybie uprzywilejowanym.
  • `false`: Nie uruchamia kontenera w trybie uprzywilejowanym.
Przykład |
Kod:
{
  "privileged": true
}

Hostowanie niestandardowego szablonu aplikacji w kontenerze NGINX

Następnie musisz udostępnić niestandardowy szablon aplikacji dla Container Station. Ten temat wyjaśnia proces hostowania pliku szablonu za pomocą kontenera NGINX, który również działa w Container Station.

Alternatywnie, możesz również hostować plik szablonu aplikacji na serwerze QNAP Web Server. Zobacz Hostowanie niestandardowego szablonu aplikacji za pomocą serwera QNAP Web Server[/URL].

Ważne:
Po zaktualizowaniu pliku JSON niestandardowych szablonów aplikacji, musisz ponownie uruchomić kontener NGINX, aby zmiany zostały odzwierciedlone w kontenerze.

  1. Prześlij plik niestandardowego szablonu aplikacji.
    1. Otwórz File Station.
    2. Przejdź do folderu na urządzeniu.
    3. Prześlij plik szablonu aplikacji.

      GUID-5C14E8F1-9443-4A94-B061-9C9C95CB8C06-low.png
    4. Zanotuj lokalizację pliku szablonu do późniejszego wykorzystania.
  2. Otwórz Container Station.
  3. W górnym panelu kliknij strzałkę obok `Explore`.
  4. Wybierz `Create Container`.

    Otworzy się okno `Create Container`.
  5. Wybierz obraz.

    Ustawienie | Akcja
    Tryb | Wybierz `Basic Mode`.
    Rejestr | Wybierz `Docker Hub`.
    Obraz | Wprowadź `nginx`.

    GUID-F4D7D1CA-AD05-434F-8A5E-B62B9A78A1E0-low.png
  6. Kliknij `Next`.
  7. Opcjonalnie: Skonfiguruj ustawienia kontenera.

    Ustawienie | Akcja
    Nazwa | Wprowadź nazwę kontenera. Na przykład: `nginx-my-template`.
    Zasady automatycznego uruchamiania | Wybierz `Unless Stopped`.

    Ta opcja spowoduje, że kontener będzie zawsze uruchamiany ponownie, chyba że zostanie ręcznie zatrzymany przez użytkownika.
    Konfiguracja sieci | Skonfiguruj ustawienia tak, aby pasowały do środowiska sieciowego.

    W tym samouczku używamy trybu sieciowego `Default` i wysyłamy ruch do kontenera przez port `30080` na hoście.

    Uwaga:
    Jeśli pole `Host` nie zostanie określone, opublikowany port może ulec zmianie po ponownym uruchomieniu kontenera. Może to spowodować, że szablon aplikacji stanie się niedostępny dla `Container Station`.

    GUID-FEA8B37F-04EE-4D3E-8272-08DD1F21EFE4-low.png
  8. Opcjonalnie: Zmodyfikuj ustawienia zaawansowane.
    1. Kliknij `Advanced Settings`.

      Pojawi się okno `Advanced Settings`.
    2. Przejdź do zakładki `Storage`.
    3. Kliknij strzałkę obok `Add Volume`.
    4. Wybierz `Bind Mount Host Path`.

      Dodano nowy wiersz pamięci masowej.
    5. Kliknij
      GUID-C86A03A5-3E5F-4EC7-9F04-4FF3CA5EE246-low.png

      .

      Otworzy się okno `Select Host Path`.
    6. Zlokalizuj i wybierz plik szablonu aplikacji, który przesłano wcześniej.
    7. Kliknij `Apply`.
    8. W polu `Container` wprowadź `/usr/share/nginx/html/TEMPLATE_FILENAME`.

      Uwaga:
      Zastąp `TEMPLATE_FILENAME` nazwą pliku szablonu. Na przykład: `/usr/share/nginx/html/my-templates.json`
    9. Wybierz `RO`.

      GUID-FB89C46D-264E-4DBE-A423-6CFA82486F6B-low.png
    10. Kliknij `Apply`.

      `Container Station` zapisuje ustawienia pamięci masowej.
  9. Kliknij `Next`.
  10. Przejrzyj ustawienia kontenera, a następnie kliknij `Finish`.

Plik szablonu aplikacji staje się dostępny do użytku.

Uwaga:
Możesz sprawdzić, czy plik szablonu aplikacji jest dostępny, wprowadzając http://HOST_IP_ADDRESS:pUBLISHED_HOST_PORT/TEMPLATE_FILENAME w przeglądarce internetowej. Na przykład: http://192.168.1.1:30080/my-templates.json.

Hostowanie niestandardowego szablonu aplikacji za pomocą serwera WWW QNAP

Następnie należy udostępnić niestandardowy szablon aplikacji dla `Container Station`. Ten temat wyjaśnia proces hostowania pliku szablonu za pomocą serwera WWW `QNAP`.

Alternatywnie, plik szablonu aplikacji można również hostować za pomocą kontenera `NGINX` bezpośrednio w `Container Station`. Zobacz Hostowanie niestandardowego szablonu aplikacji w kontenerze NGINX[/URL].

  1. Włącz `QTS Web Server`.
    1. Zaloguj się do systemu jako administrator.
    2. Przejdź do `Control Panel > Applications > Web Server > Web Server`.
    3. Wybierz `Enable Web Server`.

      GUID-06CF17DF-AF9D-4C3A-9223-F51E4C31E614-low.png
    4. Opcjonalnie: Skonfiguruj ustawienia `Web Server`.
    5. Kliknij `Apply`.

      System włącza serwer WWW
  2. Prześlij niestandardowy plik szablonu aplikacji.
    1. Otwórz `File Station`.
    2. Przejdź do folderu `Web` utworzonego dla serwera WWW.

      GUID-718C9F83-7009-42D0-ADEA-8F00E56518E3-low.png
    3. Prześlij plik szablonu aplikacji.

Plik szablonu aplikacji staje się dostępny do użytku.

Uwaga:
Możesz sprawdzić, czy plik szablonu aplikacji jest dostępny, wprowadzając http://HOST_IP_ADDRESS:WEB_SERVER_PORT/TEMPLATE_FILENAME w przeglądarce internetowej. Na przykład: http://192.168.1.1:80/my-templates.json.

Dodawanie niestandardowego szablonu aplikacji do Container Station

Następnym krokiem jest dodanie niestandardowego pliku szablonu aplikacji do `Container Station`. Dzięki temu lista aplikacji staje się dostępna w `Container Station`.

  1. Uruchom `Container Station`.
  2. W menu kliknij `Preferences`.
  3. Przejdź do `App Templates`.
  4. Wybierz `Enable custom template`.
  5. Określ adres URL niestandardowego szablonu aplikacji.

    Uwaga:
    W zależności od konfiguracji, adres URL może wymagać podania adresu IP i numeru portu skonfigurowanego serwera WWW. Na przykład: http://192.168.1.1:30080/my-template-file.json.

    GUID-069F2C11-2E87-4BFB-9A00-1D6A4FF32BAE-low.png
  6. Kliknij `Apply`.

`Container Station` zapisuje niestandardowy szablon aplikacji.

Wdrażanie niestandardowego szablonu aplikacji

Ostatnim krokiem jest wdrożenie kontenera z niestandardowego pliku szablonu aplikacji, który dodano w poprzednim kroku.

  1. W menu przejdź do `App Templates`.
  2. Przejdź do zakładki `Custom Templates`.
  3. Zidentyfikuj szablon.

    GUID-C54D6580-E430-4476-BF55-C7DD9FD921E8-low.png
  4. Kliknij `Deploy`.

Otworzy się kreator `Deploy Container`. Zobacz Tworzenie kontenera Docker[/URL].