Visitors have accessed this post 1351 times.

Docker — установка, настройка и первые шаги в системе

7
0
1351
21 августа 2020 13:23
Автор: Rebrain Me
Docker

Visitors have accessed this post 1351 times.

Автор — Юрий Власов

Docker – де-факто стандартный движок контейнеризации, который повсеместно используется для запуска приложения как в окружениях для разработки, так и в публичных\высоконагруженных средах. Подробнее о терминологии можно узнать здесь.

В этой статье я расскажу, как поставить и запустить Docker локально и начать знакомство с этой интереснейшей системой. Ну что же, перейдем сразу к практике.

Установка Docker

У Docker есть достаточно подробные официальные инструкции по установке. На практике, я пользовался установочным скриптом (для Linux):

‌curl -L get.docker.com | sudo sh -

Если утилита curl у вас не установлена, скачайте скрипт и выполните его вручную:

‌sh /path/to/downloaded/script.sh‌

Если вы хотите установить определенную версию Docker, то можете воспользоваться установочными скриптами Rancher-a, которые можно подобрать и скачать здесь. Запускается так же, можете прямо в команде с curl адрес поменять, все будет работать.

Настройка Docker

Все работает из коробки, но есть пара моментов, которые, исходя из личного опыта, можно было бы рекомендовать подправить сразу.

1. Настроить logging driver

Дело в том, что по умолчанию используется драйвер json-file, который по умолчанию не имеет ограничения на размер JSON файла, где будут скапливаться логи с соответствующего контейнера. Подправить на Linux это можно, отредактировав файл /etc/docker/daemon.json. Файла по умолчанию может и не быть – создайте. Содержимое к добавлению:

‌Таким образом мы настраиваем json-file, чтобы он не создавал более одного файла с логами на контейнер, причем файл не должен превышать 100 МБ. Это все можно переопределить на этапе запуска контейнера, но в будущем это освобождает от поисков ответа на вопрос: «Куда делись 6 ГБ за день?»

2. Запустить службу Docker

Бывает, не запускается он сам после установки. Можно поправить на Linux с помощью:

‌sudo systemctl enable --now docker.service

‌Здесь мы с помощью systemctl запустили Docker Engine и поставили его в автозагрузку.

3. Добавить пользователя в группу docker

Чтобы иметь возможность обращаться к Docker Engine от имени непривилегированного пользователя (без sudo), нужно добавить его в группу docker.

sudo usermod -aG docker "$USER"

‌Для того чтобы изменения вступили в силу, нужно перезагрузиться или воспользоваться ACL.

‌sudo setfacl -m "u:${USER}:rwx" /var/run/docker.sock

‌Знакомство с DockerHub

Контейнеры создаются из образов. Образ – упорядоченный набор слоев файловой системы, которые были получены на этапе сборки. Образами можно поделиться, выложив их на Docker Registry. Самый популярный – DockerHub. Множество программных продуктов выкладываются здесь и поддерживаются официально, а есть много инструментов, собранных отдельными людьми или небольшим сообществом, которые не уступают по качеству и поддержке официальным.

Важно! Смотрите, что вы качаете и выполняете – непонятно какой noname без документации или официальную сборку, которая регулярно обновляется и сопровождается ясной документацией. Ходят слухи, что в noname образах майнеры попадались… но это больше редкость, чем правило (исходя из личного опыта).

Для примера, вот несколько ссылок на официальные образы: HaProxy, Nginx, PostgreSQL, MySQL, Grafana, Prometheus.

Запустим первый контейнер

sudo docker run --rm -it -p 8080:80 nginx:stable-alpine

‌Открыв http://localhost:8080, видим:

Что мы сделали? Разберем команду по порядку.
sudo – запуск последующей команды от имени другого пользователя, по умолчанию – суперпользователя root.
docker – запускаем исполняемый файл Docker-а, который командная оболочка найдет в одном из путей, находящихся в переменной PATH.
run – создать и запустить новый контейнер.
— -rm – после завершения его выполнения – удалить, чтобы место не занимал.
-i – присоединить stdin/out/err из командной оболочки в контейнер; запуск в интерактивном режиме.
-t – создать tty для контейнера.
-p 8080:80 – перенаправить порт 8080 с хоста на 80 внутри контейнера.
nginx:stable-alpine – использовать для создания контейнера образ nginx с тегом stable-alpine. Другие теги можно найти на странице Nginx на DockerHub.

Монтирование

Часто необходимо подключить какие-то данные в контейнер или вынести их из него, чтобы не потерять при пересоздании. Подробнее можно почитать здесь.

echo "Hello world! Date: $(date)" > /tmp/my_file.txt
sudo docker run --rm -it -p 8080:80 -v /tmp/my_file.txt:/usr/share/nginx/html/index.html:ro nginx:stable-alpine

Здесь мы создали файл /tmp/my_file.txt и примонтировали его по пути /usr/share/nginx/html/index.html. Согласно описанию контейнера, можно также эмпирическим путем определить, что путь к файлам веб-сервера в стандартном конфигурационном файле именно /usr/share/nginx/html, а файл по умолчанию, который будет открываться как главная, – index.html. Вот мы и монтируем с хоста в контейнер по найденному пути.С монтированием нужно быть внимательным. Монтируя файл, убедитесь, что он уже существует к моменту запуска на хосте, иначе создастся папка. Путь на хосте при монтировании должен быть абсолютным. Когда вы монтируете директорию, содержимое целевого пути внутри контейнера, если там что-то было, просто исчезнет и будет то, что находится в папке на хосте.

Запуск в фоновом режиме

sudo docker run -d --name my1 -p 3000:3000 grafana/grafana

Здесь появилась пара новых ключей.
-d – запуск в фоне.
— -name my1 – задать имя контейнеру «my1», так как по умолчанию генерируется случайное, а мы хотим назначить свое.

Проверим состояние контейнера.

sudo docker ps
sudo docker stats

Первая команда выводит информацию о всех запущенных контейнерах, вторая – отдает краткую сводку по потреблению ресурсов. Откроем Grafana.

Можем зайти, поизучать (admin:admin), а потом остановить контейнер.

sudo docker stop my1
sudo docker ps -a‌

Как видим, контейнер остановлен, но не удален. Можно вновь запустить, а можно удалить.

sudo docker start my1
sudo docker rm -f my1

Заключение

Мы поставили Docker, познакомились с DockerHub, запустили пару контейнеров и опробовали базовые команды для запуска приложений с помощью Docker Community Edition.

От редакции

Если вам интересно посещать бесплатные онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN

*Анонсы мероприятий каждую неделю

Практикумы для специалистов по инфраструктуре и разработчиков — https://rebrainme.com.
Наш Youtube-канал — https://www.youtube.com/channel/UC6uIx64IFKMVmj12gKtSgBQ.

Агентство Fevlake, проектируем и поддерживаем IT-инфраструктуры с 2012 года — https://fevlake.com.

Комментарии (3)
Введено символов из возможных
Не отвечать

Вам также может понравится

Команды Docker, которые вам точно пригодятся
array(1) { [0]=> object(WP_Term)#10719 (16) { ["term_id"]=> int(8) ["name"]=> string(6) "Docker" ["slug"]=> string(6) "docker" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(8) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(8) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(8) ["category_count"]=> int(8) ["category_description"]=> string(0) "" ["cat_name"]=> string(6) "Docker" ["category_nicename"]=> string(6) "docker" ["category_parent"]=> int(0) } } Docker

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

6
2
23 октября 2020
Базовая работа с nix. Каналы
array(1) { [0]=> object(WP_Term)#10719 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(27) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(27) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Автор — Юрий Изоркин

В предыдущей статье мы познакомились с ОС NixOS. Теперь рассмотрим возможности пакетного менеджера nix. Источником обновления пакетов для менеджера nix служат каналы.

Применение каналов позволяет:

зафиксировать ПО на определенной версии;
использовать устаревшее ПО, например, если какие-либо скрипты не...

2
0
27 ноября 2020
Linux like One-c
array(1) { [0]=> object(WP_Term)#11280 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(27) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(27) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Автор статьи - Сергей Попов
Предистория
Мало кто из инфраструктурщиков на просторах России не сталкивался с «Великим и Ужасным» ОДИН-ЭС. Многие после этой встречи безвозвратно уходят в мир *nix, чтобы никогда больше не пересекаться с ним, и не жалеют об этом, остальным приходится устанавливать, обслуживать и поддерживать этого монстра многие...

0
8
3 августа 2020