Как переустановить docker linux

Обновлено: 04.07.2024

Docker Desktop for Linux

Docker Desktop helps you build, share, and run containers easily on Mac and Windows as you do on Linux. Docker handles the complex setup and allows you to focus on writing the code. Thanks to the positive support we received on the subscription updates, we’ve started working on Docker Desktop for Linux which is the second-most popular feature request in our public roadmap. If you are interested in early access, sign up for our Developer Preview program.

To get started with Docker Engine on Ubuntu, make sure you meet the prerequisites, then install Docker.

Prerequisites

OS requirements

To install Docker Engine, you need the 64-bit version of one of these Ubuntu versions:

  • Ubuntu Impish 21.10
  • Ubuntu Hirsute 21.04
  • Ubuntu Focal 20.04 (LTS)
  • Ubuntu Bionic 18.04 (LTS)

Docker Engine is supported on x86_64 (or amd64 ), armhf , arm64 , and s390x architectures.

Ubuntu 16.04 LTS “Xenial Xerus” end-of-life

Ubuntu Linux 16.04 LTS reached the end of its five-year LTS window on April 30th 2021 and is no longer supported. Docker no longer releases packages for this distribution (including patch- and security releases). Users running Docker on Ubuntu 16.04 are recommended to update their system to a currently supported LTS version of Ubuntu.

Uninstall old versions

Older versions of Docker were called docker , docker.io , or docker-engine . If these are installed, uninstall them:

It’s OK if apt-get reports that none of these packages are installed.

The contents of /var/lib/docker/ , including images, containers, volumes, and networks, are preserved. If you do not need to save your existing data, and want to start with a clean installation, refer to the uninstall Docker Engine section at the bottom of this page.

Supported storage drivers

Docker Engine on Ubuntu supports overlay2 , aufs and btrfs storage drivers.

Docker Engine uses the overlay2 storage driver by default. If you need to use aufs instead, you need to configure it manually. See use the AUFS storage driver

Installation methods

You can install Docker Engine in different ways, depending on your needs:

Most users set up Docker’s repositories and install from them, for ease of installation and upgrade tasks. This is the recommended approach.

Some users download the DEB package and install it manually and manage upgrades completely manually. This is useful in situations such as installing Docker on air-gapped systems with no access to the internet.

In testing and development environments, some users choose to use automated convenience scripts to install Docker.

Install using the repository

Before you install Docker Engine for the first time on a new host machine, you need to set up the Docker repository. Afterward, you can install and update Docker from the repository.

Set up the repository

Add Docker’s official GPG key:

Use the following command to set up the stable repository. To add the nightly or test repository, add the word nightly or test (or both) after the word stable in the commands below. Learn about nightly and test channels.

Install Docker Engine

Update the apt package index, and install the latest version of Docker Engine and containerd, or go to the next step to install a specific version:

Got multiple Docker repositories?

If you have multiple Docker repositories enabled, installing or updating without specifying a version in the apt-get install or apt-get update command always installs the highest possible version, which may not be appropriate for your stability needs.

To install a specific version of Docker Engine, list the available versions in the repo, then select and install:

a. List the versions available in your repo:

b. Install a specific version using the version string from the second column, for example, 5:18.09.1

Verify that Docker Engine is installed correctly by running the hello-world image.

This command downloads a test image and runs it in a container. When the container runs, it prints a message and exits.

Docker Engine is installed and running. The docker group is created but no users are added to it. You need to use sudo to run Docker commands. Continue to Linux postinstall to allow non-privileged users to run Docker commands and for other optional configuration steps.

Upgrade Docker Engine

To upgrade Docker Engine, first run sudo apt-get update , then follow the installation instructions, choosing the new version you want to install.

Install from a package

If you cannot use Docker’s repository to install Docker Engine, you can download the .deb file for your release and install it manually. You need to download a new file each time you want to upgrade Docker.

Note

To install a nightly or test (pre-release) package, change the word stable in the above URL to nightly or test . Learn about nightly and test channels.

Install Docker Engine, changing the path below to the path where you downloaded the Docker package.

The Docker daemon starts automatically.

Verify that Docker Engine is installed correctly by running the hello-world image.

This command downloads a test image and runs it in a container. When the container runs, it prints a message and exits.

