Установка Docker на CentOS/RedHat/Fedora
Docker – открытый движок, автоматизирующий развертывание приложений в легковесные, переносимые, самодостаточные контейнеры, которые могут без изменений переноситься между серверами.
Тот же самый контейнер, который разработчик создает и тестирует на ноутбуке, может быть легко перенесен на продакшн-сервера в облако и так же легко смигрирован в другой регион при необходимости.
Основные способы использования Docker:
- Автоматизация упаковки и развертывания приложений
- Создание собственных легковесных PaaS окружений
- Автоматизация тестирования и непрерывной интеграции/развертывания
- Развертывание и масштабирование веб-приложений, баз данных и сервисов бекенда
В данной статье «Установка Docker на CentOS/RedHat/Fedora» я расскажу как можно установить Docker на CentOS\RedHat или Fedora.
Если не знаете версию ОС, то проверить можно:
$ cat /etc/issue
Установка Docker на CentOS/RedHat.
В то время как пакет Докер предоставляется по умолчанию как часть CentOS-7, это предусмотрено в хранилище EPEL для CentOS-6. Пожалуйста, обратите внимание, что это немного меняет инструкции по установке различных версий. Если вам потребуется последняя версия, вы всегда можете использовать самую последнюю версию и скачать его бинарный файл, который работает на ядре 3.8 или выше.
Эти инструкции работают для CentOS 6 и более поздних версий. Они, скорее всего, будут работать для других бинарных совместимых дистрибутивов EL6, таких как Scientific Linux, но они не были проверены.
Пожалуйста, обратите внимание, что из-за существующих ограничений Docker, он может работать только на 64-битной архитектуры.
Чтобы запустить Docker вам нужно CentOS6 или выше, с ядром версии 2.6.32-431 или выше.
Установка Docker на CentOS 7
-===Способ 1===-
Docker включен по умолчанию в хранилище CentOS-Extras. Для установки просто запустите следующую команду:
$ sudo yum install docker -y
Ручная установка последней версии
При использовании пакета что представлен выше, рекомендуемым способом установки Docker, вы можете не поставить последнюю версию. Если вам потребуется последняя версия, вы можете устанавливать программу напрямую для этого нужно скачать исходный код программы.
При установке бинарного файла без пакета, вы можете интегрировать Docker с Systemd. Для этого просто установите две единичные файлы (service и socket) из репозитория GitHub к /etc/systemd/system.
FirewallD
CentOS-7 реалезована firewalld -обертка вокруг IPTables и которая может конфликтовать с Докер.
Когда firewalld будет запущен или перезапущен, то он будет удалять связь с докер от IPTables, предотвращая Docker и давая возможность работать ему должным образом.
При использовании Systemd, firewalld запускается до запуска докера, но если вы запустите или перезапустите firewalld после запуска докера, вам придется перезапустить сам демон Docker.
-===Способ 2 — использовать официальный репозиторий===-
Устанавливаем необходимое ПО:
# yum install -y yum-utils makecache fast device-mapper-persistent-data lvm2
Добавляем репозиторий:
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Устанавливаем последнюю версию Docker CE на CentOS:
# yum -y install docker-ce
Запуск Docker-а:
# systemctl start docker
Установка Docker на CentOS 6
-===Способ 1===-
Пожалуйста, обратите внимание, что это для CentOS-6, этот пакет является частью дополнительных пакетов для Enterprise Linux (Epel), по этому нужно подключить EPEL репозиторий.
Пакет docker-io обеспечивает установку Docker через Epel.
Если вы уже установили (не связанный) докер пакет, он будет конфликтовать с Docker-IO. Чтобы продолжить установку c Docker-IO, пожалуйста, удалите докер в первую очередь.
Далее, давайте установим docker-io пакет, который установит Docker:
$ sudo yum install docker-io -y
-===Способ 2 — использовать официальный репозиторий===-
Приводил пример установки вверху.
Установка Docker на Fedora
Docker CE поддерживает:
- Fedora 25
- Fedora 24
Устанавливаем нужное ПО:
# dnf -y install dnf-plugins-core makecache fast
Добавляем репозиторий:
# dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
Устанавливаем последнюю версию Docker CE:
# dnf -y install docker-ce
Использование Docker на CentOS/RedHat/Fedora
После установки Docker, вы должны будете запустить докер демон:
$ sudo service docker start
Или (CentOS 7/RHEL 7/Fedora 24-25):
# systemctl start docker
Если вы хотите чтобы Docker запускался при загрузке вашей ОС, то выполните:
$ sudo chkconfig docker on
Или (CentOS 7/RHEL 7/Fedora 24-25):
# systemctl enable docker
Теперь давайте убедиться, что Докер работает. Сначала нужно получить последнюю версию CentOS образа:
$ sudo docker pull centos
Так можно получить и другие дистрибутивы Linux: Debian, Ubuntu и может еще и другие. Я скачаю еще 1 образ:
$ sudo docker pull debian
Но это скачает образ ОС, так же можно скачать готовый контейнер с готовой программой ( например nginx, apache mysql и так далее), выполнив:
$ sudo docker package_name $ sudo docker pull nginx
package_name — имя программы (готовый контейнер с программой).
Вы можете видеть все образы при помощи команды:
$ sudo docker images
Запустим оболочку Bash чтобы протестировать образ:
$ sudo docker run -i -t centos /bin/bash
В этом случае имя контейнера сгенерировался в автоматическом режиме, но вы можете его задать вручную ( расскажу попозже).
Давайте установим в контейнер текстовый редактор vim:
$ yum update -y $ yum install vim -y
Если все работает правильно, вы получите простой вывод от баш. Введите «exit» для выхода. Когда вы выйдите из контейнера, то он остановился.
Можно вывести все запущенные контейнеры следующей командой:
$ docker ps -a
На рисунке что выше при использовании команды «docker ps -a» видно имя моего контейнера. Данная команда показывает все существующие контейнера, чтобы вывести только запущенные контейнеры:
$ docker ps
Когда вы создадите контейнер, то его имя генерируется автоматически, но если вы желаете поменять на другое имя, но при создании контейнера:
my_container — это имя моего контейнера.
$ docker run --name my_container -t -i centos
Может не запуститься, то тогда можно запустить по-другому:
$ docker run --name my_container -t -i centos /bin/bash
ВНИМАНИЕ! Команда «run»- это команда для создания и запуска нового контейнера.
Работать с контейнером можно не только по его ID, но и по созданному имени. Давайте запустим нужный контейнер:
$ docker start my_container
ВНИМАНИЕ! Команда «start»- это команда для запуска уже существующего контейнера.
После того как мы его запустили, можно подключиться к контейнеру, сделать это можно командой attach:
$ docker attach my_container
Если нечего не происходит, то нажмите «Enter», тогда вы войдете в bash в самом контейнере.
Все изменения в существующем вашем контейнере вы можете закоммитить в образ чтобы в будущем можно было воспользоваться им:
$ docker commit <id_контейнера> <имя_образа>
Перенос образа на другой хост
Например, вы уже все настроили (все ваши приложение в Docker и так же закоммитили в образ), то после этого всего можно уже смело сохранить образ в файл для переноса на другой хост:
$ docker save имя_образа > ~/my_container_for_nransfer.tar
После чего необходимо скопировать данный архив (образ) на другой хост ( предположим через scp) и нужно после чего импортировать его в Docker.
$ docker load < /tmp/my_container_for_nransfer.tar
Вот и все, можно легко переносить свои приложения между хостами, облаками и собственными серверами. Никакого vendor–lock. Только ради этого стоит использовать Docker! (если вы сохраняли данные на примонтированную файловую систему, не забудьте перенести и их).
Создание контейнер-демона
Конечно, можно создавать и долго живущие контейнеры, подходящие для запусков приложений и сервисов. Такие контейнеры не имеют интерактивной сессии:
$ docker run --name container_name -d centos /bin/bash -c "while true; do echo hello world; sleep 1; done"
container_name – имя контейнера.
Можно посмотреть, что происходит внутри вашего контейнера используя:
$ docker logs <container_name>
Если необходимо остановить ваш контейнер, то воспользуйтесь:
$ docker stop <container_name>
Чтобы запустить ваш контейнер выполните:
$ docker start <container_name>
выполнение цикла while продолжится в контейнере.
Чтобы посмотреть детали вашего контейнера используйте:
$ docker inspect <container_name>
Для удаления вашего контейнер, используйте:
$ docker rm <container_name>
Создаем (прописываем) имя хоста в своем контейнер:
$ docker run -t -i --hostname=ubuntu-box debian /bin/bash
Так же можно добавить параметр который добавит корректное имя вашего контейнера (я рассказывал это вверху).
Ложить/достать данные в контейнер?
Еси Вы хотите скопировать данные в контейнер или извлечь из него что то:
$ docker cp <путь_к_данным_на_хосте> <container_name>:<путь>
Например нужно скачать с контейнера некоторый файл и положить его в домашнюю директорию:
$ docker cp bcfa1008952e:/etc/nginx/nginx.conf /home/captain/
bcfa1008952e -это ИД самого контейнера
Можно подмонтировать папку хоста в контейнер при создании:
$ docker run -v /tmp:/root -t -i <имя_образа>
/tmp – это путь к папке на вашем хосте.
/root – путь к папке на вашем сервере.
Так вы легко можете работать с данными из контейнера с данными на хосте и исключить необходимость копирования данных в обе стороны.
Удаление образа
$ docker rmi the_image_name
Удаление всех образов
$ docker rmi $(docker images -q)
Убить все процессы в контейнирах и удалить их:
$ docker rm $(docker kill $(docker ps -q))
Или
$ docker rm -f $(docker ps -a -q) $ docker rm -f $(docker ps -a -q --filter 'exited=0')
или
$ sudo docker ps -a | grep Exit | awk '{print $1}' | sudo xargs docker rm
Примечание: Замените «kill» на «stop» для постепенного выключения всех контейнеров.
Удалить все образы начиная с «заданных образов»
$ docker rmi $(docker images | grep -v 'centos\|my-image' | awk {'print $3'})
Вы можете использовать Grep, чтобы удалить все, кроме my-image и centos.
Удалить все образы «<none>»
$ for i in `sudo docker images|grep \<none\>|awk '{print $3}'`;do sudo docker rmi $i;done
Или
$ docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
Как пробросить порт в созданном контейнере Docker?
$ iptables -t nat -A DOCKER -p tcp --dport 8002 -j DNAT --to-destination 192.168.103.193:80
Замечание: Нужно стартануть тот контейнер на котором нужно пробросить порт и запускаем команду что выше. Она откроет порт «80» на 192.168.103.193 ИП.
ПРИМЕР.
Я поставлю уже готовый контейнер только с одной программой — nginx:
# docker run --name some-nginx -p 192.168.103.189:8080:80 -v /some/content:/var/nginx/docker.localhost.localdomain:ro -d nginx
192.168.103.189 — ИП адрес виртуальной машины.
8080 — это порт на котором будет работать nginx.
80 — это порт на котором работает докер.
Если не указать IP адрес, то он будет слушать все ИП адреса.
Создание своего репозитория (своего контейнера).
Установка mysql в контейнере на Docker
Установка nginx в контейнере на Docker
Dockerfiles
Вы можете посмотреть готовые решения для docker (шаблоны) которые доступны на GitHub:
https://github.com/CentOS/CentOS-Dockerfiles
Пользовательские варианты
Если вам нужно добавить прокси сервер или подробная работа докер с Systemd, а так же установить другой каталог или раздел для файлов во время выполнения Docker, или сделать другие настройки, то читайте документацию на официальном сайте Docker. Мне это не нужно было, по этому я не стал описывать подробно, но попозже я обязательно добавлю информацию по данной теме в этот раздел.
Установка Docker на Fedora.
Docker доступен в Fedora 19 или версии выше. Пожалуйста, обратите внимание, что из-за существующих ограничений Docker, он может работать только на 64-битной архитектуры.
Пакет docker-io обеспечивает установку Docker на Fedora. Если у вас есть (не связанный) докер пакет и он уже установлен, то он будет конфликтовать с Docker-IO. Для продолжения установки docker-io на Fedora 19, пожалуйста, удалите докер для избежание конфликтов:
$ sudo yum -y remove docker
Для Fedora 21 или более позней версии, пакет wmdocker обеспечит такую же функциональность как докер, а также будет не конфликтовать с Docker-IO:
$ sudo yum -y install wmdocker $ sudo yum -y remove docker
Установите пакет docker-io, который установит Docker:
$ sudo yum -y install docker-io
Чтобы обновить пакет docker-io:
$ sudo yum -y update docker-io
Теперь, когда он установлен, давайте запустим демон Docker:
$ sudo systemctl start docker
Если Вы хотите чтобы Docker запускался при загрузке вашей ОС, вы должны также выполнить:
$ sudo systemctl enable docker
Теперь давайте убедиться, что Докер работает, для этого выполним команду:
$ sudo docker run -i -t fedora /bin/bash
Примечание: Если вы получаете ошибку «Cannot start container error mentioning SELinux or permission denied» — не удается запустить контейнер или доступ запрещен, вам возможно, потребуется обновить политику SELinux:
# sudo yum upgrade selinux-policy
После чего нужно перезагрузить ОС:
# reboot
Предоставление пользователям права на использование Docker.
Fedora 19 и 20 поставляется с Докер 0.11.Пакет уже был обновлен до 1.0 для Fedora 20. Если вы все еще используете версию 0.11, то Вы должны будете предоставить права пользователям Докер.
Команды докера с использованием инструментов командной строки для процесс-демона докер через socket файла /var/run/docker.sock, должен принадлежать группе docker. Надо быть членом этой группы, чтобы связаться с -d процессом Docker:
$ usermod -a -G docker login_name
Добавление пользователей в Докер группы не является необходимым для Docker версии 1.0 и выше.
Пользовательские варианты
Если вам нужно добавить прокси сервер или подробная работа докер с Systemd, а так же установить другой каталог или раздел для файлов во время выполнения Docker, или сделать другие настройки, то читайте документацию на официальном сайте Docker. Мне это не нужно было, по этому я не стал описывать подробно, но попозже я обязательно добавлю информацию по данной теме в этот раздел.
Установка Docker на CentOS/RedHat/Fedora завершена.
Спасибо.
На примере сразу понял что это такое.