Riot Games

v tomto prvním tutoriálu v sérii Docker se dozvíte:

  • to, Co se snažíme dosáhnout v Riot

  • Základní nastavení pro Docker

  • Základní Docker Příkazy Pull

  • Jak spustit Docker Kontejnery jako Démonů

  • Základní Jenkins možnosti konfigurace

Když jsem poprvé začal učit o Docker před rokem a zkoumání jeho použití jsem měl problém najít skvělé dokumentaci a příklady – i dnes mnozí popisují jednoduché případy použití, které nakonec nejsou výroby připraven. Výroba aplikací s kontejnery Docker vyžaduje přizpůsobení jejich pomíjivé povaze a zaměření na jeden proces. To představuje výzvy pro aplikace s potřebami perzistence dat nebo architektury s více procesy.

jak jsem zmínil ve svém posledním příspěvku, používáme Jenkins jako základní kus open source softwaru, na jehož vrcholu budujeme naši automatizaci. Jenkins je také skvělá aplikace, která demonstruje jeden způsob, jak přemýšlet o „ukotvení“ vašich aplikací. Nasazujeme Jenkins s ohledem na tyto architektonické komponenty:

  • Jenkins master serveru (Java proces)

  • Jenkins kmenová data (Moduly, Definice úloh, atd)

  • NGINX web proxy (používáme SSL certifikáty atd., s NGINX je snadná volba zde)

  • Stavět otrok prostředky (stroje buď SSH bych do, nebo JNLP připojení, Jenkins Master)

To je dobré místo pro start. Po této sérii blogů budu týkající se způsoby, jak přemýšlet o tom, všechny výše uvedené jako kontejnery a dokončit s pokročilým podívejte se na způsoby, jak používat Docker kontejnery jako stavět otroky. Pro začátek vytvoříme Jenkins master server v kontejneru Docker. Pak přejdeme k řešení perzistence dat a přidání webového proxy s NGINX.

celá tato série blogů bude zahrnovat následující koncepty Docker:

  • Dělat své vlastní Dockerfiles

  • Minimalizace image závislosti na veřejné obrázky

  • Vytváření a používání Dat-Objemy, včetně zálohy

  • Vytváření kontejnerové „Budovat Prostředí“ pomocí kontejnerů

  • Zpracování „tajné“ údaje s obrázky a Jenkins

Pokud jste neužil podívejte se na Cloudbees Jenkins Docker image, začněte tam, jak je to opravdu docela dobré. To byl můj referenční bod, když jsem poprvé přemýšlel o spuštění Jenkinse v kontejneru Docker a pro mnoho lidí to může stačit. Jejich dokumentaci najdete zde a jejich repo / Dockerfile Git zde.

tento první blog je rozdělen do dvou plánů lekce. Každá z nich je dimenzována tak, aby trvala asi 30 minut. První na řadě je příprava vývojového prostředí a naučit se pracovat s výchozím kontejnerem Jenkins Docker, který Cloudbees nabízí. Druhá část je o základy, aby zabalit tento obrázek ve své vlastní Dockerfile a s více elegantní ovládání obrazu. Společně jsou navrženy tak, aby vám začal, a to zejména pokud jste nikdy nepracovali s Docker před, nebo jsou relativně nový Docker—i když předpokládají, že již víte, a pochopit, jak pracovat s Jenkins. Pokud máte zkušenosti s Docker, některé z materiálů v lekci 1 bude trochu rehash věcí, které pravděpodobně již víte.

Lekce 1: nastavte a spusťte svůj první obrázek

Pojďme vás připravit k hodu. Zde v Riot pracujeme s Docker (a Jenkins) na Windows, Mac OSX a Linux. Raději pracuji s Docker na OSX, i když je to dokonale funkční na Windows od Docker 1.6. V dnešní době existují vynikající instalátoři pro oba operační systémy. Budu pracovat z pohledu OSX, ale stejné nástroje existují pro Windows.

PŘEDBĚŽNÉ POŽADAVKY:

1. Budete potřebovat Windows 10 Pro nebo Mac OSX Yosemite 10.10.3 (nebo novější)

2. Pokud používáte Windows, budete muset ujistěte se, že máte Windows Virtualizace povoleno (viz dokumentace Docker poskytuje)

