Visitors have accessed this post 1707 times.

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

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

Visitors have accessed this post 1707 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)
Введено символов из возможных
Не отвечать

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

Почему IaaS — это идеальный вариант для стартапов
array(1) { [0]=> object(WP_Term)#11803 (16) { ["term_id"]=> int(7) ["name"]=> string(6) "DevOps" ["slug"]=> string(6) "devops" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(7) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(19) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(7) ["category_count"]=> int(19) ["category_description"]=> string(0) "" ["cat_name"]=> string(6) "DevOps" ["category_nicename"]=> string(6) "devops" ["category_parent"]=> int(0) } } DevOps

Перевод статьи — https://hackernoon.com/why-infrastructure-as-a-service-is-ideal-for-startups-kw963wa1

В то время как облака доминируют во всех аспектах технологий, применяемых пользователями, такие вещи, как предоставление личной электронной почты для управления объектами как в CRM — это все еще чистой воды миф. Поэтому отрасль все больше...

0
0
12 марта 2021
Немного о SRE, или многое новое — это хорошо себя зарекомендовавшее старое
array(1) { [0]=> object(WP_Term)#976 (16) { ["term_id"]=> int(7) ["name"]=> string(6) "DevOps" ["slug"]=> string(6) "devops" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(7) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(19) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(7) ["category_count"]=> int(19) ["category_description"]=> string(0) "" ["cat_name"]=> string(6) "DevOps" ["category_nicename"]=> string(6) "devops" ["category_parent"]=> int(0) } } DevOps

Автор - Евгений Генеральчик
Что общего у Генри Форда и SRE?
Генри Форд был классный чел. Правда, не знаю, сам он дошел до такой славной мысли или услышал о подходе, когда-то использовавшемся у китайских медиков. Ведь пока в древней варварской Европе самым эффективным лечением считалось кровопускание, в не менее древнем Китае, чтобы медики не...

6
0
27 ноября 2020
30 инструментов мониторинга системы Linux, которые должен знать каждый сисадмин
array(1) { [0]=> object(WP_Term)#11803 (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(28) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(28) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Ищете способы, как контролировать производительность сервера Linux? В большинстве дистрибутивов Linux уже встроены разные инструменты мониторинга. Используя их, можно посмотреть метрики с информацией о системных процессах. Эти инструменты можно использовать для поиска возможных причин возникновения проблем с производительностью. Команды, которые...

0
0
28 мая 2020