Установка Docker на CentOS/RedHat/Fedora

Установка 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 -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 завершена.

One thought on “Установка Docker на CentOS/RedHat/Fedora

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.