Web-сервер. Образы Docker в GNS3. Часть 1
Очень часто, при работе в GNS3, возникает необходимость эмулировать те или иные сервисы ЛВС, например, почтовый или веб-сервер. Конечно, можно установить полноценную виртуальную машину с дистрибутивом Linux и настроить всё нужные сервисы, но это потребует много оперативной памяти, вычислительный мощностей и времени.
Альтернативой является Docker. Его образы - это просто папки с файлами, которые содержат файлы с программой и требуемые библиотеки. Все это выполняется в специально настроенной виртуальной машине под Windows при помощи демона Docker или в рамках того же демона нативно под Linux.
Так как, не происходит полной загрузки операционной системы, экономятся ресурсы и оперативная память. Каждый контейнер изолирован от операционной системы и других контейнеров, таким образом повышается безопасность.
Сегодня мы рассмотрим добавление контейнера Docker в GNS3 для эмуляции web-сервера.
Работать мы будем внутри виртуальной машины GNS3. Для этого присоединимся к ней по ssh через putty.
Имя пользователя gns3
Пароль gns3
После запуска откроется интерфейс GNS3
Нажмем Enter
Выберем пункт Shell
Мы перешли в режим командной строки
Проверим содержимое домашней папки
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
Теперь добавим в файл следующие строки
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-адрес сервера:
Вот мы успешно и запустили наш первый образ 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
Выберем New image и введем в поле Image name строку
skyr9999/nginx-docker:latest
Далее
В поле Name введем
Web-server Nginx
Adapters – 1
Start command введем
nginx -g "daemon off;"
Next
Next
Finish
Перетащим Web-server Nginx, запустим его.
Правой кнопкой мыши щёлкнем по узлу и выберем Edit config
Приведем конфиг к виду:
auto eth0
iface eth0 inet static
address 172.16.100.50
netmask 255.255.255.0
Нажмем Save
Добавим Cloud и соединим с узлом и запустим:
Откроем 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
Пинг есть.
В браузере на ПК откроем адрес
Теперь у нас есть свой легкий виртуальный web-сервер.
Заключение
Сегодня мы рассмотрели создание образа Docker на сервере GNS3.
Мы создали и запустили образ.
Добавили образ в клиент GNS3 и указали ip-адрес для доступа.
Проверили доступность web-сервера со своего ПК.
В следующей статье мы рассмотрим настройку SSH-сервера в контейнере докер.
Добавить комментарий