Docker Engine is installed and running. The docker group is created but no users are added to it. You need to use sudo to run Docker commands. Continue to Post-installation steps for Linux to allow non-privileged users to run Docker commands and for other optional configuration steps.

Upgrade Docker Engine

To upgrade Docker Engine, download the newer package file and repeat the installation procedure, pointing to the new file.

Install using the convenience script

Always examine scripts downloaded from the internet before running them locally. Before installing, make yourself familiar with potential risks and limitations of the convenience script:

  • The script requires root or sudo privileges to run.
  • The script attempts to detect your Linux distribution and version and configure your package management system for you, and does not allow you to customize most installation parameters.
  • The script installs dependencies and recommendations without asking for confirmation. This may install a large number of packages, depending on the current configuration of your host machine.
  • By default, the script installs the latest stable release of Docker, containerd, and runc. When using this script to provision a machine, this may result in unexpected major version upgrades of Docker. Always test (major) upgrades in a test environment before deploying to your production systems.
  • The script is not designed to upgrade an existing Docker installation. When using the script to update an existing installation, dependencies may not be updated to the expected version, causing outdated versions to be used.

Tip: preview script steps before running

You can run the script with the DRY_RUN=1 option to learn what steps the script will execute during installation:

Docker is installed. The docker service starts automatically on Debian based distributions. On RPM based distributions, such as CentOS, Fedora, RHEL or SLES, you need to start it manually using the appropriate systemctl or service command. As the message indicates, non-root users cannot run Docker commands by default.

Use Docker as a non-privileged user, or install in rootless mode?

The installation script requires root or sudo privileges to install and use Docker. If you want to grant non-root users access to Docker, refer to the post-installation steps for Linux. Docker can also be installed without root privileges, or configured to run in rootless mode. For instructions on running Docker in rootless mode, refer to run the Docker daemon as a non-root user (rootless mode).

Install pre-releases

To install the latest version of Docker on Linux from the “test” channel, run:

Upgrade Docker after using the convenience script

If you installed Docker using the convenience script, you should upgrade Docker using your package manager directly. There is no advantage to re-running the convenience script, and it can cause issues if it attempts to re-add repositories which have already been added to the host machine.

Uninstall Docker Engine

Uninstall the Docker Engine, CLI, and Containerd packages:

Images, containers, volumes, or customized configuration files on your host are not automatically removed. To delete all images, containers, and volumes:

Docker - это система управления контейнерами для Linux. Если говорить просто, то контейнеры - это что-то среднее между виртуальными машинами, с полной изоляцией и chroot окружением. Все процессы выполняются в изолированном пространстве, но в то же время на одном ядре, что позволяет экономить ресурсы основной системы.

Docker не реализует собственную систему контейнеров, он использует LXC и выступает в качестве оболочки, которая позволяет автоматически загружать, устанавливать и запускать образы контейнеров, а также управлять ими. Все действия выполняются в несколько команд и намного проще чем при использовании lxc. В этой статье мы рассмотрим как выполняется установка docker на Ubuntu, а также как использовать контейнеры в Linux.

Системные требования

Для работы docker ваша система должна отвечать таким требованиям:

  • Программа работает только на системах 64 битной архитектуры;
  • Необходимо ядро версии не ниже чем 3.10. В более старых версиях реализованы не все необходимые возможности, и это будет вызывать различные ошибки;
  • Быстрый интернет - для загрузки или выгрузки образов контейнера.

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

Установка Docker в Ubuntu

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

sudo apt update && sudo apt upgrade

Перед тем как установить Docker Ubuntu необходимо установить дополнительные пакеты ядра, которые позволяют использовать Aufs для контейнеров Docker. С помощью этой файловой системы мы сможем следить за изменениями и делать мгновенные снимки контейнеров:

sudo apt install linux-image-extra-$(uname -r) linux-image-extra-virtual

После того как все приготовления завершены и вы убедились что ваша система полностью готова, можно перейти к установке. Мы будем устанавливать программу из официального репозитория разработчиков. Сначала надо добавить ключ репозитория:

Затем добавьте репозиторий docker в систему:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

sudo apt update && apt-cache policy docker-ce

И установка Docker на Ubuntu:

sudo apt install -y docker-ce

