Създаване на минимален 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 хостинг! 

 Заяви


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

Каква е разликата между уеб мейл и имейл клиент?

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


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

Най-добрите плъгини в WordPress – Част 1

wp-plugins-300-262-02Плъгините в WordPress са една честа тема за разговор от феновете на платформата. Кои да добавим? Кои ще са полезни за целта на уебсайта ни? Има ли плъгин, който може да реши наш конкретен проблем? В тази поредица от статии ще разгледаме едни от най-полезните WordPress плъгини, които могат да са от изключително значение за […]


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

Какво е уеб сайт?

web-site-300-262В днешния мобилен и технологичен свят бизнесът има силно присъствие в Интернет. Ако вие имате компания, но нямате уеб сайт, то на практика бизнесът ви се дефинира като изцяло “офлайн” и ограничавате достъпа на клиентите си до вашите продукти и услуги. Но защо да се възползвате от това да сте в Мрежата и какви са възможностите, […]


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

Съвети за подобряването скоростта на сайта ви

web-site-speed-300-262Преди SEO oптимизацията на сайта ви има едно важно нещо, за което е нужно да се погрижите. То е не по-малко наложащо и е от основно значение за Google ранкинга на уебсайта. Добре структурираният сайт със скоростно зареждане е от основно значение за качествения user experience. Една от първите оптимизации, които трябва да направите за […]


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

Подобряване производителността на сайта ви с ActiveCache – статистика и тестове

ActiveCache-300-262Статистиката ни показва, че вече голяма част от нашите клиенти са активирали ActiveCache – инструмента, който предостави бързина на сайта ви и помогна за ефективното използване на хостинг ресурсите. Производителността на тези уебсайтове се повиши благодарение на кеширащите системи, който се активират с помощта на ActiveCache – Redis и Memcached. В тази статия ще ви […]


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