Docker — установка и использование
Docker — это оболочка для LXC, предоставляющая удобный интерфейс для работы с контейнерами в среде Linux.
Контейнер в свою очередь это процесс, чем-то похожий на виртуальную машину, который выполняется в изолированном пространстве. При этом используется один экземпляр ядра (kernel) операционной системы, что позволяет экономить ресурсы.
Принцип работы предельно прост. На компьютер с Linux (здесь будет описана установка Docker на ubuntu 16.04) устанавливается сам Docker и дальше можно скачивать готовые образы, либо создавать свои, и запускать их в Docker.
К примеру есть образы с различными CMS, настроенным сервером и базой данных. Допилив такой образ под себя (или создав образ «с нуля») , его можно сохранить в укромном местечке и в любой момент развернуть где угодно.
Преимущество Docker состоит в том, что в случае с виртуальной машиной, приходится эмулировать работу целой операционной системы, тогда как Docker позволяет просто изолировать один процесс.
Контейнеры запускаются и останавливаются практически моментально, так как не требуется загрузка отдельной ОС. Можно запускать несколько контейнеров одновременно, а благодаря использованию файловой системы AuFS, контейнеры используют одно и то же дисковое пространство, доступное только для чтения.
Образы и контейнеры
Образ — это некий шаблон, из которого создаётся контейнер, после чего этот контейнер можно запускать.
Из одного и того же образа можно создавать сколько угодно новых контейнеров, вносить в эти контейнеры изменения и создавать из них новые образы. То есть, например, скачали базовый образ (см. ниже), создали из него контейнер, поделали в этом контейнере что-то, создали из этого контейнера образ и положили его на полку. Теперь для каких-то определённых делишек у Вас есть готовый, настроенный образ.
Образы будут сохраняться в /var/lib/docker.
Установка Docker
Устанавливаем доп. пакеты:
Установка будет производится из официального репозитория разработчика.
Добавляем ключ репозитория:
После успешной установки добавляем себя в группу docker:
Здесь нужно перелогиниться или перезагрузиться.
Если зелёненькое , то всё ОК.
Работа с Docker
… можно посмотреть список всех аргументов и команд.
container
image
network
node
plugin
secret
service
stack
swarm
system
volume
attach — подключиться к запущенному контейнеру.
build — собрать образ из инструкций dockerfile.
commit — создать новый образ из существующего.
cp — копировать файлы между контейнером и физическим компом.
create — создать новый контейнер.
diff — проверить файловую систему контейнера.
events — посмотреть события контейнера.
exec — выполнить команду в контейнере.
export — экспортировать содержимое контейнера в архив.
history — посмотреть историю изменений.
images — список установленных образов.
import — создать контейнер из архива tar.
info — информация о системе.
inspect — информация о контейнере.
kill — остановить запущенный контейнер.
load — загрузить образ из архива.
login — авторизация в официальном репозитории Docker.
logout — выйти из репозитория Docker.
logs — логи контейнера.
pause — приостановить все процессы контейнера.
port — проброс портов для контейнера.
ps — список запущенных контейнеров.
pull — скачать образ контейнера из репозитория.
push — отправить образ в репозиторий.
rename — переименовать контейнер.
restart — перезапустить контейнер.
rm — удалить контейнер.
rmi — удалить образ.
run — запустить новый контейнер.
save — сохранить образ в архив tar.
search — поиск образов в репозитории Docker Hub.
start — запустить контейнер.
stats — статистика использования ресурсов контейнером.
stop — остановить контейнер.
top — посмотреть запущенные процессы в контейнере.
unpause — проложить выполнение процессов в контейнере.
update — обновить конфигурацию контейнера.
version — версия Docker.
Первый запуск
Теперь пришло время что-нибудь запустить. Для этого существует тестовый образ — hello-world
Docker сообщит что такого образа нет на локальной машине, установит его из репозитория и запустит.
Сообщение Hello from Docker! свидетельствует о правильной работе системы.
Далее перечислены 4 шага, которые выполнил Docker. Следом предлагается попробовать запустить образ ubuntu командой docker run -it ubuntu bash, сделаем это чуть позже, а сейчас посмотрим в репозитории все пакеты содержащие слово ubuntu:
Как видно из списка, в наличии имеются образы с разным набором предустановленных программ. Колонка STARS показывает рейтинг.
Так же можно посмотреть какие-нибудь другие образы, например nginx:
Теперь установим образ ubuntu, который в списке значится первым, это базовый вариант, то есть с минимальным набором программ.
Команда «run» скачивает образ из репозитория (либо берет из локального), создаёт из него контейнер и запускает.
Здесь мы видим, что контейнер запустился и работает от пользователя root. Имя хоста (5c87883a3af5) это ID контейнера.
Чтобы посмотреть CONTAINER ID, нужно открыть ещё один терминал и дать команду для просмотра запущенных контейнеров:
Если дать ту же команду с ключём -a, то увидим все контейнеры (запущенные и не запущенные):
CONTAINER ID — ID контейнера, с помощью которого можно оперировать контейнером.
IMAGE — название образа.
Чтобы посмотреть список установленных образов, надо дать команду…
REPOSITORY — название репозитория.
TAG — обычно это версия продукта. Если тега нет, то автоматически используется слово latest.
ImageID — локально генерируемый ID образа, по которому этим образом можно оперировать.
Ну вот, контейнер работает и можно поиграться делая то же самое, что и с обычной ОС, обновляться, устанавливать программы, создавать пользователя и т.д.
Свой образ
Сейчас Docker сделал всё за нас — установил образ и запустил контейнер, а теперь научимся делать всё вручную, это в любом случае понадобится для создания своих образов.
Удалим существующие контейнеры и образы (чтоб глаза не мозолили) , скачаем образ, создадим из него контейнер, запустим его, установим какие-нибудь программы и наконец создадим из него свой образ.
Сначала остановим работающий контейнер. Сделать это можно по разному, прямо в контейнере дать команду exit, либо в соседнем терминале скомандовать…
… либо более жёсткая команда…
Последний аргумент — это ID контейнера (docker ps -a) .
Далее нужно удалить контейнер и образ. Делать это нужно именно в таком порядке, иначе получите ошибку.
Смотрим ID контейнеров (CONTAINER ID):
Удаляем контейнер ubuntu:
Удаляем контейнер hello-world:
Смотрим ID образов (IMAGE ID):
Удаляем образ ubuntu:
Удаляем образ hello-world:
Смотрим ID образа:
Создаём контейнер из скаченного образа и запускаем:
Контейнер запущен, теперь остановим его командой exit. Так как контейнер у нас уже создан, то и запускать его нужно другой командой.
Сначала смотрим ID контейнера:
Контейнер запустился, но мы к нему не подсоединены. Подсоединиться к контейнеру, нужно с помощью команды…
Если всё работает, то можно что-нибудь поделать в контейнере. Давайте обновимся и установим mc и openssh-server, в дальнейшем это нам пригодится:
Теперь можно создать новый образ. В соседнем терминале даём команду…
commit — создать образ.
77d9bfa3c4b4 — ID запущеного контейнера.
myrepo — произвольное название репозитория, который будет создан на вашей машине.
Смотрим список образов:
Чтоб отличать образы друг от друга можно менять название репы, или добавить TAG:
Теперь можно остановить запущенный контейнер (exit) и создать новый контейнер из нашего образа…
Смотрим список контейнеров:
Новый контейнер готов.
Переименовать контейнер
К контейнерам можно обращаться по имени, а для удобства переименовать:
Либо присвоить имя при создании:
Архивация образа
Чтобы переносить образ с компьютера на компьютер его нужно упаковать в архив.
Смотрим ID образа:
Архив образа будет сохранён на компьютере в домашней папке в файл myimage.tar.
После переноса на другой компьютер (с установленным Docker), архив нужно распаковать и создать из него контейнер.
Не очень то красиво.
Зададим название репы и тег:
Так гораздо лучше.
Создаём и запускаем контейнер, заодно присваиваем ему имя mynewcontainer:
Далее из этого контейнера можно создать образ, а из него контейнер и т.д. Только сильно не увлекайтесь, а то будет очень много слоёв.
Вы наверно обратили внимание на многочисленные надписи в терминале — Loading layer и Deleted…
Это создание/удаление тех самых слоёв, про которые говорится в начале статьи по ссылке Подробная инфа.
По умолчанию контейнер видит внешнюю сеть, проверить это можно командой ping ya.ru, предварительно установив пакет iputils-ping:
Однако попасть во внутрь контейнера по сети (например ssh) нельзя, нужно сначала пробросить порт.
IP-адреса у контейнеров будут — 172.17.0.0/16. Проверить можно командой…
Чтобы пробросить порты, нужно создать новый контейнер с необходимыми параметрами.
Смотрим ID образа:
Создаём новый контейнер с именем mysshcont и параметрами -p 2222:22:
2222-ой порт основной машины пробрасываем на порт ssh контейнера.
Далее нужно установить ssh-сервер (apt install openssh-server) и либо разрешить вход по паролю, либо создать ключи.
Заходить в контейнер с основного компьютера так…
То же самое нужно сделать, если вы хотите разместить к контейнере какой-нибудь сервер и сайт. Тогда проброс портов будет выглядеть так…
Естественно на основной машине не должны быть заняты эти порты. И обратите внимание на изменение имени контейнера.
Устанавливаем Apache и стартуем:
В браузере на основной машине пишем…
После этого контейнер можно остановить и запустить обычным способом (настройки портов сохранятся в контейнере):
Однако есть одна сложность, у контейнера нет системы автозапуска приложений, это значит что после остановки и последующего запуска, ни ssh ни сайт работать не будут, нужно вручную стартовать демонов…
О том, как реализуется автозапуск, и о других вещах я планирую написать в следующей части.
В статье затронуты лишь азы использования Docker.
Источник
what are linux-image-extra and linux-image-generic? [duplicate]
Every time I use sudo apt-get upgrade , I get errors with the linux-image-extra and linux-image-generic .
I am new to Ubuntu so I would like to know if these «image» files are the same as in Windows?
What is the problem with my system if these image files can not be upgraded?
Output from df -h
Link to paste.ubuntu.com: error message.
1 Answer 1
Although you have to include more details into your question, I will try and guess what your problem is:
Your problem was caused by something different, but I leave this answer as it could eventually help others who might read this post.
I assume you run sudo apt-get upgrade and it tells you it did not install/upgrade the packages linux-image-extra and linux-image-generic .
First of all, those packages are representing the latest kernel available for your system (in easy words). By installing/upgrading them, you install a new kernel version which will be used after the next reboot.
As these kernel updates are major updates and usually need additional dependencies etc. to be taken care of, the normal apt-get upgrade cannot handle them. You need the advanced upgrade command sudo apt-get dist-upgrade to proceed. This should do the kernel update and the warning about not-upgraded packages should disappear.
In your case the error was caused by the lack of enough free space in your /boot partition, which is the place where new kernels get installed. Therefore your question was marked as duplicate of How do I free up more space in /boot?, because you will find detailed answers there on how to solve your problem.
Источник