Теперь установка Docker Ubuntu и всех необходимых компонентов завершена. Первой командой мы добавили ключ репозитория разработчиков, второй - сам репозиторий. Далее обновили списки пакетов и сообщили системе что можно заменять системные пакеты на пакеты из этого репозитория.

Чтобы завершить установку осталось добавить нашего пользователя в группу docker. Иначе при запуске утилиты вы будете получать ошибку подключения к сокету:


Для добавления выполните:

sudo usermod -aG docker $(whoami)


Затем проверяем запущен ли сервис:

sudo systemctl status docker


Все готово к работе. Теперь рассмотрим подробнее использование Docker.

Установка Docker Compose

Сейчас работа с docker не обходится без утилиты управления контейнерами docker compose, давайте её тоже установим. Чтобы установить docker compose Ubuntu выполните последовательность команд:

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

Утилита была загружена из официального сайта и теперь вы можете посмотреть её версию:

Утилита Docker

Все действия с контейнерами выполняются утилитой docker. Ее можно запускать от имени вашего пользователя после того, как он был добавлен в группу программы. Синтаксис утилиты очень прост:

$ docker опции команда опции_команды аргументы


Давайте сначала рассмотрим основные опции утилиты их всего несколько:

  • -D - включить режим отладки;
  • -H - подключиться к серверу, запущенному на другом компьютере;
  • -l - изменить уровень ведения логов, доступно: debug,info,warn,error,fatal;
  • -v - показать версию;
  • --help вывести справку по команде или утилите в целом;

Команд намного больше, ниже приведены все команды, которые вы можете использовать в своих программах:

В этой статье мы будем часто использовать команду run, рассмотрим ее опции:

  • -e - переменные окружения для команды;
  • -h - имя хоста контейнера;
  • -i - интерактивный режим, связывающий stdin терминала с командой;
  • -m - ограничение памяти для команды;
  • -u - пользователь, от имени которого будет выполнена команда;
  • -t - связать tty с контейнером для работы ввода и вывода;
  • -v - примонтировать директорию основной системы в контейнер.

Теперь, когда мы рассмотрели все основы, приведем несколько примеров работы с контейнерами. Это очень просто.

Использование Docker в Ubuntu

Чтобы убедиться что все работает давайте запустим тестовый образ. Для этого наберите:

docker run hello-world


Поиск и установка контейнеров

Использование docker очень простое по своей сути. Если вы не знаете название нужного пакета, можете воспользоваться поиском, например, найдем Ubuntu:

docker search ubuntu


Утилита выведет список всех доступных для загрузки образов из репозитория Docker, которые содержат такое слово. Колонка Official означает, что образ поддерживается официальным разработчиком, а Stars - это количество пользователей, которым этот образ понравился.

Для загрузки образа на локальный компьютер используйте команду pull:

docker pull ubuntu

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


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

Теперь, давайте запустим командную оболочку контейнера с помощью команды run, для получения интерактивного доступа используйте опции -i и -t:

docker run -it ubuntu


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


Например, установим утилиту dialog:

apt-get install -y dialog


Сохранение изменений

Вы можете изменять контейнер как захотите, добавлять и удалять программы и многое другое. Но когда вы его удалите, все изменения будут потеряны. Вы можете создать новое образ из модифицированного контейнера, для этого используется команда commit. Сначала смотрим список запущенных контейнеров:


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

docker commit -m "изменения" -a "автор" ид_контейнера repository/имя

docker commit -m "Zenity" -a "Seriyyy95" d034b794a3bf repository/ubuntu-zenity


Новый образ был сохранен на вашем компьютере и вы можете увидеть его в списке образов:


Список контейнеров

Как я уже говорил, вы можете посмотреть список запущенных контейнеров с помощью команды ps:


Если вам нужны все контейнеры, используйте опцию -a:


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

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

Чтобы остановить запущенный контейнер используйте команду stop:

docker stop d034b794a3bf


docker start d034b794a3bf


Вы можете подключиться к запущенному контейнеру с помощью attach:

docker attach d034b794a3bf


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

docker rm d034b794a3bf


Выводы

Вы этой статье мы рассмотрели как выполняется установка Docker Ubuntu. В этом дистрибутиве процесс установки не будет трудным даже для новичков. А возможность установки различных дистрибутивов в несколько команд может быть полезной во многих ситуациях. А вы пользуетесь Docker? Для решения каких задач? Напишите в комментариях!

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

