Начните с docker machine и местной вм

4: Образы Docker

Контейнеры Docker запускаются из образов. По умолчанию образы Docker хранятся на Docker Hub – это реестр Docker, поддерживаемый командой разработчиков проекта. Разместить свой образ на Docker Hub может любой пользователь, потому здесь можно найти образы для большей части приложений и дистрибутивов Linux.

Чтобы проверить доступ и возможность загружать образы с Docker Hub, введите:

Команда должна вернуть следующий результат:

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

Для поиска необходимых образов на Docker Hub используется команда docker и подкоманда search. К примеру, чтобы найти образ Ubuntu, нужно ввести:

Данная команда выполнит поиск по Docker Hub и вернёт список образов, чьё имя соответствует поисковому запросу. В данном случае команда вернула:

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

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

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

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

Cómo instalar Docker en Windows 10 GRATIS [2022]

14949

483

25

00:08:22

11.06.2021

¿Quieres aprender C#?
Curso Completo de C# desde Cero 🤍
Descuento del 66% 🤍

RECURSOS MENCIONADOS

🤍

SOBRE ESTE VIDEO

En este video aprenderás a Instalar Docker y Windows Linux Subsystem en Windows 10.
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
ME ENCUENTRAS TAMBIÉN AQUÍ

Sitio Web ►🤍
Twitter ► 🤍
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
CURSOS PREMIUM

Curso Completo de C# desde Cero
🤍

Curso Completo de Blazor desde Cero
🤍

Curso Práctico de SQL para principiantes
🤍

Curso de GIT y Github para Principiantes
🤍

Descuento del 60% en todos mis cursos 🤍
▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
RECURSOS RECOMENDADOS

GANA EN DÓLARES desde Latinoamérica y emigra a cualquier parte del mundo.
Talently ► 🤍

¿QUIERES APRENDER INGLÉS?
Italki ► $10 de regalo con tu primera compra
🤍

Busuu ► App gratis con descuento para su sección Premium
🤍

Dominios ► Namecheap:
🤍

Hosting ► Bluehost:
🤍

Nota: Los links en la descripción son links de afiliado, lo que significa que recibiré una pequeña comisión si te registras usando esos links sin ningún costo extra para ti. Todos los links de afiliados son productos o servicios en los que creo y uso personalmente.

Music from 🤍
«Blippy Trance» by Kevin MacLeod (🤍)
License: CC BY (🤍

Пример 1: Hello world

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

Вывод консоли:

  • — команда, запускающая контейнер.
  • — образ, который вы запускаете, например, образ ОС Ubuntu. Когда вы определяете его, Docker начинает поиск на Docker-хосте. Если образ не существует локально, тогда он будет вытянут из общественного реестра — Docker Hub.
  •  — команда, которая будет запущена внутри нового контейнера. Данный контейнер просто выведет «Hello world» и остановит выполнение.

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

  • — флаг, добавляющий псевдотерминал внутри нового контейнера.
  • — флаг, который позволяет установить интерактивное соединение, взяв стандартный ввод (STDIN) контейнера.
  • — флаг, автоматически удаляющий контейнер после завершения процесса. По умолчанию контейнеры не удаляются. Этот контейнер существует, пока установлена текущая сессия оболочки, и уничтожается, когда мы покидаем сессию (например, SSH-сессию с удаленным сервером).

Если вы хотите оставить контейнер работающим после завершения сессии, превратите его в демон-процесс:

  • — устанавливает имя демона для нового контейнера. Если вы не определите имя, то Docker сгенерирует и присвоит его автоматически.
  • — флаг запускает контейнер в фоновом режиме (демонизирует его).

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

Вывод консоли:

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

Команда показала, что у нас всего два контейнера:

  • (имя для этого контейнера сгенерировано автоматически, оно будет другим на вашем компьютере) — это первый контейнер, который мы создали, выводит один раз «Hello world».
  •  — это третий контейнер, который мы создали, работает как фоновый процесс.

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

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

Вывод консоли:

  • — объединяет логи контейнера.
  •  — флаг для слежения за выводом логов (работает так же, как ).

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

Удостоверимся, что контейнер остановился:

Вывод консоли:

Контейнер остановился. Мы можем запустить его заново:

Удостоверимся, что он работает:

Вывод консоли:

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

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

  •  — команда для удаления контейнера.
  •  — флаг для , который останавливает контейнер, если он работает (принудительное удаление).
  •  — флаг для , который выводит только ID контейнеров.

Куда отправляются данные, когда они записываются в контейнер?

Предположим, что мы заходим в оболочку внутри busybox контейнера:

Затем, давайте запишем некоторые данные, скажем, в /tmp:

Мы видим, что данные определенно записываются. Но куда же на самом деле идут эти данные? Как мы узнали ранее, образы Docker состоят из слоев, уложенных друг на друга, чтобы привести к окончательному образу. Каждый из этих слоев содержит данные, измененные в такой операции, как установка инструмента, добавление исходного кода и т.д. Каждый из этих слоев становится доступным только для чтения после его создания. Когда контейнер создается из образа, тонкий R/W слой добавляется поверх предыдущих слоев образа. Этот слой обрабатывает все вызовы записи из контейнера, которые, в противном случае, были бы направлены на слои ниже, доступные только для чтения. Помните, что контейнеры эфемерны по своей природе. Они предназначены для того, чтобы иметь определенную продолжительность жизни и умереть в какой-то момент, как и любой процесс. Тонкий слой чтения/записи также эфемерен — он исчезает вместе с контейнером. Таким образом, любые записи, которые мы выполняем в контейнере, ограничены временем жизни этого контейнера. Они исчезнут, когда контейнер будет уничтожен. Это очевидное ограничение, которое не способствует хранению статусной информации. Итак, как разработчики и администраторы работают с этим? Они используют Тома Docker.

Dockerfile

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

Создадим простейший файл Dockerfile:

root@dedicated:~# mkdir /opt/freehost-image

root@dedicated:~# cd /opt/freehost-image

root@dedicated:/opt/freehost-image# nano Dockerfile

содержимое Dockerfile:

FROM debian:latest

MAINTAINER Dmitry Shestak <shestak@freehost.com.ua>

RUN apt-get update

RUN apt-get install -y nginx mc curl atop

EXPOSE 80

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

docker build . -t freehost-image

В консоли Вы увидите подробный вывод того, что происходит внутри контейнера. А происходит следующее: поле FROM указывает исходный образ операционной системы, на основе которого будет сформирован наш собственный образ. Поле MAINTAINER указывает автора образа. Поле RUN запускает оболочку командной строки, внутри которой система сначала обновит индекс пакетов, а затем установит перечисленное программное обеспечение.

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

root@dedicated:~# docker images

В списке мы видим наш образ который мы создали: freehost-image (id 21f738109e09). Выполним в него вход и запустим что-нибудь из программного обеспечения, которое мы перечислили в сценарии.

root@dedicated:~# docker run -it freehost-image

root@5199cfa793af:/# atop

Куда идти дальше

  • Предоставьте несколько хостов Docker на вашем облачном провайдере
  • Понять концепции машин
  • Список справочных страниц Докер машины для всех поддерживаемых драйверов
  • Драйвер докерной машины для Oracle VirtualBox
  • Драйвер Докер Машины для Microsoft Hyper-V
  • ссылка на командную строку docker-machine

докер , машина , virtualbox , локальный

2019 Docker, Inc.Лицензия Apache,версия 2.0.Докер и логотип Докер являются торговыми марками или зарегистрированными торговыми марками компании Docker,Inc.в США и/или других странах.Docker,Inc.и другие стороны также могут иметь права на товарные знаки в других терминах,используемых в настоящем документе.https://docs.docker.com/machine/get-started/

Очистка всего и сразу

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

$ docker system pruneWARNING! This will remove:  - all stopped containers  - all networks not used by at least one container  - all dangling images  - all dangling build cacheAre you sure you want to continue? [y/N]

Выполнение этой команды время от времени для очистки диска — хорошая привычка.

  • Docker: привязываем порты
  • Список важнейших команд в Docker
  • Сканируем образы Docker на уязвимости

Читайте нас в Telegram, VK и

Установка и управление Portainer

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

  1. Web-панель. Управление осуществляется в окне браузера с помощью web-интерфейса.
  2. Управление сервисами. Portainer позволяет в графической оболочке указать реестр, с которого будет загружен контейнер, название образа, даст возможность пробросить необходимые порты, настроить сеть, указать рабочие директории, подключить диски.
  3. Управление контейнерами и сбор статистики. Вы сможете анализировать логи каждого отдельного контейнера, собирать статистику по используемым ресурсам, работать в контейнере подключившись к нему через bash в интерактивном окне.
  4. Кластеризация. Portainer поддерживает кластеризацию Docker Swarm.

Установить его не сложно, так как Portainer сам представлен в виде контейнера.

Первым делом создадим каталог, где будут размещены данные:

root@dedicated:~# mkdir /root/portainer/data

Запустим контейнер следующей командой:

root@dedicated:~# docker run --name portainer --restart always -d -p 9000:9000 -v
/root/portainer/data:/data -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

Так же мы можем установить Portainer через уже знакомый нам Docker-compose. Содержание файла будет следующее:

portainer:

image: portainer/portainer

container_name: portainer

hostname: portainer

restart: always

command: —no-auth —no-analytics

volumes:

— /var/run/docker.sock:/var/run/docker.sock

ports:

— «9000:9000»

Первым делом вы увидите окно регистрации, с предложением ввести пароль администратора. Введите сложный пароль и подтвердите его.

Перед вами появится с окно с выбором окружения, Local или Remote. Так как Docker у нас установлен локально, выбираем Local и подключаемся нажатием Connect. После чего вы увидите рабочее окружение Portainer.

На первый взгляд UI Portainer может показаться перегруженным и запутанным, но это только на первый взгляд. Меню и функционал интуитивно понятен. Предлагаем вам самостоятельно пройтись по всевозможным меню и вкладкам.

На следующем скриншоте, в разделе Containers мы можем увидеть все контейнеры, которые мы создали ранее в этой статье:

Запуск локальных машин при запуске

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

Создайте файл с именем в каталоге со следующим содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>EnvironmentVariables</key>
        <dict>
            <key>PATH</key>
            <string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
        </dict>
        <key>Label</key>
        <string>com.docker.machine.default</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/docker-machine</string>
            <string>start</string>
            <string>default</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

Вы можете изменить приведенную выше строку по чтобы этот запускал другую машину.

Отключить переменные окружения в текущей оболочке

Возможно, вы захотите использовать текущую оболочку для подключения к другому Docker Engine. Это может иметь место, если, например, вы используете Docker Desktop для Mac одновременно с Docker Toolbox и хотите общаться с двумя различными механизмами Docker. В обоих сценариях у вас есть возможность переключить среду для текущей оболочки для взаимодействия с различными механизмами Docker.

  1. Запустите чтобы проверить, установлены ли переменные окружения DOCKER.

    $ env | grep DOCKER
    DOCKER_HOST=tcp:
    DOCKER_MACHINE_NAME=default
    DOCKER_TLS_VERIFY=1
    DOCKER_CERT_PATH=/Users/<your_username>/.docker/machine/machines/default
    

    Если он возвращает выходные данные (как показано в примере), вы можете переменные окружения DOCKER .

  2. Используйте один из двух методов для отмены переменных окружения DOCKER в текущей оболочке.

    • Запустите команду для следующих переменных среды .

      unset DOCKER_TLS_VERIFY
      unset DOCKER_CERT_PATH
      unset DOCKER_MACHINE_NAME
      unset DOCKER_HOST
      
    • В качестве альтернативы, запустите команду ярлыка , чтобы показать команду, которую нужно выполнить для сброса всех переменных DOCKER:

      $ docker-machine env -u
      unset DOCKER_TLS_VERIFY
      unset DOCKER_HOST
      unset DOCKER_CERT_PATH
      unset DOCKER_MACHINE_NAME
      
      
      

      Запустите чтобы сбросить все переменные DOCKER в текущей оболочке.

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

     $ env | grep DOCKER
    

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

    Поскольку , этот сценарий не применим, поскольку Docker Desktop для Windows использует Docker Engine и Docker Machine, которые поставляются вместе с ним.

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

Docker — больше, чем просто программа. Это целая экосистема со множеством проектов и сервисов. Главный сервис, с которым вам придется иметь дело — Registry. Хранилище образов.

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

Разберемся с тем, как формируется имя образа, и что оно в себя включает.

Вторая колонка в выводе выше называется TAG. Когда мы выполняли команду , то на самом деле выполнялась команда . То есть мы не просто скачиваем образ nginx, а скачиваем его конкретную версию. Latest — тег по умолчанию. Несложно догадаться, что он означает последнюю версию образа.

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

Впрочем, популярные образы следуют соглашению. Как понятно из контекста, теги в Докере изменяемы, другими словами, вам никто не гарантирует, что скачав образ с одним и тем же тегом на разных компьютерах в разное время вы получите одно и то же. Такой подход может показаться странным и ненадежным, ведь нет гарантий, но на практике есть определенные соглашения, которым следуют все популярные образы. Тег latest действительно всегда содержит последнюю версию и постоянно обновляется, но кроме этого тега активно используется семантическое версионирование. Рассмотрим https://hub.docker.com/_/nginx

Теги, в которых присутствует полная семантическая версия (x.x.x) всегда неизменяемы, даже если в них встречается что-то еще, например, 1.12.2-alphine. Такую версию смело нужно брать для продакшен-окружения. Теги, подобные такому 1.12, обновляются при изменении path версии. То есть внутри образа может оказаться и версия 1.12.2, и в будущем 1.12.8. Точно такая же схема и с версиями, в которых указана только мажорная версия, например, 1. Только в данном случае обновление идет не только по патчу, но и по минорной версии.

Как вы помните, команда скачивает образ, если его нет локально, но эта проверка не связана с обновлением содержимого. Другими словами, если nginx:latest обновился, то его не будет скачивать, он использует тот latest, который прямо сейчас уже загружен. Для гарантированного обновления образа существует другая команда: . Вот она всегда проверяет, обновился ли образ для определенного тега.

Кроме тегов имя образа может содержать префикс: например, . Этот префикс является именем аккаунта на сайте, через который создаются образы, попадающие в Registry. Большинство образов как раз такие, с префиксом. И есть небольшой набор, буквально сотня образов, которые не имеют префикса. Их особенность в том, что эти образы поддерживает сам Docker. Поэтому если вы видите, что в имени образа нет префикса, значит это официальный образ. Список таких образов можно увидеть здесь: https://github.com/docker-library/official-images/tree/master/library

Удаляются образы командой .

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

Безопасность DockerСкопировать ссылку

Предлагаю обсудить еще одну важную тему — безопасность. Рассмотрим четыре аспекта:

  1. Безопасность вашей ОС во время разработки;
  2. Управление доступом на этапе запуска приложения в контейнере;
  3. Безопасные образы;
  4. Хранение секретной информации.

Безопасность вашей ОССкопировать ссылку

Что мешает ОС быть в безопасности? Конечно то, что вы вынуждены устанавливать кучу разнообразного софта, в том числе и экспериментального. Это могут быть приложения с графическим интерфейсом или сугубо консольные приложения. Часто вам нужно устанавливать JVM или что-то подобное. Каждая новая программа несет в себе дырки, через которые можно что-нибудь, да сделать. Docker позволяет практически избавить вас от необходимости установки этого груза. Да и работать с коллегами будет намного проще.

Доступ при запуске приложенияСкопировать ссылку

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

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

Вы также можете добавить эту настройку в Dockerfile:

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

В-третьих, необходимо управлять ресурсами вашей ОС, которые будут доступны для запуска контейнеров. Если вы не будете ограничивать эти ресурсы, Docker просто забьет всю оперативную память, что очень смахивает на DDOS атаку прямо у вас на компьютере. Необходимо также ограничивать и использование процессора. В Windows и macOS вы можете посмотреть потребление ресурсов системы с помощью Docker Desktop. Это можно сделать и через консоль командой, доступной уже на всех ОС:

Об оптимальных настройках вы можете подробнее почитать в официальной документации.

Безопасные образыСкопировать ссылку

Во время работы вы часто будете использовать образы из разных реестров. Будьте бдительны! Использовать образы необходимо с большим количеством скачиваний, высоким рейтингом при большом количестве отзывов, рекомендованные компанией (официальные образы) или группой, которой вы доверяете. Загружая неизвестный образ, вы получаете кота в мешке. В любом случае внимательно смотрите на конфигурационные файлы и базовые образы. Желательно также использовать подписанные образы. Для того чтобы уберечь себя от загрузки «неправильных» образов, необходимо выполнить команду в терминале:

Прочитать подробнее про эту систему можно в документации.

Хранение секретной информацииСкопировать ссылку

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

  1. Не помещайте секреты внутрь образа;
  2. Не используйте для секретов переменные среды.

В документации Docker есть специальный раздел, посвящённый сохранности подобной чувствительной информации. Там предлагаются различные варианты. Но Джеф Хэйл (Jeff Hale) советует хранить секретные данные в томах (Docker volumes), создание и использование которых были описаны выше.

Шаг 7 — Внесение изменений в контейнер для образа Docker

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

Данный раздел показывает, как сохранить состояние контейнера в виде нового образа Docker.

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

Затем внесите изменения в новый экземпляр образа Docker с помощью следующей команды.

Переключатель -m используется в качестве сообщения о внесении изменений, которое помогает вам и остальным узнать, какие изменения вы внесли, в то время как -a используется для указания автора. — это тот самый идентификатор, который вы отмечали ранее в этом руководстве, когда запускали интерактивную сессию Docker. Если вы не создавали дополнительные репозитории на Docker Hub, , как правило, является вашим именем пользователя на Docker Hub.

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

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

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

Вывод будет выглядеть следующим образом:

В данном примере является новым образом, который был получен из образа на Docker Hub. Разница в размере отражает внесенные изменения. В данном примере изменение состояло в том, что NodeJS был установлен. В следующий раз, когда вам потребуется запустить контейнер, использующий Ubuntu с предустановленным NodeJS, вы сможете использовать новый образ.

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

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

2013

Частичная поддержка Docker в Red Hat Enterprise Linux 6.5, полная — в Fedora версии 20

С ноября 2013 года частичная поддержка Docker включена в дистрибутив Red Hat Enterprise Linux версии 6.5, полная — в 20 версию дистрибутива Fedora, ранее достигнуто соглашение с Red Hat о включении с 2014 года Docker в тиражируемую PaaS-платформу Open Shift.

Поддержка Docker в OpenStack (релиз Havana)

В октябре 2013 года выпущен релиз Havana тиражируемой IaaS-платформы OpenStack, в котором реализована поддержка Docker (как драйвер для OpenStack Nova).

Публикация Docker под лицензией Apache 2.0

В марте 2013 года код Docker опубликован под лицензией Apache 2.0. В октябре 2013 года подчёркивая смещение фокуса к новой ключевой технологии, dotCloud переименована в Docker (PaaS-платформа сохранена под названием — dotCloud).

Установка WordPress в Docker с помощью Docker-compose

Docker-compose это инструмент, который используют для запуска нескольких контейнеров. Он является своего рода сценарием, позволяющий описать взаимодействие нескольких контейнеров для работы одного сложного приложения. Например, если нам нужен только nginx, запустить его можно командой ‘docker run nginx’. Если нам потребуется более сложное приложение, включающее в себя nginx+php+mysql, нам потребуется Docker-compose.

В этом примере мы создадим собственный docker-compose для сайта на популярном движке WordPress и запустим его.

Для начала установим приложение Docker-compose:

root@dedicated:~# curl -s https://api.github.com/repos/docker/compose/releases/latest |
grep browser_download_url | grep docker-compose-Linux-x86_64 | cut -d '"' -f 4 | wget -qi -

root@dedicated:~# chmod +x docker-compose-Linux-x86_64

root@dedicated:~# sudo mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

root@dedicated:~# docker-compose version

docker-compose version 1.25.2, build 698e2846

docker-py version: 4.1.0

CPython version: 3.7.5

OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019

Создадим наш файл сценария

root@dedicated:~# mkdir /opt/wordpress && cd /opt/wordpress

root@dedicated:/opt/wordpress# mcedit docker-compose.yml

…и добавим в него содержимое:

Внимание! Файл в формате *.yml, который чувствителен к синтаксису. Отступы должны иметь чётное количество пробелов

Если это условие не будет соблюдено, он будет неработоспособен.

После чего, находясь в каталоге с docker-compose.yml выполните команду:

root@dedicated:~# docker-compose up -d

В консоли вы должны увидеть следующее:

Creating network "wordpress_default" with the default driver

Creating volume "wordpress_db_data" with default driver

Pulling db (mysql:5.7)...

5.7: Pulling from library/mysql

804555ee0376: Pull complete

c53bab458734: Pull complete

…….

…….

d054b015f084: Pull complete

Digest:
sha256:73e8d8adf491c7a358ff94c74c8ebe35cb5f8857e249eb8ce6062b8576a01465

Status: Downloaded newer image for wordpress:latest

Creating wordpress_db_1 ... done

Creating wordpress_wordpress_1 ... done

В сценарии нами били описаны сервисы которые нужно установить (mysql и wordpress), мы указали пароли и пробросили порт, по которому мы можем получить доступ. Если вы все сделали верно, то для того чтобы увидеть окно с первоначальной настройкой WordPress, достаточно в оке браузера ввести: https://ваш_ip_адрес:8000

Уже известной нам командой посмотрим список запущенных контейнеров:

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

Пару лет назад несколько сотен Мбайт на образ было нормой. Ubuntu была около 600 Мбайт, а образы Microsoft .Net весили несколько гигабайт (это правда). В то время загрузка только пары таких образов могла сразу повлиять на дисковое пространство хост-машины, даже если слои между ними разделялись. Сегодня это не совсем так — базовые образы намного легче, но через некоторое время их накопление определенно окажет влияние, если не быть осторожным.

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

  • Промежуточные — те, что ссылаются на другие (дочерние) и не могут быть удалены.
  • Висящие — это те, на которые больше нет ссылок. Они занимают некоторое место на диске и могут быть удалены.

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

$ docker image ls -f dangling=trueREPOSITORY  TAG      IMAGE ID         CREATED             SIZE<none>      <none>   21e658fe5351     12 minutes ago      71.3MB

Чтобы удалить их, можно пойти долгим путем:

Или использовать подкоманду :

$ docker image pruneWARNING! This will remove all dangling images.Are you sure you want to continue? [y/N] yDeleted Images:deleted: sha256:143407a3cb7efa6e95761b8cd6cea25e3f41455be6d5e7cdadeleted: sha256:738010bda9dd34896bac9bbc77b2d60addd7738ad1a95e5ccdeleted: sha256:fa4f0194a1eb829523ecf3bad04b4a7bdce089c8361e2c347deleted: sha256:c5041938bcb46f78bf2f2a7f0a0df0eea74c4555097cc9197deleted: sha256:5945bb6e12888cf320828e0fd00728947104da82e3eb4452fTotal reclaimed space: 12.9kB

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

$ docker image rm $(docker image ls -q)
Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Басы в технике
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: