Visitors have accessed this post 8349 times.

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

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

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

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

NMap — часть 2
array(1) { [0]=> object(WP_Term)#11556 (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

Часть 2
Автор — Сергей Попов

1 часть статьи
Сканирование портов
Рассказать вам шутку про UDP?
Только она до вас не дойдет.
Изначально Nmap был эффективным средством сканирования портов, и, несмотря на развитие прочего функционала, он им и остается.

Большинство типов сканирования доступны только привилегированным пользователям, потому...

2
0
11 сентября 2020
Nmap — 3 часть
array(1) { [0]=> object(WP_Term)#10982 (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

Часть 3
Автор — Сергей Попов

1 часть статьи
2 часть статьи
Обход IDS/Firewall and spoofing
«А может, тебе еще ключ от квартиры, где деньги лежат?»
Не существует такой магической опции, которая позволяла бы обнаруживать и обходить брандмауэры и IDS (intrusion detection systems). Для этого необходимы навыки и опыт. Ниже только некоторые...

4
1
18 сентября 2020
Резервное копирование и восстановление ОС Linux
array(1) { [0]=> object(WP_Term)#976 (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.

Допустим, что у нас есть ОС, все данные которой хранятся в одном разделе. Эту ОС необходимо мигрировать на...

3
0
28 августа 2020