RYCHLÉ POZNÁMKY NA KITEMATIC

S Docker 1.8 a uvolnění Docker Toolbox, Docker nyní zahrnuje „Kitematic,“ šikovný GUI nástroj, který pomůže spravovat a vizualizovat to, co se děje s vaší Docker obrazů a kontejnerů. Většina tohoto tutoriálu se zaměřuje na použití argumentů příkazového řádku a práci s Dockerem bez KITEMATICKÉHO GUI. To vás lépe vystaví základním mechanismům. Stejně tak v pozdějších blogech začnu pokrývat použití Compose pro spuštění a zastavení více kontejnerů najednou.

KROK 1: NAINSTALUJTE DOCKER

1. Přejít na: https://www.docker.com/docker-mac nebo https://www.docker.com/docker-windows

2. Stáhněte a nainstalujte příslušnou verzi Docker pro váš operační systém

3. Postupujte podle všech pokynů k nastavení.

4. Ověřte, zda vaše instalace funguje, otevřením doporučeného shellu pro váš operační systém (terminál pro OSX, Powershell pro windows) spuštěním „Docker Quickstart Terminal“. V systému Windows to bude zástupce na ploše. V OSX jej najdete ve složce applications/Docker. Zkontrolujte následující příkazy a ujistěte se, že nemáte žádné chyby

docker ps
docker info

5. Než uděláme něco jiného, měli bychom zvýšit výchozí paměť a nastavení CPU Docker používá. Později budeme naladit Jenkins používat více paměti, a pokud nebudeme upravovat tato nastavení jako první, Jenkins může dojít k selhání.

  • Jdi do svého Docker widget ve vašem panelu nástrojů a vyberte „Preferences“

  • Přejít na Rozšířené kartu konfigurace

  • Zvýšení využití PROCESORU na alespoň 4 jádra

6. Zvýšení využití paměti alespoň na 8GB, pokud možno více, něco jako 12GB být v bezpečí (pokud ho máte k dispozici)

KROK 2: STÁHNOUT A SPUSTIT CLOUDBEES JENKINS KONTEJNER

1. Zůstaňte v okně terminálu Docker.

2. Vytáhněte Jenkins z veřejného repo spuštěním:

docker pull jenkins/jenkins
docker run -p 8080:8080 --name=jenkins-master jenkins/jenkins

3. Všimněte si, že zpráva „Jenkins initial setup“ v okně shellu vám vygeneruje heslo. Zapište si to, jak budete potřebovat později. Pokud ji ztratíte, můžete spustit `docker exec jenkins-master cat /var/jenkins_home/tajemství/initialAdminPassword` s vaší kontejneru běží, aby ji získali.

4. Otevřete svůj oblíbený prohlížeč a přejděte na http://localhost:8080

vezměte Prosím na vědomí, budete vidět, že jsem pomocí Docker-název, vlajka a název kontejneru jenkins-master – je to úmluva budu používat v celém tomto blogu. Pojmenování kontejnerů je užitečná osvědčená praxe se třemi výhodami:

1. To usnadňuje jejich zapamatování a interakci s

2. Docker neumožňuje, aby dva kontejnery měly stejný název, což zabraňuje chybám, jako je náhodné spuštění dvou identických

3. Mnoho běžných nástrojů Docker (jako je Docker Compose) používá konkrétní názvy kontejnerů, takže zvyknout si na pojmenování kontejnerů je dobrým osvědčeným postupem.

Krok 3: aby to trochu praktičtější

předchozí krok začíná Jenkins s jeho nejzákladnější nastavení spuštění. Můžete dokonce vidět, že Jenkins potřebuje základní konfiguraci a žádá vás o heslo správce (které můžete získat z protokolů zobrazených na obrazovce během spuštění). Pokud jste jako Riot, je nepravděpodobné, že spustíte Jenkins ve výchozím nastavení. Pojďme projít přidáním některých užitečných možností. Zatím se nebudeme obtěžovat konfigurací Jenkins; stačí vědět, že může začít a běžet.

krok 3A: DAEMONIZING

pravděpodobně nechcete vidět Jenkins protokoly chrlit standardní ven většinu času. Použijte příznak démona Dockeru pro spuštění kontejneru (- d).