Например, для веб-приложения уже нужна база данных, веб-сервер, и возможно ещё интерпретатор PHP. Это уже три контейнера, настраивать и запускать их вручную не удобно, поэтому была придумана утилита docker-compose, которая позволяет управлять группами контейнеров, создавать их, настраивать, а также удалять одной командой. В этой статье мы разберемся как пользоваться docker для чайников. Подробно рассмотрим docker-compose, а также реальное применение утилиты.

Использование Docker для чайников

Поскольку эта инструкция про Docker для начинающих, я рекомендую сразу прочитать статью про запуск контейнера, вы поймете некоторые основы Docker, которые могут здесь вам пригодится. Там рассказано как всё делать вручную, а здесь мы уже поговорим как автоматизировать этот процесс.

1. Установка docker-compose

Если программа ещё не установлена, её необходимо установить. Для этого надо просто скачать исполняемый файл из официального сайта разработчиков:

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

И дать ему права на выполнение:

sudo chmod +x /usr/local/bin/docker-compose

После этого вы сможете посмотреть её версию:

2. Создание проекта

Если вы уже видели проекты, использующие docker, то, наверное, замечали, что в папке с проектом лежит файл под названием docker-compose.yaml. Именно в этом файле настраиваются контейнеры, которые надо создать для вашего проекта, потом они будут созданы автоматически с помощью docker-compose. Файл использует синтаксис YAML и должен содержать такие данные:

Версия указывает на версию синтаксиса файла, в разных версиях доступны разные ключевые слова, это сделано для обратной совместимости. Мы будем использовать версию 3.5. Далее нужно перечислить хранилища (volumes), сети (networks) и сами контейнеры.

Синтаксис YAML похож на JSON, здесь тоже есть пары ключ: значение, разделенные двоеточием, только тут значение может быть вообще нулевым, может содержать другие ключи, а также оно может быть массивом значений, тогда каждый элемент массива начинается с чёрточки "-". Но в отличие от JSON, здесь очень важны отступы, чтобы показать вложенность значений, поэтому не теряйте их.

Давайте создадим папку losst-docker и создадим в ней файл docker-compose.yaml:

version: '3.5'
services:


3. Добавление контейнеров

Рассмотрим содержимое самого простого пункта настройки контейнера:

Здесь нам обязательно надо указать имя будущего контейнера, а также образ, на основании которого он будет создан. Через двоеточие можно указывать версию контейнера. Версии можно посмотреть на Dockerhub они там отмечены как tags. Если версия не указана используется latest, последняя.

Например, добавим контейнер для веб-сервера Nginx:


Уже имея эти данные в конфигурационном файле можно запускать контейнер.

4. Запуск контейнеров

Когда настройка docker завершена, надо запускать полученные контейнеры. Чтобы запустить группу контейнеров, настроенную в docker-compose.yaml необходимо перейти в папку, где находится этот файл конфигурации и выполнить там команду docker-compose up. Например:


После этого контейнеры будут запущены, все их потоки вывода будут объединены в один и вам будет выводится информация в терминал. Чтобы остановить контейнеры достаточно нажать Ctrl+C. Если вы хотите запустить контейнеры в фоновом режиме используйте опцию -d:

docker-compose up -d


Остановить контейнеры, запущенные в фоновом режиме можно командой stop:

Команда down не просто останавливает все запущенные контейнеры, но и удаляет их:


Остановите пока этот контейнер, мы продолжим его настройку.

5. Порты контейнера

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

ports:
- внешний_порт : внутренний порт

Например, пробросим порт 80 как 8094:



Но это все ещё не интересно, потому что мы не можем размещать там свои файлы. Сейчас это исправим.

6. Монтирование папок

Для монтирования хранилищ или внешних папок хоста используется пункт volumes. Синтаксис очень похож на работу с портами:

volumes:
- /путь/к/внешней/папке : /путь/к/внутренней/папке

Например, давайте создадим в текущей папке проекта файл index.html и смонтируем эту папку вместо папки /usr/share/nginx/html/ контейнера:

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


7. Настройка хранилищ

Мы можем монтировать к контейнеру не только внешние папки, но и хранилища, создаваемые в docker. Для этого сначала надо добавить хранилище в главную секцию volumes. Например losst-vl:

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


Здесь мы ещё добавили пункт environment, в котором задали переменные окружения для контейнера. Они необходимы, для того, чтобы указать имя базы данных и пароль root, которые будут использоваться по умолчанию. Как видите, с переменными окружения нет ничего сложного.


8. Настройка сети

Контейнеры должны взаимодействовать между собой. У нас уже есть Nginx и MySQL, им пока не нужно обращаться друг к другу, но как только у нас появится контейнер для PhpMyAdmin, которому надо обращаться к MariaDB ситуация поменяется. Для взаимодействия между контейнерами используются виртуальные сети, они добавляются похожим образом на хранилища. Сначала добавьте сеть в глобальную секцию networks:

Затем для каждого контейнера, которые будут иметь доступ к этой сети, надо добавить сеть в раздел networks.

Далее контейнеры будут доступны по сети по их имени. Например, добавим PhpMyAdmin и дадим ему доступ к базе данных:



9. Модификация контейнера

Это уже более сложные вещи, но зато вы разберетесь с Docker на практике. В большинстве случаев можно обойтись без модификации контейнера, иногда туда надо скопировать специфические конфигурационные файлы либо установить дополнительное программное обеспечение, для таких случаев docker-compose позволяет создавать свои контейнеры на основе уже существующих образов. Для этого надо создать файл Dockerfile на основе которого будет создаваться контейнер. Давайте добавим контейнер php-fpm и установим в него несколько расширений php с помощью Dockerfile.

Сначала создадим папку для файлов контейнера:

FROM php:7.2.26-fpm-stretch
RUN docker-php-ext-install pdo pdo_mysql pcntl

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

  • FROM - образ, на основе которого будет создаваться наш образ;
  • RUN - выполнить команду в окружении образа;
  • COPY - скопировать файл в образ;
  • WORKDIR - задать рабочую папку для образа;
  • ENV - задать переменную окружения образа;
  • CMD - задать основной процесс образа;

Теперь надо добавить новую секцию в наш docker-compose.yaml. Здесь вместо image мы используем директиву build, которой надо передать путь к папке с конфигурацией образа:

Дальше, раз мы уже добавили php-fpm надо примонтировать для Nginx верный конфиг, который будет поддерживать php-fpm. Создайте папку nginx и поместите в неё такой конфигурационный файл:

server listen 80;
server_name _ !default;
root /var/www/;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.html index.htm index.php;
charset utf-8;
location / try_files $uri $uri/ /index.php?$query_string;
>
error_page 404 /index.php;
location

\.php$ fastcgi_pass docker-php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
>
>


Осталось создать файл index.php и можно тестировать:

Теперь можно запускать контейнеры:


В отличие от предыдущего раза, теперь перед запуском будет собран новый контейнер на основе файла Dockerfile. Такие контейнеры собираются только первый раз, если они не существуют. Чтобы их пересобрать используйте опцию --build:

docker-compose up --build

Теперь у вас есть полноценное веб-приложение, которое доступно на вашем компьютере, может использовать базу данных, PHP и много чего другого. Вы можете добавить любые недостающие вам контейнеры.

10. Подключение к контейнеру

С помощью docker-compose вы можете подключится к любому контейнеру из группы. Для этого просто используйте команду exec. Например, запустите проект в фоновом режиме:

docker-compose up -d

И используйте docker-compose exec. Подключимся к контейнеру с Nginx:

docker-compose exec docker-nginx /bin/bash


Перед вами откроется оболочка Bash этого контейнера. Устанавливать здесь что-то вручную не рекомендуется, так как всё сотрётся после удаления контейнера, но для тестирования работы чего либо такая возможность будет очень кстати.

Выводы

В этой статье мы разобрали использование docker для чайников. Тема довольно обширная и сложная, но очень интересная. Развернув таким образом проект на одной машине, вы сможете развернуть его там, где вам нужно просто скопировав туда конфигурацию. Поэтому эта технология завоевала такую большую популярность среди разработчиков и DevOps.

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Технология Docker набирает всё большую популярность среди разработчиков и DevOps-специалистов в наши дни, поскольку позволяет без особого труда настроить различные окружения один раз, а затем воспроизводить их на, казалось бы, совсем не совместимом оборудовании. Но начнём мы наш цикл статей о Docker с азов.

В сегодняшней статье мы поговорим о создании контейнеров и, соответственно, об их запуске. В Docker контейнер представляет собой окружение для выполнения какого-либо одного процесса. Это изолированная среда, в которой есть всё необходимое для выполнения нужного процесса, и нет ничего лишнего. Создание контейнера Docker выполняется в момент его запуска, и эти процессы запускаются с помощью команды docker run. Давайте сначала рассмотрим её синтаксис и опции.

Синтаксис и опции docker run

Синтаксис команды docker run похож на синтаксис других команд Linux и выглядит следующим образом:

$ docker run опции образ команда

Утилите обязательно надо передать образ, на основе которого будет создан контейнер. Образ может быть локальным или указывать на образ, который надо загрузить из сети. Мы рассмотрим это в примерах ниже. Опции позволяют настроить контейнер и параметры его запуска более детально. Сама команда позволяет переопределить программу, которая выполняется после запуска контейнера. Например, выполнив /bin/bash, вы можете подключится к самому контейнеру.

Рассмотрим основные опции утилиты, которые мы будем использовать. Опций очень много, поэтому я не могу перечислить их все:

  • -d - запускает контейнер в фоновом режиме;
  • -t - прикрепляет к контейнеру псевдо-TTY-консоль;
  • -i - выводит в терминал STDIN поток контейнера;
  • --name - имя контейнера, по которому потом можно будет к нему обращаться;
  • --dns - устанавливает DNS-серверы для контейнера;
  • --network - тип сети для контейнера, может принимать такие значения: bridge (используется по умолчанию), none, host. Также можно передать идентификатор сети Docker, к которой надо подключится;
  • --add-host - добавляет строчку в /etc/hosts;
  • --restart - указывает, когда надо перезапускать контейнер. Возможные значения: no, on-failure, always, unless-stopped;
  • --rm - удаляет контейнер после завершения его работы;
  • -m, --memory - количество оперативной памяти, доступное Docker-контейнеру;
  • --memory-swap - объём памяти раздела подкачки, доступный в контейнере;
  • --cpus - количество ядер процессора, доступных в контейнере;
  • --shm-size - размер файла /dev/shm;
  • --device - позволяет монтировать устройства из папки /dev в контейнер;
  • --entrypoint - позволяет переопределить скрипт, который выполняется при запуске контейнера, перед запуском основной команды;
  • --expose - позволяет пробросить несколько портов из контейнера в хост-систему;
  • -P - пробрасывает все порты контейнера в хост-систему;
  • -p - переносит все порты контейнера в хост-систему без смены номера порта;
  • --link - позволяет настроить связь контейнеров Docker;
  • -e - добавляет переменную окружения в контейнер;
  • -v, --volume - позволяет монтировать папки хоста в контейнер;
  • -w - изменяет рабочую директорию контейнера.

Это основные опции, которые мы будем использовать в этой статье, а теперь давайте рассмотрим на примерах, как создать контейнер Docker в Linux.

Создание контейнера Docker

1. Обычный контейнер

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

docker run hello-world


Для поиска уже готовых образов для контейнеров можно использовать веб-сайт DockerHub. Здесь есть образы для большинства дистрибутивов и системных сервисов, таких, как Nginx, Apache, PHP-FPM, PhpMyAdmin и многих других.


Вверху отображается название контейнера, а чуть ниже - доступные версии. При создании контейнера версия записывается через двоеточие. Например, давайте создадим и запустим контейнер с Ubuntu 18.04. Чтобы к контейнеру было легко получить доступ потом, зададим ему имя с помощью опции --name:

docker run --name Ubuntu1804 ubuntu:18.04

2. Подключение к контейнеру

Образ Ubuntu 18.04, на основе которого мы создали контейнер выше, не содержит команды, которая бы постоянно выполнялась, поэтому если вы попытаетесь подключится к нему с помощью команды docker exec, то получите ошибку: You cannot attach to a stopped container, start it first:

docker attach Ubuntu1804


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

docker rm Ubuntu1804

А нам надо создать контейнер с командой, которая будет выполняться. Для этого просто передайте команду после имени образа, например /bin/bash. Чтобы контейнер был доступен интерактивно, создавайте его с опциями -i и -t:

docker run -it --name Ubuntu1804 ubuntu:18.04 /bin/bash


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

3. Переменные окружения

Очень часто для изменения настроек контейнера используются переменные окружения. Вы задаёте какую-нибудь переменную окружения, а затем её значение используется вашей программой в самом контейнере для выполнения различных действий. Для задания переменных окружения используется опция -e. Запуск контейнера Docker:

docker run -it -e "FOO=bar" --name Ubuntu1804_2 ubuntu:18.04 /bin/bash


4. Монтирование папок и хранилищ

Когда вам нужно, чтобы контейнер мог работать с исходными кодами программы или с часто изменяемыми данными, рекомендую сделать специальную настройку - будет неудобно каждый раз копировать информацию в контейнер. Куда проще примонтировать папку хоста в контейнер, и все изменения исходников будут сразу же доступны в контейнере. Это очень удобно. Для монтирования папки следует передать её опции -v. Например, примонтируем папку

/test_docker в контейнер:

docker run -it -v "

/test_docker:/mnt" --name Ubuntu1804_3 ubuntu:18.04 /bin/bash


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

docker run -it -v docker_volume:/mnt --rm --name Ubuntu1804_4 ubuntu:18.04 /bin/bash


Напоминаю, что опция --rm удаляет контейнер сразу же после того, как он завершит свою работу. Посмотреть список доступных хранилищ можно командой:

docker volume list


5. Порты контейнера

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

docker run --name Nginx -p 8080:80 -d nginx


6. Связывание контейнеров

Связывание контейнеров позволяет настроить взаимодействие между ними. Связанный контейнер будет доступен по сети по его имени. Соответствующая строчка будет автоматически добавлена в файл /etc/hosts контейнера. Для связывания используется опция --link. Чтобы закрепить знания, полученные выше, давайте создадим контейнер с базой данных MySQL, а затем свяжем его с PhpMyAdmin.

Сначала создаём контейнер MySQL с постоянным хранилищем в /var/lib/mysql. В переменных окружения ему надо передать пароль суперпользователя. Какие переменные окружения ожидает получить контейнер - эту информацию обычно можно найти на странице контейнера на DockerHub. Используйте опцию -d, чтобы контейнер запустился в фоновом режиме:

docker run -v mysql_volume:/var/lib/mysql --name MySQL -e MYSQL_ROOT_PASSWORD=passwd -d mysql:8.0


Затем создаём контейнер с PhpMyAdmin для доступа к этой базе данных и связываем с ним контейнер MySQL под именем db:

docker run --name PhpMyAdmin -d --link MySQL:db -p 8080:80 phpmyadmin/phpmyadmin

Также здесь мы пробрасываем порт 80 в хост-систему, чтобы получить доступ к веб-интерфейсу. Теперь можно проверять в браузере. Всё работает.


7. Сеть для контейнеров

Контейнеры можно не связывать. Если надо объединить три и больше контейнеров между собой, то куда удобнее сразу связать их в одну общую сеть, чем создавать множество подключений для каждого из этих контейнеров. Все объекты в одной сети будут иметь доступ к друг другу по их имени. Сначала необходимо создать сеть:

docker network create -d bridge docker_network

Посмотреть список созданных сетей можно командой:

docker network list


Теперь можно её использовать. Объединим с помощью сети наш MySQL- и PhpMyAdmin-сервера. Для этого надо их остановить и удалить:

docker stop MySQL
docker stop PhpMyAdmin

docker rm MySQL
docker rm PhpMyadmin

docker run -v mysql_volume:/var/lib/mysql --network docker_network --name MySQL -e MYSQL_ROOT_PASSWORD=passwd -d mysql:8.0

А для PhpMyAdmin теперь надо передать хост, на котором расположена база данных в переменной окружения PMA_HOST:

docker run --name PhpMyAdmin -d --network docker_network -e PMA_HOST=MySQL -p 8080:80 phpmyadmin/phpmyadmin


Выводы

В этой статье мы рассмотрели, как запустить контейнер Docker и настроить его параметры. Как видите, Docker может быть очень полезным для быстрого разворачивания рабочих окружений. Но редко для этих целей используют саму команду docker run. Обычно используется инструмент docker-compose. Интересно ли вам прочитать об этом инструменте? Напишите в комментариях!

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Читайте также: