Docker linux без sudo

Начало работы с Docker. Часть первая

Docker — это система управления процессами приложения в контейнерах. Все процессы выполняются в изолированном пространстве, но в то же время на одном ядре, что позволяет экономить ресурсы основной системы. Docker не реализует собственную систему контейнеров, он использует LXC и выступает в качестве оболочки.

Установка Docker

Дистрибутив Docker, доступный в официальном репозитории Ubuntu, не всегда является последней версией программы. Лучше установить последнюю версию, загрузив ее из официального репозитория Docker.

Сначала обновляем существующий перечень пакетов:

Затем устанавливаем пакеты, которые позволяют apt использовать протокол HTTPS:

Затем добавляем в свою систему ключ GPG официального репозитория Docker:

Добавляем репозиторий Docker в список источников пакетов apt:

Затем обновим базу данных пакетов информацией о пакетах репозитория Docker:

Следует убедиться, что мы устанавливаем Docker из репозитория Docker, а не из репозитория по умолчанию Ubuntu:

Далее устанавливаем Docker:

Теперь Docker установлен, демон запущен, и процесс будет запускаться при загрузке системы.

При установке Docker мы получаем не только сервис docker , но и утилиту командной строки docker ( клиент Docker).

Использование команды docker без sudo

По умолчанию, запуск команды docker требует привилегий пользователя root или пользователя группы docker , которая автоматически создается при установке Docker. Чтобы не вводить sudo каждый раз при запуске команды docker , добавим себя в группу docker :

Для применения этих изменений необходимо выполнить команду:

Использование команды docker

Команда docker позволяет использовать различные опции и команды с аргументами. Синтаксис выглядит следующим образом:

Пример старого и нового синтаксиса:

Для просмотра всех доступных команд:

Для просмотра опций использования определенной команды:

Работа с образами Docker

Контейнеры Docker создаются и запускаются из образов Docker. По умолчанию Docker получает образы из хаба Docker Hub, представляющего собой реестр образов, который поддерживается компанией Docker.

Скачаем и запустим образ:

Изначально Docker не смог найти образ hello-world локально, поэтому загрузил образ из Docker Hub, который является репозиторием по умолчанию. После загрузки образа Docker создал из образа контейнер и запустил приложение в контейнере, которое выдало сообщение «Hello from Docker!».

Образы, доступные в Docker Hub, можно искать с помощью команды команды search :

В столбце OFFICIAL строка OK показывает, что образ построен и поддерживается компанией, которая занимается разработкой этого проекта. Когда нужный образ выбран, можно загрузить его себе на компьютер с помощью команды pull :

После загрузки образа можно запустить контейнер с загруженным образом с помощью подкоманды run . Как видно из примера hello-world , если при выполнении команды run образ еще не загружен, клиент Docker сначала загрузит образ, а затем запустит контейнер с этим образом.

Для просмотра загруженных на компьютер образов нужно ввести:

Запуск контейнера Docker

Контейнер hello-world , запущенный ранее, является примером контейнера, который запускается и завершает работу после вывода тестового сообщения. Контейнеры могут выполнять и более полезные действия, а также могут быть интерактивными. Контейнеры похожи на виртуальные машины, но являются менее требовательными к ресурсам.

В качестве примера запустим контейнер с последней версией Ubuntu. Комбинация опций -i и -t обеспечивает интерактивный доступ к командному процессору контейнера:

Командная строка должна измениться, показывая, что мы работаем в контейнере. Теперь можно запускать любые команды внутри контейнера. Попробуем, например, обновить базу данных пакета внутри контейнера:

А после этого установим web-сервер:

Чтобы выйти из контейнера, вводим команду

Команда run выполняет сразу несколько задач: скачивает образ (если не был скачан ранее), создает новый контейнер, запускает его и выполняет указанную команду (если она задана). Чтобы присвоить контейнеру какое-то осмысленное имя, нужно использовать опцию name :

Чтобы запустить контейнер в интерактивном режиме — добавляем опции -i и -t :

Когда процесс внутри контейнера выполнит свою работу, то Docker-контейнер завершается. Каждый раз при выполнении команды docker run , будет создаваться новый контейнер. Чтобы в системе не накапливалось большое количество контейнеров, команду docker run часто запускают с дополнительной опцией —rm :

Читайте также:  Игровая панель windows 10 как включить

Управление контейнерами Docker

Через некоторое время после начала использования Docker на машине будет множество активных (запущенных) и неактивных контейнеров. Для просмотра активных контейнеров:

Для просмотра всех контейнеров:

Для запуска остановленного контейнера используем команду start , затем указываем идентификатор контейнера или его имя:

Для подключения к запущенному контейнеру используем команду attach , затем указываем идентификатор контейнера или его имя:

Чтобы выполнить отдельную команду внутри контейнера, используем команду exec , указываем идентификатор или имя контейнера и задаем команду для выполнения:

Для остановки запущенного контейнера используем команду stop , затем указываем идентификатор контейнера или его имя:

Если контейнер больше не нужен, удаляем его командой rm с указанием либо идентификатора, либо имени контейнера:

Изменить имя контейнера можно с помощью команды rename :

Сохранение изменений в контейнере в образ Docker

После установки Apache2 в контейнере Ubuntu у нас будет работать запущенный из образа контейнер, но он будет отличаться от образа, использованного для его создания. Однако нам может потребоваться такой контейнер Apache2 как основа для будущих образов.

Давайте сохраним состояние контейнера в виде нового образа Docker:

Образы также могут строиться с помощью файла Dockerfile , который позволяет автоматизировать установку программ в новом образе.

Источник

Как я могу использовать докер без sudo?

На страницах документации Docker все примеры команд показаны без sudo , например:

В Ubuntu бинарный файл называется docker.io . Это также не работает без sudo:

Как я могу настроить Docker так, чтобы мне не нужно было ставить перед каждой командой Docker префикс sudo?

Хорошая новость: новый докер (версия 19.03 (в настоящее время экспериментальный)) сможет работать без прав root, что устраняет проблемы, которые могут возникнуть при использовании пользователя root. Больше не нужно возиться с повышенными правами, root и всем, что может открыть вашу машину, когда вы этого не хотите.

Несколько предостережений в бездокном режиме Docker

Инженеры Docker говорят, что режим без root не может считаться заменой полного набора функций движка Docker. Некоторые ограничения режима без root включают:

  • Элементы управления cgroups, профили безопасности устройства, контрольные точки / восстановление, оверлейные сети и т. д. не работают в режиме без root.
  • Экспозиция портов из контейнеров в настоящее время требует ручного вспомогательного процесса socat.
  • Только дистрибутивы на основе Ubuntu поддерживают оверлейные файловые системы в режиме без root.
  • Режим Rootless в настоящее время предоставляется только для ночных сборок, которые могут быть не такими стабильными, как вы привыкли.

Начиная с докера 19.3 это устарело (и опаснее, чем нужно):

В руководстве по докеру есть что сказать об этом:

Предоставление некорневого доступа

Демон docker всегда запускается от имени пользователя root, и, начиная с версии Docker 0.5.2, демон docker связывается с сокетом Unix вместо порта TCP. По умолчанию этот сокет Unix принадлежит пользователю root, и по умолчанию вы можете получить к нему доступ с помощью sudo.

Начиная с версии 0.5.3, если вы (или ваш установщик Docker) создаете группу Unix с именем docker и добавляете в нее пользователей, то демон docker сделает владение сокетом Unix доступным для чтения / записи для группы docker при запуске демона , Демон docker всегда должен запускаться как пользователь root, но если вы запускаете клиент docker как пользователь в группе docker, вам не нужно добавлять sudo ко всем командам клиента. Начиная с версии 0.9.0, вы можете указать, что группа, отличная от docker, должна иметь сокет Unix с опцией -G.

Предупреждение: группа Docker (или группа, указанная с помощью -G) является корневым эквивалентом; см. подробности Docker Daemon Attack Surface и этот пост в блоге Почему мы не позволяем некорневым пользователям запускать Docker в CentOS, Fedora или RHEL (спасибо michael-n).

В недавнем выпуске экспериментального режима без root на GitHub инженеры упоминают, что режим без root позволяет запускать dockerd от имени непривилегированного пользователя, используя user_namespaces (7), mount_namespaces (7), network_namespaces (7).

Пользователи должны запускать dockerd-rootless.sh вместо dockerd.

Поскольку режим Rootless является экспериментальным, пользователям всегда нужно запускать dockerd-rootless.sh с параметром –experimental.

Читайте также:  Драйвер сетевой карты intel для windows server 2019

Управление Docker от имени пользователя без полномочий root

Демон docker связывается с сокетом Unix вместо порта TCP. По умолчанию этот сокет Unix принадлежит пользователю root, и другие пользователи могут получить к нему доступ только через sudo. Демон docker всегда запускается от имени пользователя root.

Если вы не хотите использовать sudo при использовании команды docker, создайте группу Unix с именем docker и добавьте в нее пользователей. Когда демон docker запускается, он делает владение сокетом Unix доступным для чтения / записи группой docker.

Добавьте группу докеров, если она еще не существует:

Добавьте подключенного пользователя «$ USER» в группу Docker. Измените имя пользователя, чтобы оно соответствовало вашему предпочтительному пользователю, если вы не хотите использовать своего текущего пользователя:

Либо сделайте, newgrp docker либо выйдите из системы, чтобы активировать изменения в группах.

Вы можете использовать

чтобы проверить, можете ли вы запустить Docker без sudo.

Источник

How to run docker on ubuntu without the sudo [duplicate]

I want to run my docker by running this command:

I get the following error:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.24/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=getting-started&target=&ulimits=null&version=1: dial unix /var/run/docker.sock: connect: permission denied

My question is: how can I run docker on ubuntu without adding «sudo»?

2 Answers 2

You should add user to docker group:

After you may have to restart Ubuntu

TL;DR: Unlike what many tutorials on the web propose (add your user account to the docker group, which is risky! see below), you could just add an alias in your .bashrc to avoid typing sudo , while having the «password prompt protection».

To be more precise: the Docker daemon socket is owned by root:docker :

so with this default setup, you need to prepend all docker CLI commands by sudo .

To avoid this, you can either:

Add $USER to the docker group (but that’s quite risky to do this on your personal workstation, as this would amount to provide your user account with root permissions without any sudo password prompt nor auditing).

Or, to prepend sudo automatically but avoid typing sudo docker manually, a good practice consists in adding the following alias in your

/.bashrc file (see e.g. this thread for details):

Then you can test this by opening a new terminal and typing:

Источник

Как использовать Docker без sudo на Ubuntu

В этой статье я покажу вам, как ввести команду docker без использования команды sudo на машине Ubuntu Linux.

Если вы используете Docker для тестирования и разработки на вашем локальном компьютере, вы, вероятно, испытали это

Вероятно, вы обойдете это, используя sudo перед командой docker или зарегистрируясь как root, используя su.

Но этого не должно быть.

Можно работать как обычный пользователь, и есть два пути.

Один заключается в том, чтобы добавить пользователя в группу докеров, а другой – разрешить ему писать в сокет Unix, используемый докером.

Мы собираемся показать оба способа сделать это в новом Ubuntu 18.04 в этой статье.

1) Добавление пользователя в группу Docker

Создайте новую группу, если она не существует.

Эта команда, скорее всего, не удастся, поскольку группа, возможно, уже существует, но давайте ее запустим ее в любом случае.