1. Ctrl-c v okně terminálu se spuštěným kontejnerem jej zastaví

2. Spusťte následující příkazy

docker rm jenkins-master
docker run -p 8080:8080 --name=jenkins-master -d jenkins/jenkins

Nyní byste měli jen hash řetězec a zobrazí se vrátil k terminálu. Pokud jste nový Docker, že hash řetězec je vlastně jedinečný IDENTIFIKÁTOR vašeho kontejneru (užitečné, pokud začnete automatizaci těchto příkazů).

krok 3B: nastavení paměti

máme tendenci spouštět Jenkins s některými svalnatými nastaveními v Riotu. Nezapomeňte, když jste zvýšili CPU / Paměť Docker používá dříve? To je hlavní důvod, proč. Pro základní spuštění, spusťte následující příkazy

docker stop jenkins-master
docker rm jenkins-master
docker run -p 8080:8080 --name=jenkins-master -d --env JAVA_OPTS="-Xmx8192m" jenkins/jenkins

To by vám mělo dát Jenkins pěkné 8 GB paměti, bazén a pokoje zvládnout sběr odpadků.

krok 3C: zvýšením fondu připojení

v Riotu dostáváme na náš server Jenkins hodně provozu, takže jsme se naučili dát Jenkinsovi trochu více prostoru pro dýchání. Spusťte následující

docker stop jenkins-master
docker rm jenkins-master

to dá Jenkinsovi pěknou základnu psovodů a čepici. Shodou okolností jste se nyní naučili používat jak JAVA OPTS, tak JENKINS OPTS jako proměnné prostředí smysluplným způsobem. Vezměte prosím na vědomí, že to funguje kvůli tomu, jak Cloudbees pohodlně strukturoval svůj Jenkins Dockerfile.

KROK 4: DÁT TO VŠECHNO DOHROMADY

jsem umístil vše, co jsme se naučili tady do jednoduchého makefile, takže můžete použít, aby příkazy pro ovládání chodu Jenkins docker kontejneru. Najdete ji zde:

  • https://github.com/maxfields2000/docker Jenkins_tutorial/tree/master/tutorial_01

můžete použít následující příkazy:

  • make build – Táhne Jenkins obrázek

  • aby spustit – Spustí kontejner

  • stop – Zastaví nádoby

  • make clean – Zastaví a odstraní existující kontejner

nemusíte použít makefile, Jen jsem najít to jednodušší, než psát celý příkaz spustit. Místo toho byste je mohli snadno vložit do skriptu podle vašeho výběru.

doufejme, že uvidíte, jak snadné je vstát a běžet s Dockerem a Jenkinsem. Snažil jsem se vám dát několik základních možností, jak vzít výchozí kontejner Cloudbees Jenkins a učinit jej trochu použitelnějším. Cloudbees má mnoho užitečných návodů pro spuštění jejich kontejneru, například jak předinstalovat pluginy a ukládat data Jenkins.

to mě přivádí k budoucím příspěvkům na toto téma. Tento kontejner/obrázek je užitečné, ale má několik nevýhod: žádný konzistentní přihlášení, žádná vytrvalost, nic webového serveru proxy v přední části, a žádný čistý způsob, jak zaručit použití verze Jenkins chcete. To vyvolává otázky jako: co když se chcete držet starší verze? Nebo co když chcete použít nejnovější dostupné období vydání?

v další lekci se budu zabývat tím, že tento kontejner bude o něco robustnější. Zejména:

  • Vytváření vlastních Dockerfile zabalit Cloudbees base

  • Stěhování některé z proměnných prostředí na nový obrázek

  • Vytvoření protokolu složky, nastavení oprávnění a dalších užitečných Jenkins adresáře, a načítání Jenkins protokoly, zatímco to běží

LEKCE 2 – JENKINS ZÁKLADNÍ OBRÁZEK OBALU

V předchozí lekci jsem se zmínil nastavení vývojového prostředí pro běh Docker a experimentoval s Jenkins Docker image poskytována Cloudbees. Zjistili jsme, že to bylo jednoduché a snadno použitelné, s některými skvělými funkcemi po vybalení z krabice. Aby se pokrok ve zlepšení oblasti, které jsme identifikovali, Docker koncepty, které v této lekci jsou:

  • Dělat své vlastní Dockerfile

  • Nastavení proměnné prostředí v Dockerfile

  • Vytváření složek a oprávnění v Dockerfile

  • Pomocí docker exec spustit příkazy proti běhu kontejneru

