Установка Docker на CentOS/RedHat/Fedora
Docker – программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы, например, LXC. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любой Linux-системе с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами.
Тот же самый контейнер, который разработчик создает и тестирует на ноутбуке, может быть легко перенесен на продакшн-сервера в облако и так же легко мигрирован в другую область при необходимости.
Основные способы использования Docker:
- автоматизация упаковки и развертывания приложений;
- создание собственных легковесных PaaS окружений;
- автоматизация тестирования и непрерывной интеграции/развертывания;
- развертывание и масштабирование веб-приложений, баз данных и сервисов бэкенда.
В данной статье “Установка Docker на CentOS/RedHat/Fedora” мы опишем, как можно установить Docker на CentOS, RedHat или Fedora.
Если Вы не знаете версию ОС, то проверить её можно следующим образом:
$ cat /etc/issue
|
Установка Docker на CentOS/RedHat.
В то время, как пакет Docker предоставляется по умолчанию совместно с CentOS 7, то для CentOS 6 он находится в репозитории EPEL. Пожалуйста, обратите внимание, что это немного меняет инструкцию по установке для различных версий. Вы всегда можете использовать самую последнюю версию и скачать его бинарный файл, который работает на ядре 3.8 или выше.
Эти инструкции работают для CentOS 6 и более поздних версий. Они, скорее всего, будут работать для других бинарных совместимых дистрибутивов EL6, таких как Scientific Linux, но они не были проверены.
Пожалуйста, обратите внимание, что из-за существующих ограничений Docker может работать только на 64-битной архитектуре.
Чтобы запустить Docker, Вам нужен CentOS 6 или выше с ядром версии 2.6.32-431 или выше.
Установка Docker на CentOS 6
Пожалуйста, обратите внимание, что для CentOS , этот пакет является частью дополнительного репозитория Enterprise Linux (EPEL), поэтому его нужно подключить.
Если вы используете RHEL/CentOS 6 с 32-битной архитектурой
# rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
|
Если вы используете RHEL/CentOS 6 с 64-битной архитектурой
# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
|
Пакет docker-io обеспечивает установку Docker через Epel.
Если Вы уже установили несовместимый с docker-io Doker-пакет, он будет конфликтовать с Docker-IO. Чтобы продолжить установку c Docker-IO, Вам необходимо удалить не совместимый Docker-пакет.
Далее необходимо установить Docker-IO, который, в свою очередь, установит Docker:
$ sudo yum install docker—io
|
Использование Docker
Когда установка Docker будет завершена, следует запустить Docker-демон:
$ sudo service docker start
|
Если вы хотите, чтобы Docker запускался при загрузке вашей ОС, то выполните следующее:
$ sudo chkconfig docker on
|
Теперь необходимо убедиться, что Docker работает. Сначала нужно получить последнюю версию CentOS образа:
$ sudo docker pull centos
|
Таким же образом можно получить и другие дистрибутивы Linux (Debian, Ubuntu и иные *nix-подобные). Для примера скачаем еще 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
$ yum install vim
|
Если все работает правильно, Вы получите простой вывод от bash. Введите “exit” для выхода. При выходе из контейнера его работа останавливается.
Можно вывести все запущенные контейнеры следующей командой:
$ docker ps —a
|
На рисунке Выше при использовании команды “docker ps -a” видно имя контейнера. Данная команда показывает все существующие контейнеры.
Чтобы вывести только запущенные контейнеры, выполните следующую команду:
$ docker ps
|
Как отмечалось выше, при создании контейнера его имя генерируется автоматически, но если Вы желаете его изменить, выполните следующее:
$ docker run —name my_container —t —i centos
|
где my_container – это будущее имя контейнера
Если команда, описанная выше, не сработает, то попробуйте выполнить другую:
$ 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
|
Вот и все, можно легко переносить свои приложения между хостами, облаками и собственными серверами. Никакого ограничения по железу. Это является одним из главных преимуществ 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 — это ID самого контейнера
Примонтировать папку хоста в контейнер при создании можно следующим образом:
$ 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” на IP 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 – IP-адрес виртуальной машины;
8080 – порт, на котором будет работать nginx;
80 – порт, на котором работает Docker.
Если не указать IP-адрес, то контейнер будет слушать все доступные IP.
Dockerfiles
Вы можете посмотреть уже готовые решения для Docker (шаблоны), которые доступны на GitHub.
Установка Docker на Fedora.
Docker доступен в Fedora 19 или версии выше. Пожалуйста, обратите внимание, что из-за существующих ограничений Docker он может работать только на 64-битной архитектуре.
Если Вы уже установили несовместимый с docker-io Doker-пакет на Fedora, он будет конфликтовать с Docker-IO. Чтобы продолжить установку c Docker-IO, пожалуйста, удалите несовместимый Docker-пакет:
$ sudo yum —y remove docker
|
Для Fedora 21 или более поздней версии пакет wmdocker обеспечит такую же функциональность, как Docker, и не будет конфликтовать с 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
|
Теперь необходимо убедиться, что 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 завершена!