Гибридный гипервизор состоит из двух частей: из тонкого гипервизора, контролирующего процессор и память, а также специальной служебной ОС, работающей под его управлением в кольце пониженного уровня. Через служебную ОС гостевые ОС получают доступ к физическому оборудованию.
Примеры: Microsoft Virtual Server[en], Sun Logical Domains, Xen, Citrix XenServer, Microsoft Hyper-V, VMware Workstation, OVirt.
Примеры: Microsoft Virtual Server, Sun Logical Domains, Xen, Citrix XenServer, Microsoft Hyper-V, VMware Workstation, OVirt.
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```
Проверьте, что в файле `/etc/apt/sources.list.d/docker.list` строка репозитория правильная
```
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bullseye stable
```
Установите Docker
```
sudo apt-get update
@ -44,7 +49,7 @@ $ docker pull busybox
**Внимание.** В зависимости от того, как вы установили Docker, вы можете увидеть сообщение permission denied (доступ запрещён) в ответ на вызов выше приведённой команды. Если вы на Mac, убедитесь, что Docker движок запущен. Если на Линукс, вам может потребоваться повысить права доступа с помощью команды `sudo`. В качестве альтернативного варианта вы можете добавить пользователя в Docker группу для решения этой проблемы.
Команда `pull` скачивает образ `busybox` из Docker реестра и сохраняет его в систему. Вы можете использовать команду docker images для вывода в консоль списка образов находящихся в вашей системе.
Команда `pull` скачивает образ `busybox` из Docker реестра и сохраняет его в систему. Вы можете использовать команду `docker images` для вывода в консоль списка образов находящихся в вашей системе.
```
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
@ -55,7 +60,7 @@ hello-world latest 48b5124b2768 2 months ago
### 1.1 Запуск Docker
Великолепно! Теперь перейдём к запуску контейнера на основе этого образа. Для этого мы воспользуемся всемогущей командой docker run.
Великолепно! Теперь перейдём к запуску контейнера на основе этого образа. Для этого мы воспользуемся всемогущей командой `docker run`.
Давайте начнем с малого. Вначале рассмотрим самый простой статический веб-сайт на nginx. Скачаем образ из Docker Hub, запустим контейнер и посмотрим, насколько легко будет запустить веб-сервер.
Поехали. Для одностраничного сайта нам понадобится заранее созданный образ и размещённый в реестре - nginx:latest. Можно запустить образ напрямую командой `docker run`.
Поехали. Для одностраничного сайта нам понадобится заранее созданный образ и размещённый в реестре - `nginx:latest`. Можно запустить образ напрямую командой `docker run`.
```
$ docker run nginx:latest
```
@ -269,11 +274,11 @@ EXPOSE 5000
CMD ["python", "./app.py"]
```
Теперь можно создать образ. Команда `docker build` занимается сложной задачей создания образа на основе Dockerfile.
Теперь можно создать образ. Команда `docker build` занимается сложной задачей создания образа на основе `Dockerfile`.
Листинг ниже демонстрирует процесс. Перед тем, как запустите команду сами (не забудьте точку в конце), проверьте, чтобы там был ваш username. Username должен соответствовать тому, что использовался при регистрации на Docker hub. Если вы еще не регистрировались, то сделайте это до выполнения команды.
Команда `docker build` довольно проста: она принимает опциональный тег с флагом `-t имя_пользователя/имя_образа` и путь до директории, в которой лежит Dockerfile.
Команда `docker build` довольно проста: она принимает опциональный тег с флагом `-t имя_пользователя/имя_образа` и путь до директории, в которой лежит `Dockerfile`.
```
$ docker build -t имя_пользователя/имя_образа ./
Sending build context to Docker daemon 8.704 kB
@ -447,7 +452,11 @@ c31bf3beb299 elasticsearch "/docker-entrypoin..." 2 hours ago
Итак, у нас есть контейнер ES по любому локальному адресу (0.0.0.0) и порту 9200, и мы можем напрямую обращаться к нему. Если можно было бы сообщить нашему приложению подключаться к этому адресу, то оно сможет общаться с ES, верно? Давайте взглянем на код на Питоне, туда, где описано подключение.
```
es = Elasticsearch(host='es')
es = Elasticsearch(
f"{es_scheme}://{es_host}:{es_port}",
basic_auth=(es_user, es_password),
verify_certs=False
)
```
Для того, чтобы это заработало, нужно запустить Flask контейнер на том же хосте, что и контейнер ES, и всё заработает, да? К сожалению, нет, потому что контейнер ES доступен по адресу хост-машины только с хост-машины. Другой контейнер не сможет обратиться по этому адресу. Ладно, если не этот адрес, то какой тогда адрес нужно использовать для работы с контейнером ES? Рады, что вы спросили.