Затем нам нужно добавить текущего пользователя в группу.

Если вы не хотите добавлять текущего пользователя в систему, то вместо этого вы меняете $ USER для имени пользователя этого юзера.

Обратите внимание, что пользователю должно быть разрешено использовать sudo.

Наконец, нам нужно перезагрузить оболочку, чтобы применить новые групповые настройки.

Для этого вы можете перезагрузиться, или вы можете выйти из системы и войти в систему, но оба они подходят,если вы действительно хотите что-то более тонкое вместо этого выполните эту команду:

Теперь мы готовы запустить программу тестирования докеров без sudo:

2) ACL лист

Существует еще один способ сделать это, и это списки ACL.

Чтобы войти в систему как пользователь sudoer, нам нужно запустить эту команду:

Конечно же,измените bobby нп своего фактического пользователя, которого вы хотите использовать в докере.

Читайте также:  Line control in windows form

Теперь вы можете войти в систему как этот пользователь.

Теперь мы можем использовать докер, например, введите эту команду:

Он должен отображать контейнеры, если у вас они есть.

Если нет, по крайней мере, это не покажет вам отказ

Источник

How can I use docker without sudo?

On Docker’s documentation pages, all example commands are shown without sudo , like this one:

On Ubuntu, the binary is called docker.io . It also does not work without sudo:

How can I configure Docker so that I don’t need to prefix every Docker command with sudo?

5 Answers 5

Good news: the new docker (version 19.03 (currently experimental)) will be able to run rootless negating the problems that can occur using a root user. No more messing with elevated permissions, root and anything that might open up your machine when you did not want to.

A few Caveats to the rootless Docker mode

Docker engineers say the rootless mode cannot be considered a replacement for the complete suite of Docker engine features. Some limitation to the rootless mode include:

  • cgroups resource controls, apparmor security profiles, checkpoint/restore, overlay networks etc. do not work on rootless mode.
  • Exposing ports from containers currently requires manual socat helper process.
  • Only Ubuntu-based distros support overlay filesystems in rootless mode.
  • Rootless mode is currently only provided for nightly builds that may not be as stable as you are used to.

As of docker 19.3 this is obsolete (and more dangerous than need be):

The docker manual has this to say about it:

Giving non-root access

The docker daemon always runs as the root user, and since Docker version 0.5.2, the docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root, and so, by default, you can access it with sudo.

Starting in version 0.5.3, if you (or your Docker installer) create a Unix group called docker and add users to it, then the docker daemon will make the ownership of the Unix socket read/writable by the docker group when the daemon starts. The docker daemon must always run as the root user, but if you run the docker client as a user in the docker group then you don’t need to add sudo to all the client commands. As of 0.9.0, you can specify that a group other than docker should own the Unix socket with the -G option.

Warning: The docker group (or the group specified with -G) is root-equivalent; see Docker Daemon Attack Surface details and this blogpost on Why we don’t let non-root users run Docker in CentOS, Fedora, or RHEL (thanks michael-n).

In the recent release of the experimental rootless mode on GitHub, engineers mention rootless mode allows running dockerd as an unprivileged user, using user_namespaces(7), mount_namespaces(7), network_namespaces(7).

Users need to run dockerd-rootless.sh instead of dockerd.

As Rootless mode is experimental, users need to always run dockerd-rootless.sh with –experimental.

Manage Docker as a non-root user

The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can only access it using sudo. The docker daemon always runs as the root user.

If you don’t want to use sudo when you use the docker command, create a Unix group called docker and add users to it. When the docker daemon starts, it makes the ownership of the Unix socket read/writable by the docker group.

Add the docker group if it doesn’t already exist:

Add the connected user «$USER» to the docker group. Change the user name to match your preferred user if you do not want to use your current user:

Either do a newgrp docker or log out/in to activate the changes to groups.

to check if you can run docker without sudo.

Источник

Оцените статью