TAKŽE VAŠE ZÁKLADNÍ DOCKERFILE

chceme, aby se nějaké změny, jak Jenkins se spustí ve výchozím nastavení. V posledním blogu jsme to řešili vytvořením makefile, který předával argumenty jako proměnné prostředí. Vzhledem k tomu, že to chceme dělat pokaždé, můžeme je přesunout do našeho vlastního Dockerfile. Navíc, naše vlastní Dockerfile nám umožní zamknout verze Jenkins používáme v případě, Cloudbees aktualizace jejich, a nejsme připraveni na upgrade.

děláme to ve čtyřech krocích:

1. Vytvořte pracovní adresář

2. Ve svém oblíbeném textovém editoru vytvořte nový soubor s názvem“Dockerfile“

3. Přidejte do souboru následující a uložte jej:

FROM jenkins/jenkins:2.112LABEL maintainer=""

4. Pak na příkazovém řádku zadejte:

docker build -t myjenkins .

Co jsme dělali tady, bylo získat konkrétní verzi Jenkins obrázek z veřejných docker repo. Všechny dostupné verze najdete zde:

  • klauzuli FROM můžete vždy nastavit tak, aby byla k dispozici jakákoli verze obrázku. Nemůžete však pouze nastavit verzi na jakoukoli verzi Jenkins, kterou chcete. Toto je verze obrázku “ tag „nebo“ label “ a Cloudbees je dost pěkný, aby odpovídal verzi Jenkins uvnitř obrázku. Cloudbees nabízí“ jenkins/jenkins “ jako pohodlný způsob, jak získat nejnovější verzi, nebo „jenkins/jenkins: lts“, abyste získali nejnovější verzi“ dlouhodobé podpory“. V tomto příkladu používám konkrétní verzi. Tyto tagy štítku typy zprávy jsou skvělé, ale jejich použití se rozumí verze Jenkins se může změnit pod vámi, což může způsobit komplikace, pokud jste nebyli připraveni na upgrade. Doporučuji „zamykání verzí“ jako obecný osvědčený postup při řešení závislostí v Dockeru nebo jiných nástrojích pro správu závislostí. Chcete, aby se věci změnily, když to máte v úmyslu, ne dříve. Proto zde používám konkrétní verzi.

    TESTOVÁNÍ NOVÉ DOCKERFILE

    můžeme přejít k obrazu velmi jednoduše tím, že mění naše docker spustit následující příkaz:

    docker run -p 8080:8080 --name=jenkins-master -d --env JAVA_OPTS="-Xmx8192m" --env JENKINS_OPTS=" --handlerCountMax=300" myjenkins

    Nyní můžeme vyčistění těchto proměnných prostředí tím, že umístí je v naší vlastní Dockerfile.

    přidání proměnných prostředí do našeho DOCKERFILE

    je snadné přidat výchozí nastavení pro věci, jako jsou proměnné prostředí do Dockerfiles. To také poskytuje pěkný kus vlastní dokumentace. A protože je můžete vždy přepsat při spuštění kontejneru Docker, neexistuje žádná nevýhoda.

    1. Do Dockerfile přidejte následující řádky za řádek „Správce“:

    ENV JAVA_OPTS="-Xmx8192m"ENV JENKINS_OPTS=" --handlerCountMax=300"

    2. Uložte a znovu vytvořte obrázek:

    • docker build-t myjenkins .

    docker build -t myjenkins .

    docela jednoduché! Můžete vyzkoušet, že stále funguje zadáním následujících tří příkazů:

    docker stop jenkins-master
    docker rm jenkins-master
    docker run -p 8080:8080 --name=jenkins-master -d myjenkins

    váš obrázek by měl začít hned! Ale jak víte, že proměnné prostředí fungovaly? Jednoduchý: stejným způsobem byste zkontrolovali, jaké argumenty spustily vaši aplikaci Jenkins normálně pomocí ps. A to funguje, i když vyvíjíte na Windows.

    BĚŽÍ ZÁKLADNÍ PŘÍKAZ PROTI svým KONTEJNER

    potvrdit, že Java a Jenkins možnosti jsou správně nastaveno, můžeme spustit ps v našem kontejneru a vidět běh Jenkins Java proces pomocí docker exec

    docker exec jenkins-master ps -ef | grep java

    měli Byste vidět něco podobného tomuto vrátit

    jenkins 1 0 99 21:28 ? 00:00:35 java -Xmx8192m -jar /usr/share/jenkins/jenkins.war --handlerCountMax=300

    Z tohoto, můžete snadno vidět naše nastavení se zasekl. docker exec je jednoduchý způsob, jak provádět příkazy shellu uvnitř kontejneru a také neuvěřitelně jednoduchý způsob, jak je zkontrolovat. To funguje i v systému Windows, protože nezapomeňte, že příkaz po „exec“ je spuštěn uvnitř kontejneru, a proto je založen na jakémkoli základním obrázku, který váš kontejner používá.

    NASTAVENÍ PROTOKOLU SLOŽKY

    V předchozím blogu jsme zjistili, že jsme ztratili viditelnost do Jenkins protokoly, když běží náš kontejner s daemonize vlajky (-d). Chceme použít vestavěnou funkci Jenkins k nastavení složky protokolu. Budeme to muset udělat v našem Dockerfile a pak předat možnost Protokolování Jenkinsovi.

    pojďme znovu upravit náš soubor Dockerfile. Mezi „správce“ a první řádek ENV přidáme následující

    RUN mkdir /var/log/jenkins

    umístíme příkaz na toto místo do souboru, abychom dodržovali osvědčené postupy. Je pravděpodobnější, že změníme proměnné prostředí než tyto instalační adresáře a každý příkazový řádek v souboru Dockerfile se v podstatě stává vlastní obrazovou vrstvou. Maximalizujete opětovné použití vrstvy umístěním často měněných položek v dolní části.

    nyní vytvořte svůj obrázek znovu:

    docker build -t myjenkins

    zobrazí se chyba, která vypadá

    ---> Running in 0b5ac2bce13bmkdir: cannot create directory '/var/log/jenkins': Permission denied

    bez obav. Je to proto, že výchozí kontejner Cloudbees nastaví běžícího uživatele na uživatele“ Jenkins“. Pokud se podíváte na jejich Dockerfile (nalézt zde: https://github.com/ Jenkinsci/docker/blob/master/Dockerfile), měli byste vidět, u dna

    USER ${user}

    Tato syntaxe může být trochu matoucí. Používá Docker sestavení „argumenty“, které vám umožní definovat uživatele. Pokud se podíváte dále do souboru Docker, najdete výchozí hodnotu. Podívejte se na horní část souboru Dockerfile pro

    ARG user=jenkins

    tím se vytvoří argument“ user “ (ARG) a nastaví se na uživatele Jenkins. To vám umožní změnit uživatelské jméno, které Jenkins používá při volání Docker build — build-arg somevariable=somevalue. Všimněte si, že to funguje pouze v případě, že stavíte soubor Dockerfile od nuly. Tyto hodnoty nelze změnit tahem Dockeru nebo spuštěním Dockeru. Více o sestavení argumentů si můžete přečíst zde. Protože v naší klauzuli od používáme přednastavenou verzi, skončíme s výchozím uživatelem: „jenkins“.

    v normálním Linuxu stačí použít SUDO nebo jiné prostředky k vytvoření složky (/var / log je ve vlastnictví root). Naštěstí pro nás Docker nám umožňuje přepínat uživatele.

    přidejte do Dockerfile následující:

    1. Před spuštěním mkdir linky přidat

    USER root

    2. Po spuštění mkdir řádku přidat

    RUN chown -R jenkins:jenkins /var/log/jenkins

    3. Po spuštění chown řádku přidat:

    USER jenkins

    Všimněte si, že jsme museli také přidat příkaz chown, protože chceme, aby uživatel Jenkins mohl zapisovat do složky. Dále nastavíme root a resetujeme Jenkins tak, aby bylo zachováno chování Dockerfile.

    nyní vytvořte svůj obrázek znovu:

    docker build -t myjenkins .

    a… vaše chyby by měly být pryč.

    adresář protokolu set (poznámka: můžete umístit tuto složku, kam chcete, budeme používat /var/log konzistence) nyní můžeme říct, Jenkins k zápisu do složky po spuštění úpravou JENKINS_OPTS proměnné prostředí.

    V Dockerfile upravit JENKINS_OPTS řádek vypadat takto:

    • ENV JENKINS_OPTS=“–handlerCountMax=300 –logfile=/var/log/jenkins/jenkins.log“

    ENV JENKINS_OPTS="--handlerCountMax=300 --logfile=/var/log/jenkins/jenkins.log"

    nyní vytvořte svůj obrázek ještě jednou

    docker build -t myjenkins .

    pojďme vyzkoušet náš nový obrázek a pokud můžeme sledovat soubor protokolu! Zkuste následující příkazy

    docker stop jenkins-master
    docker rm jenkins-master
    docker run -p 8080:8080 --name=jenkins-master -d myjenkins

    S kontejnerem běh můžeme sledovat v souboru protokolu, když všechno funguje

    docker exec jenkins-master tail -f /var/log/jenkins/jenkins.log

    NAČÍST PROTOKOLY, POKUD JENKINS PÁDY

    Čas pro bonusové kolo! Dokud diskutujeme o protokolech, Docker představuje zajímavý problém, pokud Jenkins havaruje. Kontejner přestane běžet a docker exec již nebude fungovat. Tak co dělat?

    budeme diskutovat o pokročilejší způsoby přetrvávání souboru protokolu později. Prozatím, protože je kontejner zastaven, můžeme z něj kopírovat soubory pomocí příkazu Docker cp. Simulujme pád zastavením kontejneru a načtením protokolů:

    1. ctrl-c pro ukončení z ocasu souboru protokolu

    2. Spusťte následující příkazy

    docker stop jenkins-master
    docker cp jenkins-master:/var/log/jenkins/jenkins.log jenkins.log
    cat jenkins.log

    ZÁVĚREČNÉ MYŠLENKY

    můžete najít všechny práce v mém tutoriálu Git repo (a aktualizované pohodlí makefile) zde:

    • https://github.com/maxfields2000/docker Jenkins_tutorial / strom / master / tutorial_02

    vytvořením vlastního souboru Dockerfile, který obaluje soubor Cloudbees, jsme si mohli trochu usnadnit život. Vytvořili jsme vhodné místo pro ukládání protokolů a naučili jsme se, jak se na ně dívat pomocí příkazu docker exec. Přesunuli jsme naše výchozí nastavení do souboru Dockerfile a nyní to můžeme uložit do zdrojového řízení jako dobrý kus vlastní dokumentace.

    stále máme problém s perzistencí dat. Naučili jsme se, jak vytáhnout soubory protokolu ze zastaveného kontejneru (užitečné, když Jenkins havaruje). Ale obecně, pokud se náš kontejner zastaví, stále přicházíme o všechna pracovní místa, která jsme vytvořili. Takže bez vytrvalosti je tento obraz Jenkins užitečný pouze pro místní rozvoj a testování.

    to nás vede k dalšímu článku. S našimi základy na místě-náš vlastní Dockerfile wrapper, uzamčen na praktickou verzi Jenkins – můžeme vyřešit problém perzistence. Následující článek prozkoumá tyto pojmy:

    • Zachování Jenkins Práci a Plugin údaje

    • Docker Datové Persistence s Svazků

    • Vytváření Dat-Objem nádoby

    • Sdílení datového objemu s další kontejnery

    Pro více informací, podívejte se na zbytek této série:

    Část I: Myšlení Uvnitř Kontejneru
    Část II: Uvedení Jenkins v Docker Kontejner (tento článek)
    Část III: Docker & Jenkins: Data, Která Přetrvává
    Část IV: Jenkins, Docker, Proxy, a Skládat
    Část V: Převzetí Kontroly nad Své Docker Image
    Část VI: Budování s Jenkins Uvnitř dočasný Docker Kontejner
    Část VII: Výuka: Budova s Jenkins Uvnitř dočasný Docker Kontejner
    Část VIII: DockerCon Mluvit a Příběh Tak Daleko

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.