Разное

Docker start: docker start | Docker Documentation

Содержание

Шпаргалка с командами Docker / Блог компании Флант / Хабр

Прим. перев.: Неделю назад Aymen El Amri, руководящий компанией eralabs и создавший обучающий курс «Безболезненный Docker», опубликовал свой Docker Cheat Sheet — шпаргалку по основным командам Docker. Git-репозиторий этого документа на GitHub уже набрал 1000+ stars и несколько сторонних контрибьюторов, что подтвердило его актуальность и пользу.

Представленные здесь команды описаны минимально (с акцентом на читаемость как есть) и включают в себя установку Docker, работу с реестрами и репозиториями, контейнерами, образами, сетью, Docker Swarm. Ниже представлен перевод шпаргалки в её состоянии на 2 сентября с дополнениями из комментариев ниже.

Установка

Linux

curl -sSL https://get.docker.com/ | sh

Mac

Скачайте dmg по этой ссылке:

https://download.docker.com/mac/stable/Docker.dmg

Windows

Используйте MSI-инсталлятор:

https://download.docker.com/win/stable/InstallDocker.msi

Реестры и репозитории Docker

Вход в реестр

docker login
docker login localhost:8080

Выход из реестра

docker logout
docker logout localhost:8080

Поиск образа

docker search nginx
docker search nginx -- filter stars=3 --no-trunc busybox

Pull (выгрузка из реестра) образа

docker pull nginx
docker pull eon01/nginx localhost:5000/myadmin/nginx

Push (загрузка в реестр) образа

docker push eon01/nginx
docker push eon01/nginx localhost:5000/myadmin/nginx

Первые действия с контейнерами

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

docker create -t -i eon01/infinite --name infinite

Первый запуск контейнера

docker run -it --name infinite -d eon01/infinite

Переименование контейнера

docker rename infinite infinity

Удаление контейнера

docker rm infinite

Обновление контейнера

docker update --cpu-shares 512 -m 300M infinite

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

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

docker start nginx

Остановка

docker stop nginx

Перезагрузка

docker restart nginx

Пауза (приостановка всех процессов контейнера)

docker pause nginx

Снятие паузы

docker unpause nginx

Блокировка (до остановки контейнера)

docker wait nginx

Отправка SIGKILL (завершающего сигнала)

docker kill nginx

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

docker kill -s HUP nginx

Подключение к существующему контейнеру

docker attach nginx

Получение информации о контейнерах

Работающие контейнеры

docker ps
docker ps -a

Логи контейнера

docker logs infinite

Информация о контейнере

docker inspect infinite
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -q)

События контейнера

docker events infinite

Публичные порты

docker port infinite

Выполняющиеся процессы

docker top infinite

Использование ресурсов

docker stats infinite

Изменения в файлах или директориях файловой системы контейнера

docker diff infinite

Управление образами

Список образов

docker images

Создание образов

docker build .
docker build github.com/creack/docker-firefox
docker build - < Dockerfile
docker build - < context.tar.gz
docker build -t eon/infinite .
docker build -f myOtherDockerfile .
curl example.com/remote/Dockerfile | docker build -f - .

Удаление образа

docker rmi nginx

Загрузка репозитория в tar (из файла или стандартного ввода)

docker load < ubuntu.tar.gz
docker load --input ubuntu.tar

Сохранение образа в tar-архив

docker save busybox > ubuntu.tar

Просмотр истории образа

docker history

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

docker commit nginx

Тегирование образа

docker tag nginx eon01/nginx

Push (загрузка в реестр) образа

docker push eon01/nginx

Сеть

Создание сети

docker network create -d overlay MyOverlayNetwork
docker network create -d bridge MyBridgeNetwork
docker network create -d overlay \
  --subnet=192.168.0.0/16 \
  --subnet=192.170.0.0/16 \
  --gateway=192.168.0.100 \
  --gateway=192.170.0.100 \
  --ip-range=192.168.1.0/24 \
  --aux-address="my-router=192.168.1.5" --aux-address="my-switch=192.168.1.6" \
  --aux-address="my-printer=192.170.1.5" --aux-address="my-nas=192.170.1.6" \
  MyOverlayNetwork

Удаление сети

docker network rm MyOverlayNetwork

Список сетей

docker network ls

Получение информации о сети

docker network inspect MyOverlayNetwork

Подключение работающего контейнера к сети

docker network connect MyOverlayNetwork nginx

Подключение контейнера к сети при его запуске

docker run -it -d --network=MyOverlayNetwork nginx

Отключение контейнера от сети

docker network disconnect MyOverlayNetwork nginx

Очистка Docker

Удаление работающего контейнера

docker rm nginx

Удаление контейнера и его тома (volume)

docker rm -v nginx

Удаление всех контейнеров со статусом exited

docker rm $(docker ps -a -f status=exited -q)

Удаление всех остановленных контейнеров

docker container prune
docker rm `docker ps -a -q`

Удаление контейнеров, остановленных более суток назад

docker container prune --filter "until=24h"

Удаление образа

docker rmi nginx

Удаление неиспользуемых (dangling) образов

docker image prune
docker rmi $(docker images -f dangling=true -q)

Удаление неиспользуемых (dangling) образов даже с тегами

docker image prune -a

Удаление всех образов

docker rmi $(docker images -a -q)

Удаление всех образов без тегов

docker rmi -f $(docker images | grep "^<none>" | awk "{print $3}")

Остановка и удаление всех контейнеров

docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)

Удаление неиспользуемых (dangling) томов

docker volume prune
docker volume rm $(docker volume ls -f dangling=true -q)

Удаление неиспользуемых (dangling) томов по фильтру

docker volume prune --filter "label!=keep"

Удаление неиспользуемых сетей

docker network prune

Удаление всех неиспользуемых объектов

docker system prune

По умолчанию для Docker 17.06.1+ тома не удаляются. Чтобы удалились и они тоже:

docker system prune --volumes

Docker Swarm

Установка Docker Swarm

curl -ssl https://get.docker.com | bash

Прим. перев.: в Docker версий 1.12.0+ ничего дополнительно устанавливать не требуется, т.к. Docker Swarm встроен в Docker Engine в виде специального режима (Swarm mode).

Инициализация Swarm

docker swarm init --advertise-addr 192.168.10.1

Подключение рабочего узла (worker) к Swarm

docker swarm join-token worker

Подключение управляющего узла (manager) к Swarm

docker swarm join-token manager

Список сервисов

docker service ls

Список узлов

docker node ls

Создание сервиса

docker service create --name vote -p 8080:80 instavote/vote

Список заданий Swarm

docker service ps

Масштабирование сервиса

docker service scale vote=3

Обновление сервиса

docker service update --image instavote/vote:movies vote
docker service update --force --update-parallelism 1 --update-delay 30s nginx
docker service update --update-parallelism 5--update-delay 2s --image instavote/vote:indent vote
docker service update --limit-cpu 2 nginx
docker service update --replicas=5 nginx

P.S.

Прим. перев.: Напомню, что оригинальная (англоязычная) версия Docker Cheat Sheet доступна и обновляется в Git-репозитории. Автор будет рад исправлениям/пополнениям от сообщества.

Читайте также в нашем блоге:

Образы и контейнеры Docker в картинках / Хабр

Перевод поста Visualizing Docker Containers and Images, от новичка к новичкам, автор на простых примерах объясняет базовые сущности и процессы в использовании docker.

Если вы не знаете, что такое Docker или не понимаете, как он соотносится с виртуальными машинами или с инструментами configuration management, то этот пост может показаться немного сложным.

Пост предназначен для тех, кто пытается освоить docker cli, понять, чем отличается контейнер и образ. В частности, будет объяснена разница между просто контейнером и запущенным контейнером.

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

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

Хорошим примером является Git. Я не мог понять Git, пока не понял его базовую модель, включая trees, blobs, commits, tags, tree-ish и прочее. Я думаю, что люди, не понимающие внутренности Git, не могут мастерски использовать этот инструмент.

Определение образа (Image)

Визуализация образа представлена ниже в двух видах. Образ можно определить как «сущность» или «общий вид» (union view) стека слоев только для чтения.

Слева мы видим стек слоев для чтения. Они показаны только для понимания внутреннего устройства, они доступны вне запущенного контейнера на хост-системе. Важно то, что они доступны только для чтения (иммутабельны), а все изменения происходят в верхнем слое стека. Каждый слой может иметь одного родителя, родитель тоже имеет родителя и т.д. Слой верхнего уровня может быть использован как UnionFS (AUFS в моем случае с docker) и представлен в виде единой read-only файловой системы, в которой отражены все слои. Мы видим эту «сущность» образа на рисунке справа.

Если вы захотите посмотреть на эти слои в первозданном виде, вы можете найти их в файловой системе на хост-машине. Они не видны напрямую из запущенного контейнера. На моей хост-машине я могу найти образы в /var/lib/docker/aufs.

# sudo tree -L 1 /var/lib/docker/
/var/lib/docker/
├── aufs
├── containers
├── graph
├── init
├── linkgraph.db
├── repositories-aufs
├── tmp
├── trust
└── volumes

7 directories, 2 files

Определение контейнера (Container)

Контейнер можно назвать «сущностью» стека слоев с верхним слоем для записи.

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

Контейнер определяет лишь слой для записи наверху образа (стека слоев для чтения). Он не запущен.

Определение запущенного контейнера

Запущенный контейнер — это «общий вид» контейнера для чтения-записи и его изолированного пространства процессов. Ниже изображен контейнер в своем пространстве процессов.

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

Чтобы проверить это, выполните команду на хост-машине:

docker run ubuntu touch happiness.txt

Вы можете найти новый файл в слое для записи на хост-машине, даже если контейнер не запущен.

# find / -name happiness.txt
/var/lib/docker/aufs/diff/860a7b...889/happiness.txt

Определение слоя образа (Image layer)

Наконец, мы определим слой образа. Изображение ниже представляет слой образа и дает нам понять, что слой — это не просто изменения в файловой системе.

Метаданные — дополнительная информация о слое, которая позволяет докеру сохранять информацию во время выполнения и во время сборки. Оба вида слоев (для чтения и для записи) содержат метаданные.

Кроме того, как мы уже упоминали раньше, каждый слой содержит указатель на родителя, используя id (на изображении родительские слои внизу). Если слой не указывает на родительский слой, значит он наверху стека.

Расположение метаданных

На данный момент (я понимаю, что разработчики docker могут позже сменить реализацию), метаданные слоев образов (для чтения) находятся в файле с именем «json» в папке /var/lib/docker/graph/id_слоя:

/var/lib/docker/graph/e809f156dc985.../json

где «e809f156dc985…» — урезанный id слоя.

Свяжем все вместе

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

docker create <image-id>

До:

После:

Команда ‘docker create’ добавляет слой для записи наверх стека слоев, найденного по <image-id>. Команда не запускает контейнер.

docker start <container-id>

До:

После:

Команда ‘docker start’ создает пространство процессов вокруг слоев контейнера. Может быть только одно пространство процессов на один контейнер.

docker run <image-id>

До:

После:

Один из первых вопросов, который задают люди (я тоже задавал): «В чем разница между ‘docker start’ и ‘docker run’?» Одна из первоначальных целей этого поста — объяснить эту тонкость.

Как мы видим, команда ‘docker run’ находит образ, создает контейнер поверх него и запускает контейнер. Это сделано для удобства и скрывает детали двух команд.

Продолжая сравнение с освоением Git, я скажу, что ‘docker run’ очень похожа на ‘git pull’. Так же, как и ‘git pull’ (который объединяет ‘git fetch’ и ‘git merge’), команда ‘docker run’ объединяет две команды, которые могут использоваться и независимо. Это удобно, но поначалу может ввести в заблуждение.

docker ps

Команда ‘docker ps’ выводит список запущенных контейнеров на вашей хост-машине. Важно понимать, что в этот список входят только запущенные контейнеры, не запущенные контейнеры скрыты. Чтобы посмотреть список всех контейнеров, нужно использовать следующую команду.

docker ps -a

Команда ‘docker ps -a’, где ‘a’ — сокращение от ‘all’ выводит список всех контейнеров, независимо от их состояния.

docker images

Команда ‘docker images’ выводит список образов верхнего уровня (top-level images). Фактически, ничего особенного не отличает образ от слоя для чтения. Только те образы, которые имеют присоединенные контейнеры или те, что были получены с помощью pull, считаются образами верхнего уровня. Это различие нужно для удобства, так как за каждым образом верхнего уровня может быть множество слоев.

docker images -a

Команда ‘docker images -a’ выводит все образы на хост-машине. Это фактически список всех слоев для чтения в системе. Если вы хотите увидеть все слои одного образа, воспользуйтесь командой ‘docker history’.

docker stop <container-id>

До:

После:

Команда ‘docker stop’ посылает сигнал SIGTERM запущенному контейнеру, что мягко останавливает все процессы в пространстве процессов контейнера. В результате мы получаем не запущенный контейнер.

docker kill <container-id>

До:

После:

Команда ‘docker kill’ посылает сигнал SIGKILL, что немедленно завершает все процессы в текущем контейнере. Это почти то же самое, что нажать Ctrl+\ в терминале.

docker pause <container-id>

До:

После:

В отличие от ‘docker stop’ и ‘docker kill’, которые посылают настоящие UNIX сигналы процессам контейнера, команда ‘docker pause’ используют специальную возможность cgroups для заморозки запущенного пространства процессов. Подробности можно прочитать здесь, если вкратце, отправки сигнала Ctrl+Z (SIGTSTP) не достаточно, чтобы заморозить все процессы в пространстве контейнера.

docker rm <container-id>

До:

После:

Команда ‘docker rm’ удаляет слой для записи, который определяет контейнер на хост-системе. Должна быть запущена на остановленном контейнерах. Удаляет файлы.

docker rmi <image-id>

До:

После:

Команда ‘docker rmi’ удаляет слой для чтения, который определяет «сущность» образа. Она удаляет образ с хост-системы, но образ все еще может быть получен из репозитория через ‘docker pull’. Вы можете использовать ‘docker rmi’ только для слоев верхнего уровня (или образов), для удаления промежуточных слоев нужно использовать ‘docker rmi -f’.

docker commit <container-id>

До:
или

После:

Команда ‘docker commit’ берет верхний уровень контейнера, тот, что для записи и превращает его в слой для чтения. Это фактически превращает контейнер (вне зависимости от того, запущен ли он) в неизменяемый образ.

docker build

До:
Dockerfile и

После:


Со многими другими слоями.

Команда ‘docker build’ интересна тем, что запускает целый ряд команд:

На изображении выше мы видим, как команда build использует значение инструкции FROM из файла Dockerfile как базовый образ после чего:

1) запускает контейнер (create и start)

2) изменяет слой для записи

3) делает commit

На каждой итерации создается новый слой. При исполнении ‘docker build’ может создаваться множество слоев.

docker exec <running-container-id>

До:

После:

Команда ‘docker exec’ применяется к запущенному контейнеру, запускает новый процесс внутри пространства процессов контейнера.

docker inspect <container-id> | <image-id>

До:
или

После:

Команда ‘docker inspect’ получает метаданные верхнего слоя контейнера или образа.

docker save <image-id>

До:

После:

Команда ‘docker save’ создает один файл, который может быть использован для импорта образа на другую хост-систему. В отличие от команды ‘export’, она сохраняет все слои и их метаданные. Может быть применена только к образам.

docker export <container-id>

До:

После:

Команда ‘docker export’ создает tar архив с содержимым файлов контейнера, в результате получается папка, пригодная для использования вне docker. Команда убирает слои и их метаданные. Может быть применена только для контейнеров.

docker history <image-id>

До:

После:

Команда ‘docker history’ принимает <image-id> и рекурсивно выводит список всех слоев-родителей образа (которые тоже могут быть образами)

Итог

Я надеюсь, вам понравилась эта визуализация контейнеров и образов. Есть много других команд (pull, search, restart, attach и другие), которые могут или не могут быть объяснены моими сравнениями.

Docker + Docker Compose – запуск контейнеров для вебразработки – Atlogex Blog

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

 

Docker был создан в 2013 году для собственных нужд компании dotCloud (Paas платформа). За пять лет своего существования Docker стал одним из самых популярных стартапов в виду своей полезности и удобности как для разработки так и для использования в продакшене. На текущий момент начиная работу над серьёзным проектом в команде, вам почти наверника предложат развернуть окружения для него именно в докере. 

 

Нужно ли изучать докер?

2017 год для Docker Inc выдался не особо удачным ввиду внутрикомандных разногласий и судя по блогам создателей — в компании есть небольшие проблемы с определением курса её дальнейшего развития (об этом можно почитать на хабре в статье с громким названием — Докер мертв). Тем не менее Docker остается популярен, в большинстве вакансий уровня выше junior, знание докера чаще может является хоть и не основным, но желательным требованием. К тому же многих устраивает текущий инструментарий и менять его нет смысла (список аналогичных Докеру систем).

 

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

  • Быстрое развертывание и загрузка боевого окружения;
  • Масштабируемость — локальная машина разработчика или кластер с системой оркестрации и балансировкой нагрузки;
  • Модульность — отдельные контейнеры или микросервисная архитектура вашего приложения;
  • и другие достоинство можно посмотреть здесь.

Иными словами для разработчика докер хорош тем, что вам не надо настраивать сервер и каждый раз устанавливать разные компоненты, долго их конфигурировать, да ещё пытаться создать окружение, которое будет похоже на боевое, да ещё и ставить разные компонеты в отдельности для каждого проекта захламляя основную ОС и создавая конфликты между установленными пакетами. С Docker, вы просто заполняете конфигурационный файл и командой в консоли запускаете «виртуалку» с вашим проектом. После чего, текущую конфигурацию можно будет также развернуть на собственном сервере или на облачных платформах типа Amazon Web Server. Либо эту же конфигурацию запустить на другом проекте и Docker будет переиспользовать контейнеры, которые у него уже есть.

 

Docker — установка

Для каждой системы установка докера несколько отличается. Инструкции для разных ОС на официальном сайте:

Официально докер не поддерживает Windows 7, но с помощью Docker Toolbox установить можно, хотя и будет использоваться VirtualBox.  Также подробнее остановимся на установке Docker в Linux, а именно в дистрибутив Debian. Кроме того помимо Docker, установим Docker Compose для того чтобы управлять докер контейнерами.

 

Установка Docker и Docker Compose на Debian 9

1 — Установим необходимые компоненты

$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common



$ sudo apt-get install \

     apt-transport-https \

     ca-certificates \

     curl \

     gnupg2 \

     software-properties-common

2 — Добавим репозиторий откуда будем скачивать пакеты докера, предварительно добавим ключ для этого репозитория. Итак, ключ —

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add —



curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add —

3 — А теперь и сам репозиторий:

$ sudo add-apt-repository \
«deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo «$ID») \
$(lsb_release -cs) \
stable»



$ sudo add-apt-repository \

   «deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo «$ID») \

   $(lsb_release -cs) \

   stable»

4 — Обновим список репозиториев —

5 — И вот, мы уже ставим Docker —

$ sudo apt-get install docker-ce



$ sudo apt-get install docker-ce

Проверяем откликается ли, только что установленный Docker, запросив у него информацию о версии —

В консоль должна быть выведена текущая версия Docker. Если команда docker не найдена, значит на каком-то из этапов у вас была ошибка. Ищите эту ошибку в консоле и гуглите решение помог так помог.

 

Устанавливаем Docker Compose 

Официальная документация — Install Docker Compose и официальный гитхаб репозиторий — Compose. 

Качаем файлы Docker Compose (предварительно откройте гитхаб Docker-Compose и посмотрите какая версия последняя, на текущий момент это 1.18.0 вставляем версию в ссылку после «/download/») —

sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose



sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

Затем раздаём права

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



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

Проверяем работоспособность — 

Все команды докер композ для командной строки  можно посмотреть здесь. Если возникли проблемы с этим способом установки Docker-Compose, в официальной документации есть альтернативный способ установки с помощью Pip.

 

<del>Забавно, когда я впервые знакомился с Docker и Docker Compose у меня была уйма ошибок (собственно по этому и затеял написание инструкции установки, которая не особо то в итоге отличается от мануала), но при написании статьи в чистой тестовой Debian всё прошло как по маслу, даже поделиться нечем    </del>

Во время экспериментов ошибок поддобавилось, о них чуть ниже.

 

Docker — возможные проблемы

— Ошибка 1396 при создания пользователя:

Docker mysql ERROR 1396 (HY000): Operation CREATE USER failed for ‘root’@’%’

Конфигурация mysql не верна. Вероятно вы задали директиву «MYSQL_USER» равную «root», а это стандартное имя пользователя MySQL и при попытки создать вторую учетную запись с одинаковым именем вываливается эта ошибка. Используйте логин отличный от «root».

 

— Ошибка инициализации базы данных без пароля для root пользователя:

error: database is uninitialized and password option is not specified 

mysql exited with code 1

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

  • MYSQL_ROOT_PASSWORD — задать пароль для root пользователя;
  • MYSQL_ALLOW_EMPTY_PASSWORD — разрешить разворачивать MySQL без пароля;
  • MYSQL_RANDOM_ROOT_PASSWORD — рандомный пароль.

Добавьте, директиву «MYSQL_ROOT_PASSWORD» с вашим паролем в docker-compose.yml  и перезапустите Docker (пример файла «docker-compose.yml» с этой директивой чуть ниже).

 

Docker — конфигурирование отдельного проекта

Для начала определимся из каких компонентов будет состоять окружение. В качестве простого примера поднимем вебсервер LEMP (Linux — Engine-X/nginx — MySQL — PHP). Создадим папку проекта, в которой будут конфигурационные файлы и папка с исходными кодом проекта. Настройки будем хранить в папке проекта с названием «docker». Общая структура следующая:

  • /docker/ — папка с настройками контейнеров:
    • /nginx/nginx.conf — папка с файлом настройки сервера nginx;
    • /php-fpm/Dockerfile — папка с файлом сборки контейнера с PHP;
  • /db_data/ — папка с данными из БД;
  • /www/ — папка с кодом проекта;
  • /docker-compose.yml — конфигурация Docker Compose.

 

1. Создаём конфигурационные файлы

В проекте создаём конфигурационный файл docker-compose.yml 

version: «3.1»
services:

mysql:
image: mysql:8.0
container_name: atlogex-mysql
working_dir: /application
volumes:
— ./db_data:/application
environment:
— MYSQL_ROOT_PASSWORD=112233
— MYSQL_DATABASE=db
— MYSQL_USER=atlogex
— MYSQL_PASSWORD=123456
ports:
— «8082:3306″


webserver:
image: nginx:alpine
container_name: atlogex-webserver
working_dir: /apl
volumes:
— ./docker/nginx/nginx.conf:/etc/nginx/conf.d/nginx.conf/
ports:
— «80:80″

php-fpm:
build: docker/php-fpm
container_name: atlogex-php-fpm
working_dir: /apl
volumes:
— ./www:/var/apl
— ./docker/php-fpm/php-ini-overrides.ini:/etc/php/7.1/fpm/conf.d/99-overrides.ini


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

version: «3.1»

services:

 

    mysql:

      image: mysql:8.0

      container_name: atlogex-mysql

      working_dir: /application

      volumes:

        — ./db_data:/application

      environment:

        — MYSQL_ROOT_PASSWORD=112233

        — MYSQL_DATABASE=db

        — MYSQL_USER=atlogex

        — MYSQL_PASSWORD=123456

      ports:

        — «8082:3306»

 

 

    webserver:

      image: nginx:alpine

      container_name: atlogex-webserver

      working_dir: /apl

      volumes:

          — ./docker/nginx/nginx.conf:/etc/nginx/conf.d/nginx.conf/

      ports:

        — «80:80»

 

    php-fpm:

      build: docker/php-fpm

      container_name: atlogex-php-fpm

      working_dir: /apl

      volumes:

        — ./www:/var/apl

        — ./docker/php-fpm/php-ini-overrides.ini:/etc/php/7.1/fpm/conf.d/99-overrides.ini

Разбираем по порядку.

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

services — контейнеры и их настройки для вашего приложения. 

Например контейнер с БД:

mysql:
image: mysql:8.0
container_name: atlogex-mysql
working_dir: /application
volumes:
— ./db_data:/application
environment:
— MYSQL_ROOT_PASSWORD=112233
— MYSQL_DATABASE=db
— MYSQL_USER=atlogex
— MYSQL_PASSWORD=123456
ports:
— «8082:3306»



mysql:

      image: mysql:8.0

      container_name: atlogex-mysql

      working_dir: /application

      volumes:

        — ./db_data:/application

      environment:

        — MYSQL_ROOT_PASSWORD=112233

        — MYSQL_DATABASE=db

        — MYSQL_USER=atlogex

        — MYSQL_PASSWORD=123456

      ports:

        — «8082:3306»

image — образ который будет скачен из докеровского репозитория и использован для того чтобы развернуть текущий контейнер;

container_name — произвольное имя контейнера;

working_dir — директория внутри контейнера где будут размещаться данные

volumes — директория для данных, отсюда будут перекидываться данные в докер контейнер и докер контейнер будет сюда же сохранять данные.

enviroments — настройки контейнера;

posrts — порты для связи контейнера и вашей операционной системы.

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

 

Подробнее о директиве volumes — указанные в ней параметры осуществляют, так называемое, монтирование директории из хост системы в виртуальную (либо монтирование директории из одного контейнера в другой).

Монтирование директории (сквозная директория) из вашей операционной системы в контейнер позволяет, например, сохранять MySQL данные, которые не должны оставаться в контейнере (в соответствии с основным подходом — контейнер это неизменяемая во время работы сущность), а также подгружать в контейнер файлы проекта, например файлы сайта, которые можно будет править и изменения тут же будут применены в контейнеры (подход только для разработки, для продакшена файлы проекта должны быть скопированы в контейнер).

 

Настройки контейнера webserver

В качестве вебсервера мы используем nginx, с прокси запросами к php-fpm для php скриптов. Для настройки nginx с помощью директивы volume cмантируем в контейнер конфигурационный файл nginx (todo: конфиг nginx лучше копировать, по сути изменять на лету его бесполезно), который лежит в папке с конфигурацией докер контейнеров «./docker/nginx/nginx.conf». Конфигурация nginx — 

server {
listen 80 default;
server_name yoursite.lcl www.yoursite.lcl;
client_max_body_size 108M;

access_log /var/log/nginx/application.access.log;


root /var/apl/;
index index.php;

location / {
index index.php index.html index.htm;
}


location ~ \.php$ {

fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE «error_log=/var/log/nginx/application_php_errors.log»;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
}
}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

server {

    listen 80 default;

    server_name  yoursite.lcl www.yoursite.lcl;

       client_max_body_size 108M;

 

    access_log /var/log/nginx/application.access.log;

 

 

    root /var/apl/;

    index index.php;

  

    location / {

            index  index.php index.html index.htm;

    }

 

 

    location ~ \.php$ {

 

        fastcgi_pass php-fpm:9000;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        fastcgi_param PHP_VALUE «error_log=/var/log/nginx/application_php_errors.log»;

        fastcgi_buffers 16 16k;

        fastcgi_buffer_size 32k;

        include fastcgi_params;

    }

}

 

 

2. Собираем контейнеры

Некоторые контейнеры требуют предварительной сборки. В нашем примере предварительной сборки требует контейнер «php-fpm», обратите внимание на команду build в секции параметров этого контейнера в конфигурации docker-compose.yml. Контейнер собирается уже из Docker файла (файл с названием Dockerfile), который можно положить в отдельную папку с конфигурациями контейнеров, в этом проекте это путь «./docker/php-fpm/Dockerfile».

Чтобы создать PHP образ с необходимыми библиотеками, можно воспользоваться документацией или автогенератором конфигураций. Содержимое файла для контейнера с PHP 7 будет следующие — 

FROM phpdockerio/php71-fpm:latest
WORKDIR «/application»

# Install selected extensions and other stuff
RUN apt-get update \
&& apt-get -y —no-install-recommends install php7.1-mysql \
&& apt-get -y install git \
&& apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*



FROM phpdockerio/php71-fpm:latest

WORKDIR «/application»

 

# Install selected extensions and other stuff

RUN apt-get update \

    && apt-get -y —no-install-recommends install  php7.1-mysql \

    && apt-get -y install git \

    && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*

 

Команда для сборки — 

docker-compose build

 

 

3. Запускаем Docker

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

docker-compose up

Если что-то пошло не так, остановить Docker можно командой — «docker-compose down», перезапустить — «docker-compose restart».

Если вы изменяли настройки в контейнерах которые предварительно нужно собирать, то такие контейнеры нужно пересобрать, команда для пересборки проекта на лету (минуя ввод команд остановки, пересборки и запуска) — 

docker-compose up -d —force-recreate —build

Директива «-d» запустит докер в фоновом режиме не блокируя консоль после старта.

 

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

docker-compose restart

Чтобы ускорить процесс можно добавить конкретный контейнер, который нужно перезагрузить, например при конфигурировании nginx, перезагружать только контейнер webserver

docker-compose restart webserver

 

4. Проверяем работоспособность

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

docker-compose ps

Вывод будет примерно таким — 

Name Command State Ports
———————————————————————————-
atlogex-mysql docker-entrypoint.sh mysqld Up 0.0.0.0:8082->3306/tcp
atlogex-php-fpm /bin/sh -c /usr/bin/php-fpm Up 9000/tcp
atlogex-webserver nginx -g daemon off; Up 0.0.0.0:80->80/tcp



       Name                     Command             State           Ports        

———————————————————————————-

atlogex-mysql          docker-entrypoint.sh mysqld   Up      0.0.0.0:8082->3306/tcp

atlogex-php-fpm        /bin/sh -c /usr/bin/php-fpm   Up      9000/tcp              

atlogex-webserver      nginx -g daemon off;          Up      0.0.0.0:80->80/tcp    

Из этого листинга мы видим, что nginx и соответственно сайт будут доступны на стандартном 80 порту (нет смысла добавлять порт 80 к адресу сайта или ip адресу в адресной строке, т.к. порт 80 используется по умолчанию), а MySQL на 8082 порту.

Проверим работоспособность сайта, он должен открыться по следующим адресам:

Для того чтобы сайт открывался по ЧПУ адресу, нужно отредактировать файл /etc/hosts (Linux — «/etc/hosts», Windows — «C:\Windows\System32\drivers\etc\hosts») добавив строку:

127.0.0.1 yoursite.lcl

 

Запущенные контейнерыРаботащий nginxРаботающий сайт

 

MySQL будет доступна по адресу 127.0.0.1:8082 , но просто из браузера посмотреть её нельзя, нужно либо подключиться к этому адресу с помощью программ для редактирования БД, например Workbench, либо поставить в докер контейнер PhpMyAdmin или залить PhpMyAdmin в отдельную папку в директории проекта.

 

  Файлы данной конфигурации можно посмотреть в репозитории — https://github.com/Atlogex/axdocker-lemp

 

Docker — конфигурирование сервера под несколько проектов/сайтов (только для разработки)

В первую очередь мне понравился Docker за то, что на пользовательской Linux системе, можно отделить компоненты разработки от системы и друг от друга (на момент знакомства с Docker у меня не было проекта вписывающегося в основную парадигму Docker). Например, не ставить LAMP или Apache в систему, а сделать несколько серверов в отдельных каталогах и потом в эти каталоги складывать проекты которые будут работать в готовом окружении, которое можно запускать когда понадобиться (видимо сказывается опыт разработки под Windows и желание засунуть в Linux свой вариант Опенсервера и для таких как я наверняка уже есть отдельный котёл или, если вы поклонник Данте,  круг).  Этот вариант наверняка противоречит философии контейнеризации, да и врядли кто-то соберется использовать такой вариант в проде, но тем не менее, предупреждение — дальнейшая инструкция только для разработки, не стоит применять эти конфиги в боевом окружении.

 

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

  • conf — конфигурационные файлы контейнеров;
    • nginx 
    • php-fpm
      • Dockerfile — докер файл для сборки php-fpm
  • db_data — файлы базы данных;
  • projects — сайты и веб приложения
  • docker-compose.yml

Примерная структура сервера для нескольких проектов

Конфигурация docker-compose.yml

Конфигурация nginx с автоопределением директорий проектов и использования названия директорий как урл (подробнее здесь) — 

server {
listen 80 default;
#server_name yii1.lcl;

server_name _; # конфиг применим для любого сайта

set $sathost $host; # В sathost будет лежать имя сайта. Так же должна называться директрия с сайтом
# убираем www
if ( $host ~ ^(www\.)?(.+)$ ) {
set $sathost $2;
}

root /var/apl/$sathost; # корень сайта определяем автоматически


client_max_body_size 108M;

access_log /var/log/nginx/application.access.log;

index index.php;

if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}


location ~ \.php$ {

fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE «error_log=/var/log/nginx/application_php_errors.log»;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
}

}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

server {

    listen 80 default;

    #server_name  yii1.lcl;

 

    server_name _;  # конфиг применим для любого сайта

 

set $sathost $host;  # В sathost будет лежать имя сайта. Так же должна называться директрия с сайтом

# убираем www

if ( $host ~ ^(www\.)?(.+)$ ) {

set $sathost $2;

}

root   /var/apl/$sathost; # корень сайта определяем автоматически

 

                

    client_max_body_size 108M;

 

    access_log /var/log/nginx/application.access.log;

 

    index index.php;

 

    if (!-e $request_filename) {

        rewrite ^.*$ /index.php last;

    }

 

 

    location ~ \.php$ {

 

        fastcgi_pass php-fpm:9000;

        fastcgi_index index.php;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        fastcgi_param PHP_VALUE «error_log=/var/log/nginx/application_php_errors.log»;

        fastcgi_buffers 16 16k;

        fastcgi_buffer_size 32k;

        include fastcgi_params;

    }

 

}

 

Помимо этого, сайты нужно будет не забыть добавить в hosts файл вашей системы, для того чтобы они были доступны по именам, а не IP адресу.

 

Полезные материалы и ссылки:

  • Исходники примера на github — https://github.com/Atlogex/axdocker-lemp
  • Что такое Docker и зачем он нужен — https://habrahabr.ru/post/343572/
  • Интерактивное обучение — http://training.play-with-docker.com 
  • Автогенерация конфигов для PHP проектов — https://phpdocker.io/generator
  • Docker + Ansimble + Docker Swarn: cвой облачный хостинг — https://habrahabr.ru/post/261415/
  • 12 факторов: методолгия построения микросервисных приложений — https://12factor.net/ru/

Загрузка…

команды / Блог компании RUVDS.com / Хабр

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

→ Часть 1: основы

→ Часть 2: термины и концепции

→ Часть 3: файлы Dockerfile

→ Часть 4: уменьшение размеров образов и ускорение их сборки

→ Часть 5: команды

→ Часть 6: работа с данными

Обзор

Давайте вспомним о том, что образы Docker создают на основе файлов Dockerfile, описывающих всё то, что нужно для сборки образов. Кроме того, не будем забывать и о том, что контейнер — это образ Docker, вызванный к жизни. Для того чтобы эффективно пользоваться командами Docker, в первую очередь нужно выяснить — с чем вы имеете дело — с образом или с контейнером. Если подумать об образах и контейнерах, то можно понять, что образ Docker может либо существовать, либо не существовать. То же самое можно сказать и о контейнерах Docker. Существующий контейнер Docker, кроме того, может пребывать либо в работающем, либо в неработающем состоянии.

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

Общие сведения о командах Docker

Вот кое-что, о чём полезно знать тем, кто хочет работать с Docker:

  • Команды интерфейса командной строки Docker, используемые для управления чем-либо, начинаются с ключевого слова docker, за которым идёт пробел, затем идёт указание на то, на что именно будет направлена некая команда, потом ещё один пробел, а потом следует сама команда. Например, именно так построена такая команда: docker container stop.
  • Если команда направлена на конкретный образ или контейнер, то в ней используется имя или идентификатор такого образа или контейнера.

Например, команда docker container run my_app — это команда для создания и запуска контейнера с именем my_app. В примерах, которые будут приведены ниже, контейнеры мы будем называть my_container, образы — my_image, теги — my_tag, и так далее.

Сначала мы будем рассматривать саму команду, потом — флаги, которые можно с ней использовать, если такие флаги существуют. Если перед флагом стоит два тире — то это его полная форма, флаг с одним тире — это сокращённый вариант некоего флага. Действуют они одинаково. Например, -p — это сокращённая форма флага --port.

Цель этого материала заключается в том, чтобы дать вам общие сведения о командах Docker. Так вы, имея общее представление о них и зная о возможностях платформы, доступных благодаря этим командам, сможете, при необходимости, найти подробные сведения о них. Команды, о которых пойдёт речь, испытаны на ОС семейства Linux с использованием движка Docker версии 18.09.1 и API версии 1.39.

Примечание о командах, поддерживаемых Docker CLI 1.13

В интерфейсе командной строки Docker версии 1.13 представлены обновлённые, логически сгруппированные команды. При этом старые команды всё ещё работают, но новыми пользоваться легче, особенно — начинающим. Речь идёт, например, о том, что в версии 1.12 использовалась команда вида docker create, а в версии 1.13 стала доступна команда docker container create. Сведения о соответствии старых и новых команд можно найти здесь.

Сначала мы посмотрим на команды, предназначенные для управления контейнерами, затем обсудим управление образами.

Команды для управления контейнерами

Общая схема команд для управления контейнерами выглядит так:

docker container my_command

Вот команды, которые могут быть подставлены туда, где мы использовали my_command:

  • create — создание контейнера из образа.
  • start — запуск существующего контейнера.
  • run — создание контейнера и его запуск.
  • ls — вывод списка работающих контейнеров.
  • inspect — вывод подробной информации о контейнере.
  • logs — вывод логов.
  • stop — остановка работающего контейнера с отправкой главному процессу контейнера сигнала SIGTERM, и, через некоторое время, SIGKILL.
  • kill — остановка работающего контейнера с отправкой главному процессу контейнера сигнала SIGKILL.
  • rm — удаление остановленного контейнера.

Команды для управления образами

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

docker image my_command

Вот некоторые из команд этой группы:

  • build — сборка образа.
  • push — отправка образа в удалённый реестр.
  • ls — вывод списка образов.
  • history — вывод сведений о слоях образа.
  • inspect — вывод подробной информации об образе, в том числе — сведений о слоях.
  • rm — удаление образа.

Разные команды

  • docker version — вывод сведений о версиях клиента и сервера Docker.
  • docker login — вход в реестр Docker.
  • docker system prune — удаление неиспользуемых контейнеров, сетей и образов, которым не назначено имя и тег.

Теперь рассмотрим эти команды подробнее.

Контейнеры

▍Начало существования контейнера

На начальном этапе работы с контейнерами используются команды create, start и run. Они применяются, соответственно, для создания контейнера, для его запуска, и для его создания и запуска.

Вот команда для создания контейнера из образа:

docker container create my_repo/my_image:my_tag

В следующих примерах конструкция my_repo/my_image:my_tag будет сокращена до my_image.
Команда create принимает множество флагов. Например, её можно записать в таком виде:

docker container create -a STDIN my_image

Флаг -a представляет собой краткую форму флага --attach. Этот флаг позволяет подключить контейнер к STDIN, STDOUT или STDERR.

После того, как контейнер создан, его можно запустить следующей командой:

docker container start my_container

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

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

docker container run my_image

Эта команда тоже способна принимать множество аргументов командной строки. Рассмотрим некоторые из них на примере такой конструкции:

docker container run -i -t -p 1000:8000 --rm my_image

Флаг -i — это сокращение для --interactive. Благодаря этому флагу поток STDIN поддерживается в открытом состоянии даже если контейнер к STDIN не подключён.

Флаг -t — это сокращение для --tty. Благодаря этому флагу выделяется псевдотерминал, который соединяет используемый терминал с потоками STDIN и STDOUT контейнера.

Для того чтобы получить возможность взаимодействия с контейнером через терминал нужно совместно использовать флаги -i и -t.

Флаг -p представляет собой сокращение для --port. Порт — это интерфейс, благодаря которому контейнер взаимодействует с внешним миром. Конструкция 1000:8000 перенаправляет порт Docker 8000 на порт 1000 компьютера, на котором выполняется контейнер. Если в контейнере работает некое приложение, способное выводить что-то в браузер, то, для того, чтобы к нему обратиться, в нашем случае можно перейти в браузере по адресу localhost:1000.

Флаг --rm автоматически удаляет контейнер после того, как его выполнение завершится.

Рассмотрим ещё некоторые примеры команды run:

docker container run -it my_image my_command

В подобной конструкции может применяться команда sh, которая создаст сессию терминала в контейнере, с которой можно взаимодействовать через ваш терминал. При работе с образами, основанными на Alpine, лучше ориентироваться на использование sh а не bash, так как в этих образах, по умолчанию, оболочка bash не установлена. Для выхода из интерактивной сессии воспользуйтесь командой exit.

Обратите внимание на то, что здесь мы скомбинировали флаги -i и -t в -it.

Вот ещё один пример работы с командой run:

docker container run -d my_image

Флаг -d — это сокращение для --detach. Эта команда запускает контейнер в фоновом режиме. Это позволяет использовать терминал, из которого запущен контейнер, для выполнения других команд во время работы контейнера.

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

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

docker container ls

Эта команда выводит список выполняющихся контейнеров и снабжает этот список некоторыми полезными сведениями о них. Вот ещё один пример этой команды:

docker container ls -a -s

Ключ -a этой команды — это сокращение для --all. Благодаря использованию этого ключа можно вывести сведения обо всех контейнерах, а не только о выполняющихся.

Ключ -s — это сокращение для --size. Он позволяет вывести размеры контейнеров.

Вот команда, которая выводит подробные сведения о контейнере:

docker container inspect my_container

Вот команда, выводящая логи контейнера:

docker container logs my_container

▍Завершение работы контейнера

Иногда работающий контейнер надо остановить. Для этого используется такая команда:

docker container stop my_container 

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

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

docker container kill my_container

Команда kill, если сравнить работающий контейнер с включенным телевизором, напоминает выключение телевизора путём отключения его от электричества. Поэтому, в большинстве ситуаций, для остановки контейнеров рекомендуется использовать команду stop.

Вот команда, которая позволяет быстро остановить все работающие контейнеры:

docker container kill $(docker ps -q) 

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

docker container rm my_container

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

docker container rm $(docker ps -a -q)

Подведём итоги этого раздела. Сначала контейнер создают, потом его запускают, или комбинируют эти два шага, используя команду вида docker run my_container. После этого запускается контейнеризированное приложение.

Потом контейнер останавливают командой docker stop my_container. Для удаления контейнера используется команда docker rm my_container.

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

Образы

▍Создание образов

Вот команда, которая позволяет собирать образы Docker:

docker image build -t my_repo/my_image:my_tag .

В данном случае создаётся образ с именем my_image, при его сборке используется файл Dockerfile, находящийся по указанному пути или URL.

Флаг -t — это сокращение для --tag. Он указывает Docker на то, что создаваемому образу надо назначить предоставленный в команде тег. В данном случае это my_tag.

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

После того, как образ собран, его можно отправить в удалённый реестр. Благодаря этому им смогут воспользоваться другие люди, его можно будет загрузить и запустить на другом компьютере. Предположим, вы хотите использовать Docker Hub. Если так — вам понадобится завести там учётную запись. Пользоваться этим ресурсом можно бесплатно.

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

docker login

Она позволяет войти в учётную запись на Docker Hub. Для входа в систему вам понадобится ввести имя пользователя и пароль.

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

docker image push my_repo/my_image:my_tag

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

▍Исследование образов

Вот команда, которая выводит список образов, выводя, в том числе, и сведения об их размере:

docker image ls

Следующая команда позволяет вывести сведения о промежуточных образах, входящих в состав образа, в частности — данные об их размерах и о том, как они были созданы:

docker image history my_image

Вот команда, которая выводит подробные сведения об образе, в том числе — данные о слоях, из которых состоит образ:

docker image inspect my_image

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

▍Удаление образов

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

docker image rm my_image

Если образ хранится в удалённом репозитории, он оттуда удалён не будет.

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

docker image rm $(docker images -a -q) 

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

Мы рассмотрели основные команды, используемые для управления контейнерами и образами. Поговорим теперь ещё о некоторых командах.

Разные команды

Вот команда, которая выводит сведения о версиях клиента и сервера Docker:

docker version

Эта, уже известная вам команда, применяется для входа в реестр Docker:

docker login

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

docker system prune

Вот пример её использования:

docker system prune -a --volumes

Ключ -a — сокращение для --all, позволяет удалить неиспользуемые образы, а не только те, которым не назначено имя и тег.

Ключ --volumes позволяет удалить неиспользуемые тома.

Итоги

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

Создание и запуск контейнера:

docker container run my_image

Сборка образа:

docker image build -t my_repo/my_image:my_tag .

Отправка образа в удалённый репозиторий:

docker image push my_repo/my_image:my_tag

Для того чтобы посмотреть справку по командам Docker, можете выполнить в терминале команду docker. Здесь можно найти справочные материалы по интерфейсу командной строки Docker.

В следующий раз мы поговорим о работе с данными в Docker.

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

Что такое Docker, и как его использовать? Подробно рассказываем

Разберем по косточкам, ведь Docker – это мощный инструмент, и огромное количество информации по работе с ним вряд ли уместится в брошюрку.

Это ПО с открытым кодом, принцип работы которого проще всего сравнить с транспортными контейнерами. Только подумайте, ведь когда-то транспортные компании сталкивались с похожими проблемами:

  1. Как перевозить разные (несовместимые) типы товаров вместе (например, продукты питания с химикатами или стекло с кирпичом)?
  2. Как обрабатывать пакеты разных размеров одним и тем же транспортным средством?

С введением контейнеров стало возможным перевозить вместе кирпичи и стекло, химикаты и еду, а также многое другое. Груз разного размера может быть распределен по стандартизированным контейнерам, которые загружаются/выгружаются одним и тем же транспортным средством.

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

Эта проблема решается через создание независимости ПО от системы.

Изначально виртуализация была призвана избавить от подобных проблем, но в ней есть существенные недостатки:

  • медленная загрузка;
  • возможная плата за предоставление дополнительного пространства;
  • не все виртуальные машины (VM) поддерживают совместимое использование;
  • поддерживающие VM часто требуют сложной настройки;
  • образ может быть слишком большим, так как «дополнительная ОС» добавляет гигабайт пространства в проект поверх операционной системы, а в большинстве случаев на сервер ставится несколько VM, которые занимают еще больше места.

Докер же просто разделяет ядро ОС на все контейнеры (Docker container), работающие как отдельные процессы. Это не единственная подобная платформа, но, бесспорно, одна из самых популярных и востребованных.

К его преимуществам относятся:

  1. Ускоренный процесс разработки. Нет необходимости устанавливать вспомогательные инструменты вроде PostgreSQL, Redis, Elasticsearch: их можно запускать в контейнерах.
  2. Удобная инкапсуляция приложений.
  3. Понятный мониторинг.
  4. Простое масштабирование.

Докер работает не только на его родной ОС, Linux, но также поддерживается Windows и macOS. Единственное отличие от взаимодействия с Linux в том, что на macOS и Windows платформа инкапсулируется в крошечную виртуальную машину. На данный момент Докер для macOS и Windows достиг значительного уровня удобства в использовании.

Кроме того, существует множество дополнительных приложений, таких как Kitematic или Docker Machine, которые помогают устанавливать и использовать Докер на платформах, отличных от Linux.

Здесь можно посмотреть подробную инструкцию по установке. Если вы работаете с Докером на ОС Linux, вам нужно выполнить несколько несложных действий и повторно войти в систему:

sudo usermod -aG docker $(whoami)

1. Контейнер – это исполняемый экземпляр, который инкапсулирует требуемое программное обеспечение. Он состоит из образов. Его можно легко удалить и снова создать за короткий промежуток времени.

2. Образ – базовый элемент каждого контейнера. В зависимости от образа, может потребоваться некоторое время для его создания.

3. Порт – это порт TCP/UDP в своем первоначальном значении. Чтобы все было просто, предположим, что порты могут быть открыты во внешнем мире или подключены к контейнерам (доступны только из этих контейнеров и невидимы для внешнего мира).

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

5. Реестр – это сервер, на котором хранятся образы. Сравним его с GitHub: вы можете вытащить образ из реестра, чтобы развернуть его локально, и так же локально можете вносить в реестр созданные образы.

6. Docker Hub – публичный репозиторий с интерфейсом, предоставляемый Докер Inc. Он хранит множество образов. Ресурс является источником «официальных» образов, сделанных командой Докер или созданных в сотрудничестве с разработчиком ПО. Для официальных образов перечислены их потенциальные уязвимости. Эта информация открыта для любого зарегистрированного пользователя. Доступны как бесплатные, так и платные аккаунты.

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

docker run ubuntu /bin/echo 'Hello world'

Консольный вывод:

Unable to find image 'ubuntu:latest' locally  
latest: Pulling from library/ubuntu  
d54efb8db41d: Pull complete  
f8b845f45a87: Pull complete  
e8db7bf7c39f: Pull complete  
9654c40e9079: Pull complete  
6d9ef359eaaa: Pull complete  
Digest: sha256:dd7808d8792c9841d0b460122f1acf0a2dd1f56404f8d1e56298048885e45535  
Status: Downloaded newer image for ubuntu:latest  
Hello world
  • docker run – это команда запуска контейнера.
  • ubuntu – образ, который вы запускаете (например, образ операционной системы Ubuntu). Когда вы его указываете, Докер сначала анализирует элемент в разрезе хоста.
  • /bin/echo ‘Hello world’ – команда, которая будет запускаться внутри нового контейнера. Данный контейнер просто выводит «Hello world» и останавливает выполнение.

Теперь попробуем создать интерактивную оболочку внутри контейнера:

docker run -i -t --rm ubuntu /bin/bash
  • -t присваивает псевдо-tty или терминал внутри нового контейнера.
  • -i позволяет создавать интерактивное соединение, захватывая стандартный вход (STDIN) контейнера.
  • —rm требуется для автоматического удаления контейнера при выходе из процесса. По умолчанию контейнеры не удаляются.

Если вы хотите, чтобы контейнер работал после окончания сеанса, вам необходимо его «демонизировать»:

docker run --name daemon -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
  • —name daemon назначает имя новому контейнеру. Если вы его не укажете, имя сгенерируется и назначится автоматически.
  • -d запускает контейнер в фоновом режиме («демонизирует» его).

Давайте посмотрим, какие контейнеры у нас есть на данный момент:

docker ps -a

Консольный вывод:

CONTAINER ID  IMAGE   COMMAND                 CREATED             STATUS                         PORTS  NAMES  
1fc8cee64ec2  ubuntu  "/bin/sh -c 'while..."  32 seconds ago      Up 30 seconds                         daemon  
c006f1a02edf  ubuntu  "/bin/echo 'Hello ..."  About a minute ago  Exited (0) About a minute ago         gifted_nobel
  • docker ps – команда для перечисления контейнеров.
  • -a показывает все контейнеры (без -a ps покажет только запущенные контейнеры).
ps показывает нам, что у нас есть два контейнера:
  • gifted_nobel (имя для этого контейнера генерировалось автоматически) – первый контейнер, который мы создали с набранным «Hello world».
  • daemon – третий контейнер, который мы создали и «демонизировали».

Примечание: второй контейнер (с интерактивной оболочкой) отсутствует, потому что мы устанавливаем параметр -rm, в результате чего этот контейнер автоматически удаляется после выполнения.

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

docker logs -f daemon

Консольный вывод:

...
hello world  
hello world  
hello world
  • docker logs получают журналы контейнера.
  • -f следит за выходом журнала.

Теперь давайте остановим контейнер-демон:

docker stop daemon

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

docker ps -a

Консольный вывод:

CONTAINER ID  IMAGE   COMMAND                 CREATED        STATUS                      PORTS  NAMES  
1fc8cee64ec2  ubuntu  "/bin/sh -c 'while..."  5 minutes ago  Exited (137) 5 seconds ago         daemon  
c006f1a02edf  ubuntu  "/bin/echo 'Hello ..."  6 minutes ago  Exited (0) 6 minutes ago           gifted_nobel

Контейнер остановлен. Давайте запустим его снова:

docker start daemon

Убедимся, что он запущен:

docker ps -a  

Консольный вывод:

CONTAINER ID  IMAGE   COMMAND                 CREATED        STATUS                    PORTS  NAMES  
1fc8cee64ec2  ubuntu  "/bin/sh -c 'while..."  5 minutes ago  Up 3 seconds                     daemon  
c006f1a02edf  ubuntu  "/bin/echo 'Hello ..."  6 minutes ago  Exited (0) 7 minutes ago         gifted_nobel

Теперь остановим его и удалим все контейнеры вручную:

docker stop daemon  
docker rm <your first container name>  
docker rm daemon

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

docker rm -f $(docker ps -aq)
  • docker rm – команда удаления контейнера.
  • -f (для rm) должен остановить контейнер, если он работает (принудительное удаление).
  • -q (для ps) – это вывод только идентификаторов контейнера.

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

Пришло время создать и запустить более важный контейнер, такой как Nginx.

Измените каталог на examples/nginx:

docker run -d --name test-nginx -p 80:80 -v $(pwd):/usr/share/nginx/html:ro nginx:latest

Консольный вывод:

Unable to find image 'nginx:latest' locally  
latest: Pulling from library/nginx  
693502eb7dfb: Pull complete  
6decb850d2bc: Pull complete  
c3e19f087ed6: Pull complete  
Digest: sha256:52a189e49c0c797cfc5cbfe578c68c225d160fb13a42954144b29af3fe4fe335  
Status: Downloaded newer image for nginx:latest  
436a602273b0ca687c61cc843ab28163c720a1810b09005a36ea06f005b0c971
  • -p – отображение портов HOST PORT: CONTAINER PORT.
  • -v отвечает за HOST DIRECTORY:CONTAINER DIRECTORY.

Теперь проверьте этот URL-адрес в своем веб-браузере.

Еще мы можем попробовать изменить /example/nginx/index.html (который добавляется в каталог /usr/share/nginx/html внутри контейнера) и обновить страницу.

Получим информацию о контейнере test-nginx:

docker inspect test-nginx

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

Чтобы создать образ, сперва вам нужно создать Dockerfile: это текстовый файл с инструкциями и аргументами. Краткое описание инструкций, которые мы собираемся использовать в примере:

  • FROM – задать базовый образ
  • RUN – выполнить команду в контейнере
  • ENV – задать переменную среды
  • WORKDIR – установить рабочий каталог
  • VOLUME – создать точку монтирования для тома
  • CMD – установить исполняемый файл для контейнера

Более подробная информация здесь.

Давайте создадим образ, который получит содержимое сайта и сохранит его в текстовом файле. Нам нужно передать URL-адрес через переменную SITE_URL. Результирующий файл будет помещен в каталог, установленный как том:

FROM ubuntu:latest  
RUN apt-get update  
RUN apt-get install --no-install-recommends --no-install-suggests -y curl  
ENV SITE_URL https://google.com/  
WORKDIR /data  
VOLUME /data  
CMD sh -c "curl -L $SITE_URL > /data/results"

Dockerfile готов, пришло время создать образ.

Создание образа

Перейдите к examples/curl и выполните следующую команду:

docker build . -t test-curl  

Консольный вывод:

Sending build context to Docker daemon 3.584 kB  
Step 1/7 : FROM ubuntu:latest  
 ---> 0ef2e08ed3fa
Step 2/7 : RUN apt-get update  
 ---> Running in 4aa839bb46ec
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB]  
Get:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]  
...
Fetched 24.9 MB in 4s (5208 kB/s)  
Reading package lists...  
 ---> 35ac5017c794
Removing intermediate container 4aa839bb46ec  
Step 3/7 : RUN apt-get install --no-install-recommends --no-install-suggests -y curl  
 ---> Running in 3ca9384ecf8d
Reading package lists...  
Building dependency tree...  
Reading state information...  
The following additional packages will be installed...  
 ---> f3c6d26b95e6
Removing intermediate container 3ca9384ecf8d  
Step 4/7 : ENV SITE_URL https://google.com/  
 ---> Running in 21b0022b260f
 ---> 9a733ee39a46
Removing intermediate container 21b0022b260f  
Step 5/7 : WORKDIR /data  
 ---> c024301ddfb8
Removing intermediate container 3bc973e5584c  
Step 6/7 : VOLUME /data  
 ---> Running in a9594a8958fe
 ---> 6802707a7114
Removing intermediate container a9594a8958fe  
Step 7/7 : CMD sh -c "curl -L $SITE_URL > /data/results"  
 ---> Running in 37503bc4e386
 ---> 5ebb2a65d771
Removing intermediate container 37503bc4e386  
Successfully built 5ebb2a65d771
  • docker build создает новый образ локально.
  • -t устанавливает в образе метку имени.

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

docker images  

Консольный вывод:

REPOSITORY  TAG     IMAGE ID      CREATED         SIZE  
test-curl   latest  5ebb2a65d771  37 minutes ago  180 MB  
nginx       latest  6b914bbcb89e  7 days ago      182 MB  
ubuntu      latest  0ef2e08ed3fa  8 days ago      130 MB

Мы можем создавать и запускать контейнер из образа. Давайте попробуем сделать это с параметрами по умолчанию:

docker run --rm -v $(pwd)/vol:/data/:rw test-curl

Чтобы просмотреть результаты, сохраненные в файле:

cat ./vol/results  

Попробуем с facebook.com:

docker run --rm -e SITE_URL=https://facebook.com/ -v $(pwd)/vol:/data/:rw test-curl

Чтобы просмотреть результаты, сохраненные в файле:

cat ./vol/results

Рекомендации по созданию образов

  • Избегайте установки ненужных пакетов – они будут потреблять дополнительное дисковое пространство.
  • Используйте кэш.
  • Будьте осторожны с объемами. Вы должны помнить, какие данные в томах. Поскольку тома являются постоянными и не «умирают» с контейнерами – следующий контейнер будет использовать данные из тома, которые были созданы предыдущим контейнером.
  • Используйте переменные среды (в RUN, EXPOSE, VOLUME). Это сделает ваш Dockerfile более гибким.

Соединение между контейнерами

Docker compose — это единственный правильный способ подключения контейнеров друг к другу.

В этом примере мы подключим контейнеры Python и Redis.

version: '2'  
services:  
  app:
    build:
      context: ./app
    depends_on:
      - redis
    environment:
      - REDIS_HOST=redis
    ports:
      - "5000:5000"
  redis:
    image: redis:3.2-alpine
    volumes:
      - redis_data:/data
volumes:  
  redis_data:

Перейдем к examples/compose и выполним команду:

docker-compose --project-name app-test -f docker-compose.yml up

Консольный вывод

Текущий пример увеличит счетчик просмотров в Redis. Откройте ссылку и убедитесь в этом.

Использование docker-compose – это тема для целого учебника. Чтобы начать работу, вы можете поиграться с некоторыми образами из Docker Hub, а если хотите создать свои собственные – следуйте рекомендациям, перечисленным выше. Единственное, что можно добавить с точки зрения использования docker-compose – всегда давайте явные имена вашим томам. Это простое правило избавит вас от проблемы в будущем.

version: '2'  
services:  
  ...
  redis:
    image: redis:3.2-alpine
    volumes:
      - redis_data:/data
volumes:  
  redis_data:

В этом случае redis_data будет именем внутри файла docker-compose.yml.

Смотрим выполнение тома:

docker volume ls  

Консольный вывод:

DRIVER              VOLUME NAME  
local               apptest_redis_data

Без явного имени тома будет UUID. И вот пример:

DRIVER              VOLUME NAME  
local               ec1a5ac0a2106963c2129151b27cb032ea5bb7c4bd6fe94d9dd22d3e72b2a41b  
local               f3a664ce353ba24dd43d8f104871594de6024ed847054422bbdd362c5033fc4c  
local               f81a397776458e62022610f38a1bfe50dd388628e2badc3d3a2553bb08a5467f  
local               f84228acbf9c5c06da7be2197db37f2e3da34b7e8277942b10900f77f78c9e64  
local               f9958475a011982b4dc8d8d8209899474ea4ec2c27f68d1a430c94bcc1eb0227  
local               ff14e0e20d70aa57e62db0b813db08577703ff1405b2a90ec88f48eb4cdc7c19  
local               polls_pg_data  
local               polls_public_files  
local               polls_redis_data  
local               projectdev_pg_data  
local               projectdev_redis_data

Докер стал одним из важнейших инструментов современного разработчика. Да, он имеет некоторые ограничения и требования в зависимости от архитектуры вашей системы, но немного усидчивости – и мир контейнеров обязательно будет приручен!

Более 100 полезных сервисов для разработки на все случаи жизни
164 крутых опенсорс проекта для новичков
Путь Python Junior-а в 2017
10 ресурсов для изучения Linux

Ориентация и настройка | Документация Docker

Приблизительное время прочтения:

4 минуты

Добро пожаловать! Мы очень рады, что вы хотите изучить Docker.

На этой странице содержатся пошаговые инструкции по началу работы с Docker. Мы также рекомендуем видео-пошаговое руководство от Dockercon 2020.

Учебный модуль Docker Quickstart научит вас:

  1. Настройте среду Docker (на этой странице)

  2. Создайте и запустите свой образ

  3. Поделиться изображениями в Docker Hub

Концепции докеров

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

Контейнеризация становится все более популярной, потому что контейнеры:

  • Гибкость : даже самые сложные приложения могут быть помещены в контейнеры.
  • Легковес : Контейнеры используют и совместно используют ядро ​​хоста,
    что делает их гораздо более эффективными с точки зрения системных ресурсов, чем виртуальные машины.
  • Portable : вы можете создавать локально, развертывать в облаке и запускать где угодно.
  • Слабосвязанная : Контейнеры полностью самодостаточны и герметичны,
    позволяя вам заменить или обновить один, не нарушая работу других.
  • Масштабируемость : можно увеличивать количество реплик контейнеров и автоматически распределять их по центру обработки данных.
  • Secure : Контейнеры применяют агрессивные ограничения и изоляцию к процессам без какой-либо настройки со стороны пользователя.

Изображения и контейнеры

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

Контейнеры и виртуальные машины

Контейнер запускает изначально в Linux и разделяет ядро ​​хоста
машина с другими емкостями. Он запускает дискретный процесс, не занимая больше памяти
чем любой другой исполняемый файл, что делает его легким.

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

Настройте среду Docker

Загрузите и установите Docker Desktop

Docker Desktop — это простое в установке приложение для среды Mac или Windows, которое позволяет начать кодирование и создание контейнеров за считанные минуты. Docker Desktop включает в себя все необходимое для создания, запуска и совместного использования контейнерных приложений прямо с вашего компьютера.

Следуйте инструкциям, подходящим для вашей операционной системы, чтобы загрузить и установить Docker Desktop.

Docker Desktop для Mac Рабочий стол Docker для Windows

Тестовая версия Docker

После успешной установки Docker Desktop откройте терминал и запустите docker --version , чтобы проверить версию Docker, установленную на вашем компьютере.

  $ docker - версия
Докер версии 19.03.13, сборка 4484c46d9d
  

Тестовая установка Docker

  1. Убедитесь, что ваша установка работает, запустив образ Docker hello-world:

      $ docker run hello-world
    
        Не удалось найти изображение "hello-world: latest" локально
        последнее: извлечение из библиотеки / hello-world
        ca4f61b1923c: Вытягивание завершено
        Дайджест: sha256: ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7
        Статус: загружено новое изображение для hello-world: latest
    
        Привет из Докера!
        Это сообщение показывает, что ваша установка работает правильно....
      
  2. Запустите docker image ls , чтобы отобразить образ hello-world , который вы загрузили на свой компьютер.

  3. Перечислите контейнер hello-world (созданный изображением), который закрывается после отображения своего сообщения. Если он все еще работает, опция --all не требуется:

      $ docker ps - все
    
        СОСТОЯНИЕ СОЗДАНИЯ КОМАНДЫ ИЗОБРАЖЕНИЯ КОНТЕЙНЕРА
        54f4984ed6a8 hello-world "/ hello" 20 секунд назад Завершился (0) 19 секунд назад
      

Заключение

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

К части 2 >>

Для получения информации о том, как создать и запустить ваше первое контейнерное приложение с помощью Node.js, перейдите в раздел Создание образа Node.js.

Ссылки CLI

Дополнительную документацию по всем командам интерфейса командной строки, используемым в этой статье, см. В следующих разделах:

начало работы, настройка, ориентация, быстрый старт, введение, концепции, контейнеры, рабочий стол докера

.

Запуск контейнеров автоматически | Документация Docker

Приблизительное время прочтения:

3 минуты

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

Политики перезапуска отличаются от флага --live-restore в dockerd
команда. Использование --live-restore позволяет поддерживать работу контейнеров
во время обновления Docker, хотя работа в сети и пользовательский ввод прерываются.

Использовать политику перезапуска

Чтобы настроить политику перезапуска для контейнера, используйте флаг --restart
при использовании докера запустите команду . Значение флага --restart может быть
любое из следующего:

Флаг Описание
нет Не перезапускать контейнер автоматически.(по умолчанию)
при отказе Перезапустите контейнер, если он выходит из-за ошибки, которая проявляется как ненулевой код выхода.
всегда Всегда перезапускайте контейнер, если он останавливается. Если он остановлен вручную, он перезапускается только при перезапуске демона Docker или при перезапуске самого контейнера вручную. (См. Второй маркер, указанный в деталях политики перезапуска)
без остановки Аналогично , всегда , за исключением того, что когда контейнер останавливается (вручную или иначе), он не перезапускается даже после перезапуска демона Docker.

В следующем примере запускается контейнер Redis и его настройка всегда
перезапустите, если он явно не остановлен или Docker не перезапущен.

  $ docker run -d --restart, если-не остановлен redis
  

Эта команда изменяет политику перезапуска для уже запущенного контейнера с именем redis .

  $ docker update - перезапуск, если не остановлен redis
  

И эта команда гарантирует, что все запущенные в данный момент контейнеры будут перезапущены, если не будут остановлены.

  $ обновление докеров - перезагрузка, если-не остановлено $ (докер ps -q)
  

Сведения о политике перезапуска

При использовании политик перезапуска помните следующее:

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

  • Если вы остановите контейнер вручную, его политика перезапуска игнорируется, пока
    Демон Docker перезапускается или контейнер перезапускается вручную. Это еще один
    попытка предотвратить цикл перезапуска.

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

Используйте диспетчер процессов

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

Предупреждение

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

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

Использование диспетчера процессов внутри контейнеров

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

Предупреждение

Они не поддерживают Docker и просто отслеживают процессы операционной системы в
контейнер. Docker не рекомендует этот подход, потому что он
зависит от платформы и даже отличается в разных версиях данного Linux
распространение.

контейнеры, перезапуск, политики, автоматизация, администрирование

.

Создайте и запустите образ

Приблизительное время прочтения:

8 минут

Предварительные требования

Поработайте с ориентацией и настройкой в ​​Части 1.

Введение

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

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

  2. Соберите свои контейнеры и вспомогательную инфраструктуру в законченное приложение.

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

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

Настройка

Давайте загрузим пример проекта узла node-bulletin-board . Это простая доска объявлений, написанная на Node.js.

Git

Если вы используете Git, вы можете клонировать пример проекта из GitHub:

  git clone https://github.com/dockersamples/node-bulletin-board
cd-узел-доска объявлений / приложение-доска объявлений
  

Windows (без Git)

Если вы используете компьютер Windows и предпочитаете загрузить пример проекта без установки Git, выполните следующие команды в PowerShell:

  завиток.exe -LO https://github.com/dockersamples/node-bulletin-board/archive/master.zip
tar.exe xf master.zip
cd-узел-доска-бюллетень-мастер \ приложение-доска объявлений
  

Mac или Linux (без Git)

Если вы используете Mac или Linux и предпочитаете загрузить пример проекта без установки Git, выполните следующие команды в терминале:

  curl -LO https://github.com/dockersamples/node-bulletin-board/archive/master.застегивать
разархивировать master.zip
CD-узел-доска-доска-мастер / приложение-доска объявлений
  

Определите контейнер с помощью Dockerfile

После загрузки проекта взгляните на файл Dockerfile в приложении доски объявлений. Файлы Dockerfiles описывают, как собрать частную файловую систему для контейнера, а также могут содержать некоторые метаданные, описывающие, как запустить контейнер на основе этого образа.

Для получения дополнительной информации о Dockerfile, используемом в приложении доски объявлений, см. Образец Dockerfile.

Создайте и протестируйте свой образ

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

Убедитесь, что вы находитесь в каталоге node-bulletin-board / bulletin-board-app в терминале или PowerShell, используя команду cd . Выполните следующую команду, чтобы создать образ доски объявлений:

  docker build --tag bulletinboard: 1.0.
  

Вы увидите, как Docker выполняет каждую инструкцию в вашем Dockerfile, создавая образ по ходу.В случае успеха процесс сборки должен завершиться сообщением Доска объявлений с тегами успешно помечена: 1.0 .

Пользователи Windows:

В этом примере используются контейнеры Linux. Убедитесь, что в вашей среде работают контейнеры Linux, щелкнув правой кнопкой мыши логотип Docker на панели задач и выбрав Перейти на контейнеры Linux . Не волнуйтесь — все команды в этом руководстве одинаково работают для контейнеров Windows.

Вы можете получить сообщение под названием «ПРЕДУПРЕЖДЕНИЕ О БЕЗОПАСНОСТИ» после запуска образа, в котором будет указано, что для файлов, добавленных в ваш образ, установлены разрешения на чтение, запись и выполнение.В этом примере мы не обрабатываем конфиденциальную информацию, поэтому не обращайте внимания на предупреждение в этом примере.

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

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

      docker run --publish 8000: 8080 --detach --name bb bulletinboard: 1.0
      

    Здесь есть пара общих флагов:

    • --publish запрашивает у Docker пересылку трафика, входящего на порт хоста 8000, на порт 8080 контейнера.Контейнеры имеют свой собственный частный набор портов, поэтому, если вы хотите получить доступ к одному из них из сети, вы должны перенаправить на него трафик таким образом. В противном случае правила брандмауэра предотвратят попадание всего сетевого трафика в ваш контейнер в качестве меры безопасности по умолчанию.
    • --detach просит Docker запустить этот контейнер в фоновом режиме.
    • --name указывает имя, под которым вы можете ссылаться на свой контейнер в последующих командах, в данном случае bb .
  2. Посетите свое приложение в браузере по адресу localhost: 8000 . Вы должны увидеть, что ваша доска объявлений запущена и работает. На этом этапе вы обычно делаете все возможное, чтобы ваш контейнер работал так, как вы ожидали; сейчас самое время запустить, например, модульные тесты.

  3. Убедившись, что контейнер доски объявлений работает правильно, вы можете удалить его:

      докер RM - форс BB
      

    Параметр --force останавливает работающий контейнер, поэтому его можно удалить.Если вы сначала остановите запуск контейнера с помощью docker stop bb , вам не нужно использовать --force для его удаления.

Заключение

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

К части 3 >>

Развертывание в облаке

Чтобы запустить свои контейнеры в облаке с помощью Azure или AWS, ознакомьтесь с нашей документацией по началу работы с облачными развертываниями.

Пример файла Dockerfile

Написание Dockerfile — это первый шаг к контейнеризации приложения. Вы можете думать об этих командах Dockerfile как о пошаговом рецепте создания вашего образа. Dockerfile в приложении доска объявлений выглядит так:

  # Использовать официальный образ в качестве родительского.
ОТ узла: ток-тонкий

# Установить рабочий каталог.
WORKDIR / usr / src / app

# Скопируйте файл с вашего хоста в ваше текущее местоположение.
КОПИРОВАТЬ package.json.

# Запустить команду в файловой системе вашего образа.ЗАПУСТИТЬ npm install

# Добавить метаданные к изображению, чтобы описать, какой порт контейнер прослушивает во время выполнения.
EXPOSE 8080

# Выполнить указанную команду в контейнере.
CMD ["npm", "start"]

# Скопируйте остальную часть исходного кода вашего приложения с хоста в файловую систему изображений.
КОПИРОВАТЬ. .
  

Файл докеров, определенный в этом примере, выполняет следующие шаги:

  • Начните FROM уже существующий узел : образ current-slim . Это официальный образ , созданный узлом.js и подтвержден Docker как высококачественный образ, содержащий интерпретатор долгосрочной поддержки Node.js (LTS) и основные зависимости.
  • Используйте WORKDIR , чтобы указать, что все последующие действия должны выполняться из каталога / usr / src / app в файловой системе вашего изображения (но не в файловой системе хоста).
  • КОПИРУЙТЕ файл package.json с вашего хоста в текущее место (. ) в вашем образе (в данном случае в / usr / src / app / package.json )
  • ВЫПОЛНИТЬ команду npm install внутри вашей файловой системы изображения (которая прочитает package.json , чтобы определить зависимости узлов вашего приложения и установить их)
  • КОПИРУЙТЕ в остальной части исходного кода вашего приложения с вашего хоста в файловую систему изображений.

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

Приведенные выше шаги создали файловую систему нашего образа, но в вашем Dockerfile есть и другие строки.

Директива CMD — это первый пример указания некоторых метаданных в вашем изображении, описывающих, как запускать контейнер на основе этого изображения. В данном случае говорится, что контейнерный процесс, который этот образ должен поддерживать, — это npm start .

EXPOSE 8080 сообщает Docker, что контейнер прослушивает порт 8080 во время выполнения.

То, что вы видите выше, — хороший способ организовать простой Dockerfile; всегда начинайте с команды FROM , следуйте инструкциям по созданию вашей частной файловой системы и завершайте со спецификациями метаданных. Директив Dockerfile намного больше, чем те, что вы видите выше. Полный список см. В справочнике по Dockerfile.

Ссылки CLI

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

контейнеры, изображения, файлы докеров, узел, код, кодирование, сборка, push, запуск

.

Docker Desktop для Windows руководство пользователя

Приблизительное время прочтения:

17 минут

Добро пожаловать в Docker Desktop! В руководстве пользователя Docker Desktop для Windows содержится информация о том, как настраивать параметры рабочего стола Docker и управлять ими.

Для получения информации о загрузке Docker Desktop, системных требованиях и инструкциях по установке см. Установка Docker Desktop.

Примечание

На этой странице содержится информация о стабильной версии Docker Desktop.Для получения информации о функциях, доступных в выпусках Edge, см. Примечания к выпуску Edge.

Настройки

Меню Docker Desktop позволяет настраивать параметры Docker, такие как установка, обновления, каналы версий, вход в Docker Hub,
и более.

В этом разделе объясняются параметры конфигурации, доступные из диалогового окна Настройки .

  1. Откройте меню рабочего стола Docker, щелкнув значок Docker в области уведомлений (или на панели задач):

  2. Выберите Настройки , чтобы открыть диалоговое окно настроек:

Общие

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

  • Запускать Docker при входе в систему — автоматически запускать Docker Desktop при входе в систему Windows.

  • Автоматически проверять наличие обновлений — По умолчанию Docker Desktop автоматически проверяет наличие обновлений и уведомляет вас, когда обновление доступно.
    Нажмите ОК , чтобы принять и установить обновления (или отменить, чтобы сохранить текущие
    версия). Вы можете обновить вручную, выбрав Проверить обновления в
    главное меню Docker.

  • Expose daemon on tcp: // localhost: 2375 без TLS — выберите этот параметр, чтобы разрешить устаревшим клиентам подключаться к демону Docker. Вы должны использовать эту опцию с осторожностью, так как демонстрация демона без TLS может привести к атакам с удаленным выполнением кода.

  • Отправлять статистику использования — По умолчанию Docker Desktop отправляет диагностику,
    отчеты о сбоях и данные об использовании. Эта информация помогает Docker улучшать и
    устранить неполадки в приложении.Снимите флажок, чтобы отказаться. Docker может периодически запрашивать дополнительную информацию.

    Щелкните Переключиться на версию Edge , чтобы узнать больше о выпусках Docker Desktop Edge.

Ресурсы

Вкладка Ресурсы позволяет настраивать ЦП, память, диск, прокси,
сеть и другие ресурсы. Доступны разные настройки для
конфигурация в зависимости от того, используете ли вы контейнеры Linux в WSL 2
режим, контейнеры Linux в режиме Hyper-V или контейнеры Windows.

Продвинутый

Примечание

Вкладка «Дополнительно» доступна только в режиме Hyper-V, поскольку в режиме WSL 2 и
В контейнерном режиме Windows этими ресурсами управляет Windows. В WSL 2
режим, вы можете настроить ограничения на память, ЦП и размер выделенного свопа
в служебную виртуальную машину WSL 2.

Используйте вкладку Advanced , чтобы ограничить ресурсы, доступные Docker.

ЦП : По умолчанию Docker Desktop использует половину числа процессоров.
доступен на хост-машине.Чтобы увеличить вычислительную мощность, установите для этого параметра значение
большее число; для уменьшения уменьшите число.

Память : по умолчанию Docker Desktop настроен на использование 2 ГБ оперативной памяти,
выделяется из общей доступной памяти на вашем компьютере. Чтобы увеличить ОЗУ, установите более высокое значение. Чтобы уменьшить его, уменьшите число.

Swap : настройте размер файла подкачки по мере необходимости. По умолчанию — 1 ГБ.

Размер образа диска : укажите размер образа диска.

Расположение образа диска : укажите расположение тома Linux, где хранятся контейнеры и образы.

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

Обмен файлами

Примечание

Вкладка «Общий доступ к файлам» доступна только в режиме Hyper-V, поскольку в режиме WSL 2
и в режиме контейнера Windows все файлы автоматически используются Windows.

Используйте общий доступ к файлам, чтобы разрешить совместное использование локальных каталогов в Windows с контейнерами Linux.
Это особенно полезно для
редактирование исходного кода в среде IDE на хосте во время выполнения и тестирование кода в контейнере.
Обратите внимание, что настройка общего доступа к файлам не требуется для контейнеров Windows, только для контейнеров Linux.
Если каталог не используется совместно с контейнером Linux, вы можете получить файл не найден. или не может запустить службу ошибки во время выполнения. См. Раздел Для подключения тома требуются общие папки для контейнеров Linux.

Настройки файлового ресурса:

  • Добавить каталог : нажмите + и перейдите в каталог, который хотите добавить.

  • Применить и перезапустить делает каталог доступным для контейнеров, использующих Docker
    привязать крепление ( -v ).

Советы по общим папкам, разрешениям и монтированию томов

  • Общие папки предназначены для редактирования кода приложения на хосте во время его выполнения в контейнерах.Для товаров без кода
    таких как каталоги кеша или базы данных, производительность будет намного лучше, если они будут храниться в
    виртуальная машина Linux, используя том данных
    (именованный том) или контейнер данных.

  • Docker Desktop устанавливает разрешения на чтение / запись / выполнение для пользователей, групп и других пользователей 0777 или a + rwx.
    Это не настраивается. См. Ошибки прав доступа к каталогам данных для общих томов.

  • Windows представляет для приложений вид файловой системы без учета регистра, в то время как в Linux учитывается регистр.В Linux можно создать 2 отдельных файла: test и Test , тогда как в Windows эти имена файлов будут фактически относиться к одному и тому же базовому файлу. Это может привести к проблемам, когда приложение работает правильно на компьютере разработчика с Windows (где содержимое файла является общим), но не работает при запуске в Linux в производственной среде (где содержимое файла отличается). Чтобы этого избежать, Docker Desktop настаивает на том, чтобы доступ ко всем общим файлам был в их исходном состоянии. Следовательно, если создается файл с именем test , он должен быть открыт как test .Попытки открыть Тест завершатся ошибкой с сообщением «Нет такого файла или каталога». Точно так же после создания файла с именем test попытки создать второй файл с именем Test завершатся ошибкой.

Общие папки по запросу

Вы можете предоставить общий доступ к папке «по запросу» при первом использовании конкретной папки контейнером.

Если вы запускаете команду Docker из оболочки с подключением тома (как показано на
пример ниже) или запустите файл Compose, который включает монтирования томов, вы получите
всплывающее окно с вопросом, хотите ли вы предоставить общий доступ к указанной папке.

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

Прокси

Docker Desktop позволяет настраивать параметры прокси-сервера HTTP / HTTPS и
автоматически распространяет их в Docker. Например, если вы настроили прокси
settings на http://proxy.example.com , Docker использует этот прокси при извлечении контейнеров.

Однако ваши настройки прокси не будут перенесены в запускаемые вами контейнеры.
Если вы хотите установить настройки прокси для ваших контейнеров, вам необходимо определить
переменные среды для них, как и в Linux, например:

 > docker run -e HTTP_PROXY = http: //proxy.example.com: 3128 alpine env

ПУТЬ = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
HOSTNAME = b7edf988b2b5
TERM = xterm
ГЛАВНАЯ = / корень
HTTP_PROXY = http: //proxy.example.com: 3128
  

Для получения дополнительной информации о настройке переменных среды для запуска контейнеров,
см. Установка переменных среды.

Сеть

Примечание

Вкладка Сеть недоступна в режиме контейнера Windows, так как сеть
под управлением Windows.

Вы можете настроить сеть Docker Desktop для работы в виртуальной частной сети (VPN). Укажите префикс преобразования сетевых адресов (NAT) и маску подсети, чтобы обеспечить подключение к Интернету.

DNS-сервер : вы можете настроить DNS-сервер для использования динамической или статической IP-адресации.

Примечание

Некоторые пользователи сообщали о проблемах с подключением к Docker Hub в стабильной версии Docker Desktop. Это проявится как ошибка при попытке запустить
docker команды, которые извлекают образы из Docker Hub, которые еще не
загружено, например, при первом запуске docker run hello-world . если ты
столкнувшись с этим, сбросьте DNS-сервер на использование фиксированного адреса Google DNS:
8.8.8.8 . Для получения дополнительной информации см.
Проблемы с сетью при устранении неполадок.

Для обновления этих параметров требуется перенастройка и перезагрузка виртуальной машины Linux.

Интеграция WSL

В режиме WSL 2 вы можете настроить, в каких дистрибутивах WSL 2 будет
Интеграция WSL.

По умолчанию интеграция будет включена в вашем распространении WSL по умолчанию.
Чтобы изменить дистрибутив WSL по умолчанию, запустите wsl --set-default <имя дистрибутива> . (Например,
чтобы установить Ubuntu в качестве дистрибутива WSL по умолчанию, запустите wsl --set-default ubuntu ).

Вы также можете выбрать любые дополнительные дистрибутивы, которые хотите включить WSL 2.
интеграция на.

Для получения дополнительных сведений о настройке Docker Desktop для использования WSL 2 см.
Серверная часть Docker Desktop WSL 2.

Двигатель Docker

Страница Docker Engine позволяет вам настроить демон Docker, чтобы определить, как работают ваши контейнеры.

Введите файл конфигурации JSON в поле, чтобы настроить параметры демона. Полный список опций см. В Docker Engine.
Справочник по командной строке dockerd.

Нажмите Применить и перезапустить , чтобы сохранить настройки и перезапустить Docker Desktop.

Командная строка

На странице «Командная строка» вы можете указать, следует ли включать экспериментальные функции.

В версиях Docker Desktop Edge и Stable вы можете включать и отключать экспериментальные функции. Если вы отключите экспериментальные функции, Docker Desktop будет использовать текущую общедоступную версию Docker Engine.

Экспериментальные особенности

выпусков Docker Desktop Edge имеют экспериментальную версию
Docker Engine включен по умолчанию, как описано в README экспериментальных функций Docker на GitHub.

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

Чтобы включить экспериментальные функции в Docker CLI, отредактируйте файл config.json
файл и установите для экспериментальный значение включено.

Чтобы включить экспериментальные функции в меню рабочего стола Docker, щелкните
Настройки ( Настройки в macOS)> Командная строка , а затем включите
the Включить экспериментальные функции Переключатель . Щелкните Применить и перезапустить .

Список текущих экспериментальных функций Docker CLI см. В разделе Docker CLI Experimental features.

Запустите docker версии , чтобы проверить, включены ли экспериментальные функции.Экспериментальный режим
находится в списке Данные сервера . Если Experimental — это true , то Docker
работает в экспериментальном режиме, как показано здесь:

 > версия докера

Клиент: Docker Engine - Сообщество
 Версия: 19.03.1
 Версия API: 1.40
 Версия Go: go1.12.5
 Git commit: 74b1e89
 Построен: 25 июл, 21:17:08 2019
 ОС / Arch: windows / amd64
 Экспериментальный: правда

Сервер: Docker Engine - Сообщество
 Двигатель:
  Версия: 19.03.1
  Версия API: 1.40 (минимальная версия 1.12)
  Версия Go: go1.12.5
  Git commit: 74b1e89
  Построен: 25 июл, 21:17:52 2019
  ОС / Arch: Linux / amd64
  Экспериментальный: правда
 containerd:
  Версия: v1.2.6
  GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Версия: 1.0.0-rc8
  GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Версия: 0.18.0
  GitCommit: fec3683
  

Кубернетес

Примечание

Вкладка Kubernetes недоступна в режиме контейнера Windows.

Docker Desktop включает в себя автономный сервер Kubernetes, который работает на вашем хосте Windows, так что вы можете тестировать развертывание рабочих нагрузок Docker в Kubernetes.

Клиентская команда Kubernetes, kubectl , включена и настроена для подключения
на локальный сервер Kubernetes. Если у вас уже установлен kubectl и
указывая на другую среду, такую ​​как minikube или кластер GKE, обязательно
чтобы изменить контекст, чтобы kubectl указывал на docker-desktop :

 > контексты получения конфигурации kubectl
> kubectl config use-context docker-desktop
  

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

Чтобы установить Kubernetes в качестве
orchestrator по умолчанию, выберите Развернуть стеки Docker в Kubernetes по умолчанию .

По умолчанию контейнеры Kubernetes скрыты от таких команд, как docker.
service ls
, потому что управление ими вручную не поддерживается. Сделать их
видимый, выберите Показать системные контейнеры (дополнительно) . Большинству пользователей эта опция не нужна.

Нажмите Применить и перезапустить , чтобы сохранить настройки. Это создает экземпляры образов, необходимых для запуска сервера Kubernetes в качестве контейнеров, и устанавливает kubectl.Команда exe в пути.

  • Когда Kubernetes включен и работает, отображается дополнительный элемент строки состояния.
    в правом нижнем углу диалогового окна «Параметры рабочего стола Docker». Статус Kubernetes отображается в меню Docker, а контекст указывает на
    докер-рабочий стол .

  • Чтобы отключить поддержку Kubernetes в любое время, снимите флажок Включить Kubernetes .
    Контейнеры Kubernetes останавливаются и удаляются, а
    / usr / local / bin / kubectl Команда удалена.

  • Чтобы удалить все стеки и ресурсы Kubernetes, выберите Сбросить кластер Kubernetes .

  • Если вы установили kubectl другим способом, и
    испытывать конфликты, устранять это.

    Для получения дополнительной информации об использовании интеграции Kubernetes с Docker Desktop см. Развертывание в Kubernetes.

Сброс

Перезапуск Docker Desktop и Сброс до заводских настроек теперь доступны в меню Устранение неполадок .Для получения информации см. Журналы и устранение неполадок.

Устранение неполадок

Для получения более подробной информации посетите наши журналы и руководство по устранению неполадок.

Войдите на наш форум Docker Desktop для Windows, чтобы получить помощь от сообщества, просмотреть текущие темы пользователей или присоединиться к обсуждению.

Войдите в Docker Desktop для проблем Windows на GitHub, чтобы сообщать об ошибках или проблемах и просматривать проблемы, о которых сообщает сообщество.

Информацию о том, как оставить отзыв о документации или обновить ее самостоятельно, см. В разделе Содействие документации.

Переключение между контейнерами Windows и Linux

В меню рабочего стола Docker вы можете выбрать, какой демон (Linux или Windows)
интерфейс командной строки Docker. Выберите Перейти на контейнеры Windows для использования Windows
контейнеры или выберите Перейти на контейнеры Linux , чтобы использовать контейнеры Linux
(по умолчанию).

Дополнительные сведения о контейнерах Windows см. В следующей документации:

Диалоговое окно настроек изменяется с контейнерами Windows

Когда вы переключаетесь на контейнеры Windows, в диалоговом окне настроек отображаются только те вкладки, которые активны и применяются к вашим контейнерам Windows:

Если вы настроили прокси или демон в режиме контейнеров Windows, эти
применяется только к контейнерам Windows.Если вы вернетесь к контейнерам Linux,
конфигурации прокси и демонов возвращаются к тому, что вы установили для Linux
контейнеры. Настройки вашего контейнера Windows сохраняются и становятся доступными
снова при переключении обратно.

Панель приборов

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

Докер-концентратор

Выберите Войти / Создать Docker ID в меню Docker Desktop, чтобы получить доступ к своей учетной записи Docker Hub. После входа в систему вы можете получить доступ к своим репозиториям Docker Hub прямо из меню рабочего стола Docker.

Дополнительные сведения см. В следующих разделах Docker Hub:

Двухфакторная аутентификация

Docker Desktop позволяет входить в Docker Hub с помощью двухфакторной аутентификации.Двухфакторная аутентификация обеспечивает дополнительный уровень безопасности при доступе к вашей учетной записи Docker Hub.

Вы должны включить двухфакторную аутентификацию в Docker Hub перед входом в свою учетную запись Docker Hub через Docker Desktop. Инструкции см. В разделе Включение двухфакторной аутентификации для Docker Hub.

После включения двухфакторной аутентификации:

  1. Перейдите в меню рабочего стола Docker и выберите Войти / Создать идентификатор Docker .

  2. Введите свой Docker ID и пароль и нажмите Войти .

  3. После того, как вы успешно вошли в систему, Docker Desktop предложит вам ввести код аутентификации. Введите шестизначный код со своего телефона и затем нажмите Проверить .

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

Добавление сертификатов TLS

Вы можете добавить доверенных центров сертификации (ЦС) к своему демону Docker для проверки сервера реестра.
сертификаты и сертификаты клиентов для аутентификации в реестрах.Дополнительные сведения см. В разделе Как добавить настраиваемые сертификаты ЦС?
и как добавить клиентские сертификаты?
в FAQ.

Как добавить собственные сертификаты ЦС?

Docker Desktop поддерживает все доверенные центры сертификации (ЦС) (корневые или
промежуточный). Docker распознает сертификаты, хранящиеся в Trust Root
Центры сертификации или промежуточные центры сертификации.

Docker Desktop создает пакет сертификатов всех доверенных пользователей ЦС на основе
хранилище сертификатов Windows и добавляет его в доверенные сертификаты Moby.Таким образом, если корпоративный сертификат SSL является доверенным для пользователя на хосте, Docker Desktop доверяет ему.

Для получения дополнительных сведений об установке корневого сертификата ЦС для реестра см.
Проверить клиент репозитория с сертификатами
в темах Docker Engine.

Как мне добавить клиентские сертификаты?

Вы можете добавить свои клиентские сертификаты
в ~ / .docker / certs.d / : /client.cert и
~ / .docker / certs.d / : / client.ключ . Вам не нужно продвигать свои сертификаты с помощью команд git .

Когда приложение Docker Desktop запускается, оно копирует
~ / .docker / certs.d в вашей системе Windows на /etc/docker/certs.d
каталог на Moby (виртуальная машина Docker Desktop, работающая на Hyper-V).

Вам необходимо перезапустить Docker Desktop после внесения любых изменений в связку ключей.
или в каталог ~ / .docker / certs.d , чтобы изменения вступили в силу.

Реестр не может быть указан как небезопасный реестр (см.
Docker Daemon). Docker Desktop игнорирует
сертификаты, перечисленные в незащищенных реестрах, и не отправляют клиенту
сертификаты. Такие команды, как docker, запускают , которые пытаются извлечь из реестра
создавать сообщения об ошибках в командной строке, а также в реестре.

Подробнее о настройке клиентского TLS-сертификата для проверки см.
Проверить клиент репозитория с сертификатами
в темах Docker Engine.

Куда пойти дальше

окна, край, учебник, запуск, докер, локальный, машина

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *