- Подсистема Docker в Windows Docker Engine on Windows
- Установка Docker Install Docker
- Настройка Docker с помощью файла конфигурации Configure Docker with a configuration file
- Настройка Docker в службе Docker Configure Docker on the Docker service
- Распространенные конфигурации Common configuration
- Создание сети по умолчанию Default network creation
- Задание группы безопасности для Docker Set Docker security group
- Конфигурация прокси-сервера Proxy configuration
- Удаление Docker How to uninstall Docker
- Подготовка системы к удалению Docker Prepare your system for Docker’s removal
- Удаление Docker Uninstall Docker
- Очистка данных и системных компонентов Docker Clean up Docker data and system components
- Перезагрузка системы Reboot your system
- Что такое Docker? What is Docker?
- Сравнение контейнеров Docker с виртуальными машинами Comparing Docker containers with virtual machines
- Простая аналогия A simple analogy
Подсистема Docker в Windows Docker Engine on Windows
Подсистема и клиент Docker не входят в состав Windows, потому их нужно устанавливать и настраивать отдельно. The Docker Engine and client aren’t included with Windows and need to be installed and configured individually. Кроме того, подсистема Docker может принимать множество пользовательских конфигураций. Furthermore, the Docker Engine can accept many custom configurations. Например, можно настроить то, как управляющая программа принимает входящие запросы, сетевые параметры по умолчанию и параметры ведения журнала и отладки. Some examples include configuring how the daemon accepts incoming requests, default networking options, and debug/log settings. В ОС Windows эти конфигурации можно указать в файле конфигурации или с помощью диспетчера служб Windows. On Windows, these configurations can be specified in a configuration file or by using Windows Service control manager. В этом документе объясняется установка и настройка подсистемы Docker; также представлены примеры некоторых часто используемых конфигураций. This document details how to install and configure the Docker Engine, and also provides some examples of commonly used configurations.
Установка Docker Install Docker
Для работы с контейнерами Windows требуется Docker. You need Docker in order to work with Windows Containers. Docker состоит из подсистемы Docker (dockerd.exe) и клиента Docker (docker.exe). Docker consists of the Docker Engine (dockerd.exe), and the Docker client (docker.exe). Самый простой способ установить все необходимые компоненты изложен в кратком руководстве, которое поможет настроить и запустить первый контейнер. The easiest way to get everything installed is in the quickstart guide, which will help you get everything set up and run your first container.
Сведения об установке с помощью сценария см. в разделе Использование сценария для установки Docker EE. For scripted installations, see Use a script to install Docker EE.
Прежде чем использовать Docker, необходимо установить образы контейнеров. Before you can use Docker, you’ll need to install the container images. Дополнительные сведения см. в документации по образам контейнеров. For more information, see docs for our container base images.
Настройка Docker с помощью файла конфигурации Configure Docker with a configuration file
Предпочтительным способом настройки подсистемы Docker в Windows является использование файла конфигурации. The preferred method for configuring the Docker Engine on Windows is using a configuration file. Путь к файлу конфигурации — C:\ProgramData\Docker\config\daemon.json. The configuration file can be found at ‘C:\ProgramData\Docker\config\daemon.json’. Если этот файл еще не существует, его можно создать. You can create this file if it doesn’t already exist.
Не все доступные параметры конфигурации Docker применяются к Docker в Windows. Not every available Docker configuration option applies to Docker on Windows. В примере ниже показаны параметры конфигурации, которые применяются. The following example shows the configuration options that do apply. Дополнительные сведения о конфигурации подсистемы Docker см. в статье Docker daemon configuration file (Файл конфигурации управляющей программы Docker). For more information about Docker Engine configuration, see Docker daemon configuration file.
Достаточно только внести необходимые изменения в файл конфигурации. You only need to add the desired configuration changes to the configuration file. Например, в этом случае подсистема Docker настраивается на прием входящих подключений через порт 2375. For example, the following sample configures the Docker Engine to accept incoming connections on port 2375. В других параметрах конфигурации будут использоваться значения по умолчанию. All other configuration options will use default values.
Аналогично в примере ниже настраивается хранение образов и контейнеров по альтернативному пути в управляющей программе Docker. Likewise, the following sample configures the Docker daemon to keep images and containers in an alternate path. Если оно не указано, по умолчанию используется значение c:\programdata\docker . If not specified, the default is c:\programdata\docker .
В примере ниже управляющая программа Docker настраивается на прием только защищенных подключений через порт 2376. The following sample configures the Docker daemon to only accept secured connections over port 2376.
Настройка Docker в службе Docker Configure Docker on the Docker service
Подсистему Docker можно также настроить, изменив службу Docker командой sc config . The Docker Engine can also be configured by modifying the Docker service with sc config . При использовании этого способа флаги подсистемы Docker задаются непосредственно в службе Docker. Using this method, Docker Engine flags are set directly on the Docker service. Выполните указанную ниже команду в командной строке (cmd.exe, не PowerShell). Run the following command in a command prompt (cmd.exe not PowerShell):
Не нужно выполнять эту команду в том случае, если файл daemon.json уже содержит запись «hosts»: [«tcp://0.0.0.0:2375»] . You don’t need to run this command if your daemon.json file already contains the «hosts»: [«tcp://0.0.0.0:2375»] entry.
Распространенные конфигурации Common configuration
В следующих примерах файла конфигурации представлены распространенные конфигурации Docker. The following configuration file examples show common Docker configurations. Их можно объединить в один файл конфигурации. These can be combined into a single configuration file.
Создание сети по умолчанию Default network creation
Чтобы настроить подсистему Docker таким образом, чтобы не была создана сеть NAT по умолчанию, используйте следующую конфигурацию. To configure the Docker Engine so that it doesn’t create a default NAT network, use the following configuration.
Дополнительные сведения см. в статье Управление сетями Docker. For more information, see Manage Docker Networks.
Задание группы безопасности для Docker Set Docker security group
После входа в систему на узле Docker и запуска команд Docker эти команды выполняются через именованный канал. When you’ve signed in to the Docker host and are locally running Docker commands, these commands are run through a named pipe. По умолчанию только члены группы «Администраторы» могут получить доступ к подсистеме Docker через именованный канал. By default, only members of the Administrators group can access the Docker Engine through the named pipe. Чтобы указать группу безопасности, имеющую такой доступ, используйте флаг group . To specify a security group that has this access, use the group flag.
Конфигурация прокси-сервера Proxy configuration
Чтобы задать данные о прокси-сервере для docker search и docker pull , создайте переменную среды Windows с именем HTTP_PROXY или HTTPS_PROXY и значением, содержащим данные о прокси-сервере. To set proxy information for docker search and docker pull , create a Windows environment variable with the name HTTP_PROXY or HTTPS_PROXY , and a value of the proxy information. Это можно сделать в PowerShell, используя команду следующего вида: This can be completed with PowerShell using a command similar to this:
После задания переменной перезапустите службу Docker. Once the variable has been set, restart the Docker service.
Дополнительные сведения см. в разделе Windows Configuration File (Файл конфигурации Windows) на сайте Docker.com. For more information, see Windows Configuration File on Docker.com.
Удаление Docker How to uninstall Docker
В этом разделе описывается, как удалить Docker и выполнить полную очистку компонентов системы Docker в Windows 10 или Windows Server 2016. This section will tell you how to uninstall Docker and perform a full cleanup of Docker system components from your Windows 10 or Windows Server 2016 system.
Все команды в этих инструкциях необходимо выполнять из сеанса PowerShell с повышенными привилегиями. You must run all commands in these instructions from an elevated PowerShell session.
Подготовка системы к удалению Docker Prepare your system for Docker’s removal
Перед удалением Docker убедитесь, что в системе не запущены контейнеры. Before you uninstall Docker, make sure no containers are running on your system.
Выполните следующие командлеты, чтобы найти работающие контейнеры: Run the following cmdlets to check for running containers:
Кроме того, перед удалением Docker рекомендуется удалить все контейнеры, образы контейнеров, сети и тома из системы. It’s also good practice to remove all containers, container images, networks, and volumes from your system before removing Docker. Это можно сделать, выполнив следующий командлет: You can do this by running the following cmdlet:
Удаление Docker Uninstall Docker
Затем необходимо начать собственно удаление Docker. Next, you’ll need to actually uninstall Docker.
Удаление Docker в Windows 10 To uninstall Docker on Windows 10
- На компьютере с Windows 10 перейдите в раздел Параметры >Приложения. Go to Settings >Apps on your Windows 10 machine
- В разделе Приложения и компоненты найдите пункт Docker для Windows Under Apps & Features, find Docker for Windows
- Последовательно выберите Docker для Windows >Удалить. Go to Docker for Windows >Uninstall
Удаление Docker в Windows Server 2016 To uninstall Docker on Windows Server 2016:
В сеансе PowerShell с повышенными привилегиями используйте командлеты Uninstall-Package и Uninstall-Module, чтобы удалить модуль Docker и соответствующий ему поставщик Управление пакетами из системы, как показано в следующем примере: From an elevated PowerShell session, use the Uninstall-Package and Uninstall-Module cmdlets to remove the Docker module and its corresponding Package Management Provider from your system, as shown in the following example:
Вы можете найти поставщик пакетов, который использовался для установки Docker с помощью команды PS C:\> Get-PackageProvider -Name *Docker* You can find the Package Provider that you used to install Docker with PS C:\> Get-PackageProvider -Name *Docker*
Очистка данных и системных компонентов Docker Clean up Docker data and system components
После удаления Docker необходимо удалить сети Docker по умолчанию, чтобы их конфигурация не оставалась в системе после того, как Docker будет удален. After you uninstall Docker, you’ll need to remove Docker’s default networks so their configuration won’t remain on your system after Docker is gone. Это можно сделать, выполнив следующий командлет: You can do this by running the following cmdlet:
Удалите сети по умолчанию Docker в Windows Server 2016. To remove Docker’s default networks on Windows Server 2016.
Выполните следующий командлет, чтобы удалить программные данные Docker из системы: Run the following cmdlet to remove Docker’s program data from your system:
Можно также удалить необязательные компоненты Windows, связанные с Docker и контейнерами в Windows. You may also want to remove the Windows optional features associated with Docker/containers on Windows.
К ним относится компонент «Контейнеры», который автоматически включается в любом экземпляре Windows 10 или Windows Server 2016 при установке Docker. This includes the «Containers» feature, which is automatically enabled on any Windows 10 or Windows Server 2016 when Docker is installed. Это также может быть компонент «Hyper-V», который автоматически включается в Windows 10 при установке Docker, однако в Windows Server 2016 он включается вручную. It may also include the «Hyper-V» feature, which is automatically enabled on Windows 10 when Docker is installed, but must be explicitly enabled on Windows Server 2016.
Компонент Hyper-V является общим компонентом виртуализации, который обеспечивает гораздо большую функциональность, чем при использовании одних только контейнеров. The Hyper-V feature is a general virtualization feature that enables much more than just containers. Прежде чем отключить Hyper-V, убедитесь, что в системе нет других виртуальных компонентов, которые зависят от Hyper-V. Before disabling the Hyper-V feature, make sure there are no other virtualized components on your system that require Hyper-V.
Удаление компонентов Windows 10 To remove Windows features on Windows 10:
- Выберите последовательно Панель управления >Программы >Программы и компоненты >Включение или отключение компонентов Windows. Go to Control Panel >Programs >Programs and Features >Turn Windows features on or off.
- Найдите имя компонента, который требуется отключить — в данном случае это Контейнеры и (необязательно) Hyper-V. Find the name of the feature or features you want to disable—in this case, Containers and (optionally) Hyper-V.
- Снимите флажок рядом с именем компонента, который нужно отключить. Uncheck the box next to the name of the feature you want to disable.
- Нажмите кнопку ОК. Select «OK»
Удаление компонентов Windows Server 2016 To remove Windows features on Windows Server 2016:
В сеансе PowerShell с повышенными привилегиями выполните следующие командлеты, чтобы отключить компоненты Контейнеры и (необязательно) Hyper-V. From an elevated PowerShell session, run the following cmdlets to disable the Containers and (optionally) Hyper-V features from your system:
Перезагрузка системы Reboot your system
Чтобы завершить удаление компонентов и очистить систему, выполните следующий командлет из сеанса PowerShell с повышенными привилегиями для перезагрузки системы: To finish uninstallation and cleanup, run the following cmdlet from an elevated PowerShell session to reboot your system:
Что такое Docker? What is Docker?
Docker — это проект с открытым исходным кодом для автоматизации развертывания приложений в виде переносимых автономных контейнеров, выполняемых в облаке или локальной среде. Docker is an open-source project for automating the deployment of applications as portable, self-sufficient containers that can run on the cloud or on-premises. Одновременно с этим, Docker — это компания, которая разрабатывает и продвигает эту технологию в сотрудничестве с поставщиками облачных служб, а также решений Linux и Windows, включая корпорацию Майкрософт. Docker is also a company that promotes and evolves this technology, working in collaboration with cloud, Linux, and Windows vendors, including Microsoft.
Рис. 2-2. Figure 2-2. Docker развертывает контейнеры на всех уровнях гибридного облака. Docker deploys containers at all layers of the hybrid cloud.
Контейнеры Docker могут работать в любой среде, например в локальном центре обработки данных, в службе стороннего поставщика или в облаке Azure. Docker containers can run anywhere, on-premises in the customer datacenter, in an external service provider or in the cloud, on Azure. Контейнеры образов Docker работают в исходном формате в Linux и Windows. Docker image containers can run natively on Linux and Windows. Но образы Windows будут выполняться только на узлах Windows, тогда как образы Linux — на узлах Linux или Windows (на данный момент с помощью виртуальной машины Linux Hyper-V). Термин «узлы» здесь означает физические серверы и виртуальные машины. However, Windows images can run only on Windows hosts and Linux images can run on Linux hosts and Windows hosts (using a Hyper-V Linux VM, so far), where host means a server or a VM.
Разработчики могут использовать среды разработки на базе Windows, Linux или macOS. Developers can use development environments on Windows, Linux, or macOS. На компьютере разработчика выполняется узел Docker, где развернуты образы Docker с создаваемым приложением и всеми его зависимостями. On the development computer, the developer runs a Docker host where Docker images are deployed, including the app and its dependencies. Разработчики, работающие в Linux или macOS, могут использовать узел Docker на базе Linux и создавать образы только для контейнеров Linux. Developers who work on Linux or on macOS use a Docker host that is Linux based, and they can create images only for Linux containers. (В macOS разработчики могут изменять код приложения и запускать интерфейс командной строки Docker, но на момент написания этой статьи запуск контейнеров непосредственно в macOS не поддерживается.) В Windows разработчики могут создавать образы для контейнеров Linux или Windows. (Developers working on macOS can edit code or run the Docker CLI from macOS, but as of the time of this writing, containers don’t run directly on macOS.) Developers who work on Windows can create images for either Linux or Windows Containers.
Docker предоставляет версию Docker Community Edition (CE) для Windows или macOS, которая позволяет размещать контейнеры в среде разработки и предоставляет дополнительные средства разработки. To host containers in development environments and provide additional developer tools, Docker ships Docker Community Edition (CE) for Windows or for macOS. Оба продукта устанавливают необходимую виртуальную машину (узел Docker) для размещения контейнеров. These products install the necessary VM (the Docker host) to host the containers. Docker также предлагает версию Docker Enterprise Edition (EE), которая предназначена для корпоративных разработчиков и ИТ-отделов, которые создают, распространяют и выполняют крупные и критически важные приложения в рабочей среде. Docker also makes available Docker Enterprise Edition (EE), which is designed for enterprise development and is used by IT teams who build, ship, and run large business-critical applications in production.
Для выполнения контейнеров Windows есть среды выполнения двух типов: To run Windows Containers, there are two types of runtimes:
Контейнеры Windows Server изолируют приложение с помощью технологии изоляции процесса и пространства имен. Windows Server Containers provide application isolation through process and namespace isolation technology. Контейнер Windows Server использует ядро совместно с узлом контейнеров и всеми остальными контейнерами на узле. A Windows Server Container shares a kernel with the container host and with all containers running on the host.
Контейнеры Hyper-V увеличивают изоляцию, обеспеченную контейнерами Windows Server, запуская каждый контейнер в оптимизированной виртуальной машине. Hyper-V Containers expand on the isolation provided by Windows Server Containers by running each container in a highly optimized virtual machine. В этой конфигурации ядро узла контейнера не используется совместно с контейнерами Hyper-V, что улучшает изоляцию. In this configuration, the kernel of the container host isn’t shared with the Hyper-V Containers, providing better isolation.
Образы для этих контейнеров создаются и работают одинаково. The images for these containers are created the same way and function the same. Различие заключается лишь в том, что для создания контейнера из образа с контейнером Hyper-V нужен дополнительный параметр. The difference is in how the container is created from the image running a Hyper-V Container requires an extra parameter. Дополнительные сведения см. в разделе Контейнеры Hyper-V. For details, see Hyper-V Containers.
Сравнение контейнеров Docker с виртуальными машинами Comparing Docker containers with virtual machines
На рисунке 2-3 показано сравнение между виртуальными машинами и контейнерами Docker. Figure 2-3 shows a comparison between VMs and Docker containers.
Виртуальные машины Virtual Machines | Контейнеры Docker Docker Containers |
---|---|
Виртуальные машины содержат приложение, необходимые библиотеки или двоичные файлы и всю операционную систему. Virtual machines include the application, the required libraries or binaries, and a full guest operating system. Полная виртуализация требует больше ресурсов, чем создание контейнеров. Full virtualization requires more resources than containerization. | Контейнеры включают в себя приложение и все его зависимости. Containers include the application and all its dependencies. Но они используют ядро ОС совместно с другими контейнерами, которые выполняются в изолированных процессах в пользовательском пространстве операционной системы узла. However, they share the OS kernel with other containers, running as isolated processes in user space on the host operating system. (Это не относится к контейнерам Hyper-V, где каждый контейнер запускается на отдельной виртуальной машине.) (Except in Hyper-V containers, where each container runs inside of a special virtual machine per container.) |
Рис. 2-3. Figure 2-3. Сравнение традиционных виртуальных машин с контейнерами Docker Comparison of traditional virtual machines to Docker containers
Для виртуальных машин на сервере узла создается три базовых уровня: самый нижний инфраструктурный слой; затем операционная система узла и низкоуровневая оболочка; и поверх этого каждая виртуальная машина использует собственную ОС и все необходимые библиотеки. For VMs, there are three base layers in the host server, from the bottom-up: infrastructure, Host Operating System and a Hypervisor and on top of all that each VM has its own OS and all necessary libraries. Для Docker сервер узла предоставляет только инфраструктуру и операционную систему, а также ядро контейнеров, которое изолирует контейнер с использованием базовых служб операционной системы. For Docker, the host server only has the infrastructure and the OS and on top of that, the container engine, that keeps container isolated but sharing the base OS services.
Так как контейнеры требуют гораздо меньше ресурсов (например, им не нужна полная ОС), их проще развертывать и они быстрее запускаются. Because containers require far fewer resources (for example, they don’t need a full OS), they’re easy to deploy and they start fast. Это позволяет повысить плотность развертываний, то есть запустить на одной единице оборудования больше служб и сократить затраты на них. This allows you to have higher density, meaning that it allows you to run more services on the same hardware unit, thereby reducing costs.
Запуск на одном ядре приводит к тому, что уровень изоляции будет ниже, чем на виртуальных машинах. As a side effect of running on the same kernel, you get less isolation than VMs.
Основная цель образа — привести среду (зависимости) к единообразию в различных развертываниях. The main goal of an image is that it makes the environment (dependencies) the same across different deployments. Это означает, что вы можете отладить образ на одном компьютере, а затем развернуть его на другом компьютере и получить ту же среду. This means that you can debug it on your machine and then deploy it to another machine with the same environment guaranteed.
Образ контейнера — это способ упаковки приложения или службы для надежного и воспроизводимого развертывания. A container image is a way to package an app or service and deploy it in a reliable and reproducible way. Можно сказать, что Docker является не только технологией, но еще философией и процессом. You could say that Docker isn’t only a technology but also a philosophy and a process.
При работе с Docker разработчики никогда не жалуются, что приложение работает только на локальном компьютере, но не в рабочей среде. When using Docker, you won’t hear developers say, «It works on my machine, why not in production?» Им достаточно сказать «Выполняется в Docker», так как упакованное приложение Docker будет выполняться в любой поддерживаемой среде Docker. Оно будет работать одинаково во всех сценариях развертывания (разработка, контроль качества, промежуточное размещение и рабочая среда). They can simply say, «It runs on Docker», because the packaged Docker application can be executed on any supported Docker environment, and it runs the way it was intended to on all deployment targets (such as Dev, QA, staging, and production).
Простая аналогия A simple analogy
Возможно, небольшая аналогия поможет вам быстрее освоить ключевую концепцию Docker. Perhaps a simple analogy can help getting the grasp of the core concept of Docker.
Вернемся ненадолго назад во времени, в 1950-е годы. Let’s go back in time to the 1950s for a moment. Тогда еще не было текстовых редакторов, и повсеместно использовались фотокопировальные устройства (то есть то, что тогда так называлось). There were no word processors, and the photocopiers were used everywhere (kind of).
Представьте, что вам понадобилось быстро подготовить наборы писем, чтобы отправить их с обычной бумажной почтой в настоящих конвертах с марками и доставить по домашнему адресу клиента (не забывайте, еще не существует электронной почты). Imagine you’re responsible for quickly issuing batches of letters as required, to mail them to customers, using real paper and envelopes, to be delivered physically to each customer’s address (there was no email back then).
В какой-то момент вы понимаете, что каждое письмо составлено из широкого набора абзацев, которые выбираются и упорядочиваются по мере необходимости с учетом назначения письма. Вы создаете систему, которая быстро создает нужные письма, и обоснованно надеетесь на существенную прибавку. At some point, you realize the letters are just a composition of a large set of paragraphs, which are picked and arranged as needed, according to the purpose of the letter, so you devise a system to issue letters quickly, expecting to get a hefty raise.
Вы создали простую систему со следующим алгоритмом: The system is simple:
У вас есть пачка прозрачных листов, каждый из которых содержит один абзац. You begin with a deck of transparent sheets containing one paragraph each.
Чтобы подготовить комплект писем, вы отбираете листы с нужными абзацами, собираете их в стопку и выравниваете так, чтобы все правильно читалось. To issue a set of letters, you pick the sheets with the paragraphs you need, then you stack and align them so they look and read fine.
Теперь вы помещаете готовый набор в фотокопировальное устройство и нажмите кнопку запуска, чтобы изготовить нужное количество копий. Finally, you place the set in the photocopier and press start to produce as many letters as required.
Это и есть основная концепция Docker в упрощенной форме. So, simplifying, that’s the core idea of Docker.
В Docker каждый слой представляет некоторый набор изменений, которые применяются к файловой системе после выполнения команды, такой как установка программы. In Docker, each layer is the resulting set of changes that happen to the filesystem after executing a command, such as, installing a program.
Если вы «посмотрите» на файловую систему после копирования очередного слоя, вы увидите все файлы в том состоянии, которое они приняли после установки программы. So, when you «look» at the filesystem after the layer has been copied, you see all the files, included the layer when the program was installed.
Такой образ можно рассматривать как дополнительный жесткий диск, доступный только для чтения, который готов к установке на «компьютер» с уже установленной операционной системой. You can think of an image as an auxiliary read-only hard disk ready to be installed in a «computer» where the operating system is already installed.
Соответственно, роль «компьютера» здесь выполняет контейнер, в который устанавливается жесткий диск этого образа. Similarly, you can think of a container as the «computer» with the image hard disk installed. Контейнер, как и обычный компьютер, можно включать и отключать. The container, just like a computer, can be powered on or off.