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

 Заяви


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

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

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


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

Как ефективно да планирате новия си уебсайт?

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


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

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

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


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

Кои са видовете хостинг?

web-hosting-types-300-262 (1)Всички сайтове, които посещавате, независимо дали Facebook, онлайн магазин, блог или пък имейл доставчика ви, използват хостинг. Хостингът е една от тези сфери, в които човек лесно може да се „изгуби“, ако няма правилната „карта“. За да ви ориентираме в множеството различни услуги, сме ви подготвили полезна статия, която ще ви въведе в спецификите на […]


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

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

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


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