# Что такое Docker

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

{% hint style="info" %}
Если вы хотите быстро ознакомиться с контейнерами, мы настоятельно рекомендуем [это короткое видео](https://www.youtube.com/watch?v=J0NuOlA2xDc\&ab_channel=Coderized).
{% endhint %}

<figure><img src="https://3845012722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsR0dHSFv9ymoC0DO5G8J%2Fuploads%2Fgit-blob-e6111f686dccc8bebc29f2f10fe2ce093f9c2b9c%2Fdocker.png?alt=media" alt=""><figcaption></figcaption></figure>

### **Что такое Docker?**

* Docker — это PaaS (Платформа как услуга), которая позволяет реализовать виртуализацию на уровне ОС.

### **Что такое команда Docker Run?**

* Команда docker run позволяет создать контейнер из образа, чтобы движок Docker Desktop мог запустить контейнер.

### **Попробуйте**

Давайте начнём с добавления инструментов, которые понадобятся на вашем компьютере для создания первого контейнера.

Вы можете следовать процедуре установки, указанной для Docker Desktop.

если вы используете [Windows 10 Pro](https://docs.docker.com/docker-for-windows/install/) Если вы используете [Windows 10 Home Edition](https://docs.docker.com/docker-for-windows/install-windows-home/) Если вы используете [macOS](https://docs.docker.com/docker-for-mac/install/)

Теперь, когда на вашей локальной машине запущен Docker, мы можем начать с простого «hello world».

```sh
docker run -d -p 80:80 --name speedtest edgegap/speedtest-edge
```

Вы можете открыть командную строку и ввести приведённую выше команду.

Шаги выполнятся автоматически.

1. Загрузка контейнера из репозитория Edgegap (только в первый раз)
2. Запуск контейнера
3. Имя будет speedtest (--name)
4. Чтобы открыть доступ к вашему контейнеру, нужно указать это в команде docker run. В этом примере мы пробрасываем порт 80 снаружи на порт 80 внутри контейнера (-p).
5. Вы можете проверить это, открыв веб-браузер и перейдя по адресу [http://localhost](http://localhost/)
6. Вот и всё, вы запустили свой первый контейнер.

Теперь, когда ваш контейнер запущен, вы можете взаимодействовать с ним. Мы перезапустим контейнер, остановим его и посмотрим его сеть в следующем разделе. Сначала вам нужно локально посмотреть, что запущено в вашем docker-движке — в командной строке введите.

```sh
docker ps
```

Вы должны увидеть нечто похожее.

```
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                NAMES
dbf4d3734111        edgegap/speedtest-edge   "docker-php-entrypoi…"   29 minutes ago      Up 29 minutes       0.0.0.0:80->80/tcp   speedtest
```

Вы визуально видите информацию о контейнере, запущенном на вашем компьютере; в этом списке может быть более одного запущенного контейнера.

`docker ps` — простая команда; вы научитесь пользоваться ей много.

Допустим, вам нужно получить больше информации о запущенном контейнере. Вы можете попросить docker-движок предоставить все детали о вашем контейнере, выполнив следующую команду:

```sh
docker container inspect speedtest
```

Если вы хотите увидеть внутреннюю сеть, созданную docker-движком, вы можете сделать это, выполнив следующую команду.

```sh
docker network ls
```

Вы получите нечто подобное:

```
NETWORK ID          NAME                DRIVER              SCOPE
67b24038b9ca        bridge              bridge              local
6f7fe43a489d        host                host                local
3d80cdb86a7e        none                null                local
```

Если вы хотите глубже изучить конфигурацию сети, вы можете выполнить следующую команду:

```sh
docker network inspect 67b24038b9ca
# где 678b24038b9ca — это ваша сеть, подключённая к контейнеру
```

Остановка Docker

Теперь, когда вы запустили контейнер, вы можете остановить его с помощью:

```sh
docker container stop speedtest
```
