Създаване на минимален Docker контейнер с nginx

  by    0   1

В предишните статии се запознахме с Docker и контейнеризиращата технология. В тях ви запознахме с основните принципи на работа на тази технология, предимствата ѝ, градивните ѝ елементи, както и защо бихме я използвали.

В днешната статия бихме искали да ви демонстрираме лесен пример за използването на Docker контейнерите със статичен сайт, визуализиран с помощта на nginx уеб сървър.

На кратко ще изпълним следните стъпки, описани в подробности в предстоящата статия:

  • Ще свалим официалното nginx изображение локално;
  • Ще използваме прост инструмент, с чиято помощ да намалим големината на nginx изображението и да го запазим под друго име;
  • Ще напишем прост Dockerfile, който на базата на новосъздаденото изображение, ще добави статично съдържание и указания с каква команда да се стартира контейнера.

 

За тези, които не знаят какво е nginx

Nginx

Nginx е уеб сървър, силно фокусиран върху високата паралелност, производителност и минималното използване на памет. Също така може да се използва като proxy сървър за HTTP, HTTPS, SMTP, POP3, и IMAP протоколи, а също и като load balancer и HTTP кеш. Работи под Linux, BSD варианти, Mac OS X, Solaris, AIX, HP-UX, както и с други *nix системи. Има работеща версия и за Microsoft Windows.

 

Време е да минем към примера 😉

Ще започнем създаването на минимален Docker контейнер, като за база ще използваме официалното Docker изображение на nginx: https://registry.hub.docker.com/_/nginx/.

Контейнерът използва за база Debian “Jessie” и добавя всички нужни файлове за функционирането на уеб сървъра. Това излишно увеличава големината на наличния контейнер:

docker images
nginx     latest    6886fb5a9b8d     13 days ago   132.8 MB

За контейнер, който няма да търпи промени (като цяло Docker контейнерите не са предназначени за извършване на промени по време на работата им) това е ненужно изразходвано пространство, което би забавило преместването на контейнера на друга машина, например.

За да намалим големината на нашия nginx контейнер до минимум, ще използваме проект с отворен код, наличен в Github:

git clone
cd strip-docker-image
 

Като за начало ще свалим nginx изображението:

docker pull nginx

След като е готово, можем да видим информация за него по следния начин:

docker images nginx

Използваме описания по-горе инструмент, за да премахнем ненужната информация от контейнера:

       ./strip-docker-image -i nginx -t stripped-nginx \
                                   -x 80 \
                                   -p nginx \
                                   -f /etc/passwd \
                                   -f /etc/group \
                                   -f '/lib/*/libnss*' \
                                   -f /bin/ls\
                                   -f /bin/cat\
                                   -f /bin/sh\
                                  -f /bin/mkdir\
                                   -f /bin/ps\
                                   -f /var/run\
                                   -f /var/log/nginx\
                                   -f /var/cache/nginx

При повторна проверка виждаме вече създадено новото изображение:

docker images
stripped-nginx     latest      13a553afa8bb       5 days ago         7.302 MB
nginx             latest       6886fb5a9b8d      13 days ago         132.8 MB

 

При налично базово изображение можем да продължим с изграждане на нашия Dockerfile, в който да опишем желаните промени, които да се случат при изграждане на финалния ни имидж.

       vim Dockerfile
       FROM stripped-nginx
       MAINTAINER Your Name <yourname@example.com>
       ADD web/ /usr/share/nginx/html/
       EXPOSE 80
       ENTRYPOINT ["/usr/sbin/nginx", "-g","daemon off;"]

 

С горния Dockerfile казваме на Docker да използва предварително създадения от нас имидж stripped-nginx като база, добавяме информация за създателя на контейнера и директория web/ и файлове default.conf и nginx.conf от текущата директория към указаните пътища в нашия контейнер. След това задаваме на Docker да направи портове 80 и 443 на контейнера достъпни. Последният ред стартира nginx уеб сървъра при стартиране на контейнера.

За да има какво да визуализира нашият уеб сървър, трябва да добавим съдържание в директория web/. Тъй като за нашия пример контейнерът ни не разполага с PHP ще използваме статична уеб страница, генерирана с помощта на Hugo. Вече генерираните файлове може да изтеглите от ТУК и да разархивирате в директорията с вашия Dockerfile.

wget 
tar -xf web.tar.gz

След разархивиране директорията трябва да изглежда по следния начин:

ls 
       Dockerfile strip-docker-image web web.tar.gz

След като всичко е готово може да създадем нашия контейнер през Docker:

       docker build -t username/container .

Docker съответно изгражда контейнера и го запазва локално. За да го стартираме, изпълняваме:

       docker run --name web -d -p 80:80 username/container 

За да отворим вече стартирания сайт, е нужно да насочим локално чрез hosts файл IP адреса на Docker host машината (машината, на която сме стартирали контейнера) към домейн hugo.loc (за да се визуализира правилно форматирането).

Ако и вие искате да създадете вашия пръв Docker контейнер, не се колебайте да заявите безплатно вашия Docker хостинг! 

 Заяви


Подобни публикации

Какво е уеб хостинг?

web-hosting-300-262Всеки ден включваме компютъра и влизаме в множество сайтове – четем новини, проверяваме пощата си, разглеждаме социалните медии, слушаме музика, без да се замисляме какво стои зад тях. Когато решим, че искаме и ние да имаме собствен уеб сайт, се замисляме как се справят другите с тази задача. Първоначално ни се струва трудно, но този […]


Прочети повече →

Какво е Google AdWords и какви са предимствата на онлайн рекламата?

GoogleAds-300-262През последното деситилетие бизнесът засили своето присъствие в Мрежата и вече почти няма българска компания, която да не представя своите продукти и услуги в интернет пространството. Става все по-удобно да се рекламира онлайн и с малко бюджет да достигате хиляди потребители ежедневно. Google AdWords прави задачата още по-лесна и ви позволява да таргетирате правилните хора и да […]


Прочети повече →

Уебинар: „Как да изградим AdWords кампания, която да генерира печалби?“

Webinar-GoogleAds-300-262Имаме удоволствието да ви поканим на нашия безплатен уебинар на тема „Как да изградим AdWords кампания, която да генерира печалби?“ , където ще разберете повече за един от най-мощните маркетингови инструменти в съвременния технологичен свят. Уебинарът е с практическа насоченост и ще ви помогне да създадете своя първа рекламна кампания в Google, да я управлявате […]


Прочети повече →

Инфографика: WordPress vs. Joomla vs. Drupal

asdВсички обичаме детайлни и информативни инфографики, а тази направена от Skilled.co е точно такава. Сравнението между най-популярните CMS платформи – WordPress, Joomla и Drupal ще ви помогне да изберете най-подходящата платформа за новия ви уебсайт. Критериите за сравнение са характеристики като сигурност, време за инсталация, функционалности, теми и плъгини и нужни умения за използването им.


Прочети повече →

Уебинар „Как да си направиш сайт: Първи стъпки“ – Въпроси и отговори

Webinar-First-steps-WP-300-262„Как да си направиш сайт първи: Първи стъпки“ събра на 21.02.2017 г. в платформата на Webinaria.bg уеб ентусиасти и желаещи да стартират своето първо WordPress приключение съвсем сами. Безплатния уебинар, организиран от хостинг компания ICN.Bg с любезното съдействие на нашите партньори и приятели от Webinaria.bg, се води от Любо Николов, който е основател на онлайн […]


Прочети повече →