В последней статье, которую я опубликовал не так давно, я показал, как запустить Docker в подсистеме Windows для Linux (WSL). Но потом я понял, было бы неплохо показать, как начать. Итак, я делаю это простое руководство о том, как запустить контейнер MySQL и подключиться к нему в качестве примера.
Я сказал просто, но мне не нравится делать «гайд» без какого-либо обзора или какого-то контекста, так что поехали.
Во-первых, нам нужно изображение.
Образы Docker являются основой контейнеров. Образ — это упорядоченный набор изменений корневой файловой системы и соответствующих параметров выполнения для использования в среде выполнения контейнера. Образ обычно содержит объединение многоуровневых файловых систем, расположенных друг над другом. Изображение не имеет состояния и никогда не меняется.
Да… конечно… но что такое контейнер?
Контейнер — это экземпляр образа докера во время выполнения.
Контейнер Docker состоит из
Докер-образ
Среда выполнения
Стандартный набор инструкций
Концепция заимствована из транспортных контейнеров, которые определяют стандарт для доставки товаров по всему миру. Docker определяет стандарт для поставки программного обеспечения.
Подробнее об этой терминологии можно узнать в глоссарии документации Docker.
Мы можем получить все виды образов из Docker Hub. Вы можете скачать любое изображение командой docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Например, мы будем получать образ MySQL с помощью команды docker pull mysql.
Если вам нужна конкретная версия, просто укажите ее тегом, например, docker pull mysql:5.7
Для получения дополнительной информации об образах, таких как доступные версии, проверьте его страницу на Docker Hub, нашей будет MySQL.
А для получения дополнительной информации о команде pull ознакомьтесь с документацией Docker об этом.
Теперь, когда мы получили наш образ, мы запустим наш контейнер с командой, не сбивайтесь с толку, run или docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] в его «полной форме».
Шутки шутками, это одна из самых важных команд в Docker, поэтому предлагаю почитать документацию по этой команде.
Кратко об анатомии docker run:
В команде
docker runнеобходимо указать IMAGE, из которого будет создан контейнер. Разработчик изображения может определить параметры изображения по умолчанию, связанные с:
- отдельно или на переднем плане работает
- идентификация контейнера
- Настройки сети
- ограничения времени выполнения на процессор и память
С помощью
docker run [OPTIONS]оператор может добавлять или переопределять параметры изображения по умолчанию, установленные разработчиком. Кроме того, операторы могут переопределить почти все значения по умолчанию, установленные самой средой выполнения Docker. Благодаря способности оператора переопределять образ и значения по умолчанию среды выполнения Dockerrunимеет больше параметров, чем любая другая командаdocker.
Теперь давайте запустим наш контейнер!
Мы запустим наш контейнер с помощью следующей команды и с этими параметрами:
docker run --name wsl-mysql-test -e MYSQL_ROOT_PASSWORD=admin -p "3306:3306" mysql:latest
Объяснение используемых опций:
-- имя: идентификаторы UUID исходят от демона Docker. Если вы не назначите имя контейнера с опцией
--name, демон сгенерирует для вас случайное строковое имя. Определениеnameможет быть удобным способом добавить смысл контейнеру. Если вы укажетеname, вы можете использовать его при ссылке на контейнер в сети Docker. Это работает как для фоновых, так и для передних контейнеров Docker.
-e: оператор может установить любую переменную среды в контейнере, используя один или несколько флагов
-e.
-p: чтобы открыть внутренний порт контейнера, оператор может запустить контейнер с флагом
-Pили-p. Открытый порт доступен на хосте, а порты доступны любому клиенту, который может подключиться к хосту.
И наконец, образ, в нашем случае mysql. Хорошо, я немного солгал, сказав, что нам нужно сначала вытащить изображение, потому что оно автоматически вытягивает изображение, которое мы указываем в этой команде. Но я подумал, что такой небольшой акцент на изображениях будет важен.
В нашей версии MySQL есть тег :latest, который извлечет последнюю версию, но в этом нет необходимости, поскольку он используется по умолчанию, если его не указывать. Так же, как параметр de -d, в котором, если мы не укажем, он будет работать в режиме переднего плана по умолчанию, или, если вы хотите, вы можете добавить параметр -d, чтобы запустить его в отключенном режиме.
Быстрое объяснение разницы между ними заключается в том, что режим переднего плана, консоль, которую вы используете для выполнения docker run, будут привязаны к стандартному вводу, выводу и ошибке. Это означает, что ваша консоль подключена к процессу контейнера. В отключенном режиме контейнер запускается и работает в фоновом режиме. Это означает, что вы запускаете контейнер и можете использовать консоль после запуска для других команд.

К настоящему моменту ваш контейнер MySQL уже должен быть запущен и работает!
поделюсь полезной блаблой
Вот две очень полезные команды:
docker container ls [OPTIONS]
Команда ls выводит список ваших контейнеров, и есть множество полезных опций, таких как, например, --all или -a, которые показывают все ваши контейнеры, поскольку по умолчанию отображаются только запущенные контейнеры. Вы можете проверить их в Документации Docker по команде ls.
docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
Команда inspect отображает подробную информацию об одном или нескольких контейнерах, и это здорово. Полезных опций не так много, но вот ссылка на документы, если вы хотите что-то проверить. Полная форма может показаться немного запутанной, но она проста как docker container inspect <container name or id> .

Мы получили новый контейнер MySQL.
Теперь давайте взаимодействовать с ним!
Мы можем запускать команды в запущенных контейнерах с помощью следующей команды:
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Но так как печатать много для отправки одной команды — отстой, давайте запустим и выполним интерактивнуюbash оболочку в контейнере. Используя соответственно -it и bash.
примечание:bash недоступен, например, в дистрибутивах Alpine можно использовать /bin/sh , чтобы вы знали об этом.
Итак, в нашем случае мы запустим docker exec -it wsl-mysql-test bash и будем делать там все, что захотим.

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

Или подключите к нему свой бэкенд и начните разработку!

Теперь вы знаете, как запустить контейнер в Docker!
Что ж, поскольку мы использовали в качестве примера контейнер MySQL, можно подумать, как загрузить в него базу данных.
Мы не будем вдаваться в подробности, но вам следует ОБЯЗАТЕЛЬНО прочитать о томах и привязке монтирования в Docker для сохранения данных!
Я надеюсь, что эта статья может быть полезной :)
Если вы хотите связаться со мной, вы можете написать мне по адресу [email protected], посетить мой сайт diegoponte.eu или мой linkedin.