Protože jsem si všiml, že se námi připravovaná aplikace výrazně rozšířila, rozhodl jsem se najít zcela novou metodu automatizace procesu jejího spuštění. Bylo pro mě důležité najít řešení, které by umožnilo aktivovat nové funkce izolovaně.
Úvod
Objevení jednodušší metody automatizace procesů by znamenalo výrazné zlepšení mé práce i práce celého mého týmu. tým. Napadlo mě: "Proč nepoužít Docker?"
Během přípravné fáze jsem vytvořil dvě nastavení: jedno pro front-endovou aplikaci a druhé pro API. Níže si můžete prohlédnout prezentaci toho, co jsem se během ní naučil. proces vývoje.
První problém
Chci mít v kontejneru klonované úložiště, proto jsem přidal ssh klíč pomocí příkazu ADD v souboru Dockerfile:
PŘIDAT ~/.ssh/testowy
A bum! Soubor nebyl nalezen. Proč?
Předpokládejme, že máme následující strukturu složek:
docker/
|-- stuff/
|-- test.txt
|-- Dockerfile
server/
|-- data
|-- setup.yml
Spustit příkaz sestavit v login-queue a můžete přidávat pouze soubory z místní složky a jejích místních podsložek, např. věci.
Pokud chcete přidat server se zobrazí zpráva: "nelze připravit kontext".
Dockerignore
Přemýšleli jste někdy o tom, proč se obraz vytváří tak dlouho? Možná jste nepoužili .dockerignore, aby se ignorovaly soubory, které nejsou v obrázku nutné. Na adrese .git by měla být automaticky odstraněna, stejně jako všechny dočasné soubory.
Pořadí příkazů v souboru Docker
Docker uloží každý řádek do souboru Dockerfile a po sestavení je každý řádek uložen jako vrstva. Je velmi důležité neměnit pořadí jednotlivých příkazů příliš často.
Z ubuntu
Spustit apt-get install -y software-properties-common python
RUN add-apt-repository ppa:chris-lea/node.js
RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ precise universe" >> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nodejs
RUN apt-get install -y nodejs=0.6.12~dfsg1-1ubuntu1
RUN mkdir /var/www
PŘIDAT app.js /var/www/app.js
CMD ["/usr/bin/node", "/var/www/app.js"]
Pokud například změníte poslední řádek v souboru Dockerfile, všechny předchozí řádky budou staženy z mezipaměti, zatímco poslední řádek bude změněn. Pokud nahradíte řádek č. 4, budou upraveny všechny řádky počínaje řádkem 4 až do konce. Z tohoto důvodu se vyplatí umístit příkazy, které se nebudou měnit, na začátek souboru.
Kopírování souborů do obrazu
Stojí za to zvážit, k čemu bude daný obrázek použit. Pokud jej potřebujete ke spuštění služby jen jednou, stačí zkopírovat soubor kód obsah přímo do obrázku:
KOPIE . /workdir
Bohužel to znemožňuje úpravu souborů a pokaždé, když chcete upravit kód, musíte obraz vytvořit znovu.
Pokud používáte systém MacOS a chcete používat sestavenou bitovou kopii pro vývoj, musíte k této záležitosti přistupovat trochu jinak. Pokud budete používat svazky, pak se musíte připravit na to, že se jedná o extrémně pomalé řešení (např. kopírování souboru z hostitele do kontejneru probíhá rychlostí 4,5 MB/s, zatímco kopírování uvnitř kontejneru rychlostí 10-20x vyšší). Naštěstí, jak můžete vidět na odkaz, je tento problém znám a jeho řešení je klíčovou otázkou pro tým odpovědný za vývoj Dockeru pro Mac.
Jak můžete v této situaci použít Docker pro vývoj?
Můžete jej použít pro externí služby, např. Redis/PSQL/Elasticsearch, nebo použít hotová řešení, která nabízejí rsync: https://github.com/brikis98/docker-osx-dev
Shrnuto a podtrženo
Pokud máte velký tým a chcete otestovat novou funkci, docker bude ideálním nástrojem! Nicméně, použil bych ho pro produkční spuštění serveru? Zatím o tom nejsem zcela přesvědčen...
Dále doporučuji několik vynikajících článků: