Web-сервер. Образы Docker в GNS3. Часть 1 - АлтунинВВ.Блог - всё об IT-технологиях!
Понедельник, 14 сентября 2020 19:00

Web-сервер. Образы Docker в GNS3. Часть 1

Россия
Оцените материал
(0 голосов)

Очень часто, при работе в GNS3, возникает необходимость эмулировать те или иные сервисы ЛВС, например, почтовый или веб-сервер. Конечно, можно установить полноценную виртуальную машину с дистрибутивом Linux и настроить всё нужные сервисы, но это потребует много оперативной памяти, вычислительный мощностей и времени.

Альтернативой является Docker. Его образы - это просто папки с файлами, которые содержат файлы с программой и требуемые библиотеки. Все это выполняется в специально настроенной виртуальной машине под Windows при помощи демона Docker или в рамках того же демона нативно под Linux.

Так как, не происходит полной загрузки операционной системы, экономятся ресурсы и оперативная память. Каждый контейнер изолирован от операционной системы и других контейнеров, таким образом повышается безопасность.

Сегодня мы рассмотрим добавление контейнера Docker в GNS3 для эмуляции web-сервера.

Работать мы будем внутри виртуальной машины GNS3. Для этого присоединимся к ней по ssh через putty.

Имя пользователя gns3

Пароль gns3

После запуска откроется интерфейс GNS3

2020-09-14_10-09-07.png

Нажмем Enter

Выберем пункт Shell

2020-09-14_10-10-10.png

Мы перешли в режим командной строки

Проверим содержимое домашней папки

gns3@gns3vm:~$ ls

GNS3  gns3-server

Создадим папку для нашего будущего образа:

gns3@gns3vm:~$ mkdir nginx-docker
gns3@gns3vm:~$ cd nginx-docker/
gns3@gns3vm:~/nginx-docker$

Создадим в папке файл Dockerfile

gns3@gns3vm:~/nginx-docker$ touch Dockerfile
gns3@gns3vm:~/nginx-docker$ ls
Dockerfile

Обратите внимание первая буква обязательно должна быть большой!

Я привык использовать mc для работы с текстом в linux, так что давайте поставим его:

sudo apt install mc

2020-09-14_10-15-35.png

Теперь добавим в файл следующие строки

FROM alpine:3.12

# install packages

RUN apk add --no-cache --upgrade nginx

RUN mkdir -p /run/nginx
RUN mkdir -p /etc/nginx
RUN mkdir -p /var/www

COPY nginx.conf /etc/nginx/
COPY index.html /var/www

CMD ["nginx", "-g", "daemon off;"]

Здесь мы создали все необходимые папки, а так же задали команды для копирования файлов и запуска самого nginx

Так же нам понадобится файл с конфигурацией nginx, вы можете воспользоваться онлайн конфигуратором, например этим.

Создадим файл

touch nginx.conf

И вставим содержимое:

events {
}
http {
server {
    listen      80 default_server;
    root        /var/www;
}
}

Так же нам понадобиться html страница, чтобы отличать наш сервер от остальных:

touch index.html

Вставим содержимое

<html>
<body>
<h1>I am a GNS3 Docker WEB server!</h1>
</body>
</html>

Если вы собираетесь работать с Docker вам лучше всего зарегистрироваться на hub.docker.com

При регистрации вы создадите Docker Hub Id у меня он skyr9999

Для того, чтобы избежать конфликтов имен всегда используйте свой ID при создании контейнеров! Обязательно заменяйте мой ID skyr9999 на свой, если создаете собственные образы! Иначе Docker просто скачает мой образ с Docker Hub.

Создадим контейнер:

gns3@gns3vm:~/nginx-docker$ docker build -t skyr9999/nginx-docker .
Sending build context to Docker daemon  4.096kB
Step 1/8 : FROM alpine:3.12
 ---> a24bb4013296
Step 2/8 : RUN apk add --no-cache --upgrade nginx
 ---> Using cache
 ---> 136e626df7dc
Step 3/8 : RUN mkdir -p /run/nginx
 ---> Using cache
 ---> a6ebbea376b3
Step 4/8 : RUN mkdir -p /etc/nginx
 ---> Using cache
 ---> 8110fa78e555
Step 5/8 : RUN mkdir -p /var/www
 ---> Using cache
 ---> 9bf8d7fffcd6
Step 6/8 : COPY nginx.conf /etc/nginx/
 ---> 19e982e71772
Step 7/8 : COPY index.html /var/www
 ---> fde311147e42
Step 8/8 : CMD ["nginx", "-g", "daemon off;"]
 ---> Running in c496fcca984c
Removing intermediate container c496fcca984c
 ---> 02c7961d7151
Successfully built 02c7961d7151
Successfully tagged skyr9999/nginx-docker:latest

Docker сам скачает все необходимые файлы или будет использовать данные из кэша.

Давайте запустим контейнер:

docker run -p 8888:80 skyr9999/nginx-docker:latest

Теперь откроем в браузере сайт, используя ip-адрес сервера:

2020-09-14_12-09-22.png

Вот мы успешно и запустили наш первый образ Docker

Нажмем в putty ctrl+c и посмотрим список образов:

docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
skyr9999/nginx-docker   latest              02c7961d7151        9 minutes ago       8.66MB
gns3/chromium           latest              36ba9f2d0265        6 days ago          738MB
gns3/openvswitch        latest              ac3ce858e2d0        2 weeks ago         15.2MB
alpine                  3.12                a24bb4013296        3 months ago        5.57MB

Как видите в списке есть наш образ

skyr9999/nginx-docker

 Всё работает, но есть небольшая проблема – нам нужен образ, который бы имел собственный ip-адрес, чтобы его можно было использовать для эмуляции веб-сервера.

К счастью, для нас, этим будет заниматься сам GNS3-сервер.

Запустим GNS3-клиент, перейдем в настройки Edit -> Preferences

Выберем Docker containers и нажмем New

2020-09-14_14-34-27.png

Выберем New image и введем в поле Image name строку

skyr9999/nginx-docker:latest

2020-09-14_14-36-14.png

Далее

В поле Name введем

Web-server Nginx

Adapters – 1

Start command введем

nginx -g "daemon off;"

Next

Next

Finish

Перетащим Web-server Nginx, запустим его.

Правой кнопкой мыши щёлкнем по узлу и выберем Edit config

2020-09-14_14-42-24.png

Приведем конфиг к виду: 

auto eth0
iface eth0 inet static
address 172.16.100.50
netmask 255.255.255.0

Нажмем Save

Добавим Cloud и соединим с узлом и запустим:

2020-09-14_14-47-42.png

Откроем Auxiliary console узла

/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00	
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
105: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN qlen 1000
    link/ether fa:52:a2:4d:48:76 brd ff:ff:ff:ff:ff:ff
    inet 172.16.100.50/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f852:a2ff:fe4d:4876/64 scope link
       valid_lft forever preferred_lft forever
/ #

Ip-адрес прописан

Пропингуем наш ПК

/ # ping 172.16.100.254
PING 172.16.100.254 (172.16.100.254): 56 data bytes
64 bytes from 172.16.100.254: seq=0 ttl=128 time=0.740 ms
64 bytes from 172.16.100.254: seq=1 ttl=128 time=0.444 ms
64 bytes from 172.16.100.254: seq=2 ttl=128 time=0.337 ms
64 bytes from 172.16.100.254: seq=3 ttl=128 time=0.297 ms
^C
--- 172.16.100.254 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.297/0.454/0.740 ms

Пинг есть.

В браузере на ПК откроем адрес 

2020-09-14_14-50-20.png

Теперь у нас есть свой легкий виртуальный web-сервер.

Заключение

Сегодня мы рассмотрели создание образа Docker на сервере GNS3.

Мы создали и запустили образ.

Добавили образ в клиент GNS3 и указали ip-адрес для доступа.

Проверили доступность web-сервера со своего ПК.

В следующей статье мы рассмотрим настройку SSH-сервера в контейнере докер.

Прочитано 223 раз Последнее изменение Среда, 16 сентября 2020 12:12