Пакуем приложения asp.net core с помощью docker

5 ответов

Лучший ответ

Чтение с: страницы тома докеров

Итак, простой docker-compose (внутри папки с именем nginx):

Выдаст все файлы в системе хоста через:

Затем вы можете просмотреть файлы на хосте :

И, наконец, использовать его из ./ config :

4

Tyhal
17 Дек 2019 в 08:07

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

Местоположение / etc / nginx также содержит другие файлы (например, mime.types и fastcgi_params), которые не будут существовать, если вы сопоставите каталог хоста ./ config , если только Конечно, вместо этого вы копируете их на хост, но это не очень хорошее решение.

Выше я просто сопоставил локальный файл nginx.conf, расположенный в папке / nginx / myapp, с /etx/nginx/nginx.conf, а локальную папку с включенными сайтами — в папку / etc / nginx / sites-enabled в контейнере.

Вам было бы лучше, если бы все было как можно проще, потому что докер уже сложен по своей природе.

Skeptic
11 Дек 2019 в 10:06

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

В качестве ссылки вы должны посмотреть на уже отвеченный вопрос, который выглядел примерно так же, как ваш: https://stackoverflow.com/a/53930043/12485228

Я надеюсь, что это помогает.

aru_sha4
10 Дек 2019 в 11:43

Не совсем возможно. Тома Docker монтируются в контейнер. Не работает наоборот. Возможная альтернатива здесь: https://stackoverflow.com/a/41914917/5586914

-1

Herz3h
16 Дек 2019 в 20:33

Как правило, это невозможно, поскольку контейнеры представляют собой просто «запускаемые изображения» и хранятся в виде пакета zip-файлов в fs. При запуске события они помещаются в «папку», где ядро Linux выполняет и запускает процессы с использованием этого корня.

ДОПОЛНИТЕЛЬНО вы можете в конце процесса отобразить некоторые пути от хост-системы к некоторым путям в , но не обратно. Когда Docker выполняет сопоставление, это путь полностью, поэтому все существующие файлы в пути будут «скрыты» от образа fs и «заменены» отображенным путем к хосту.

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

  • Запустите контейнер с сопоставленным путем к другому каталогу, и, когда ваш контейнер запустится, просто скопируйте необходимое содержимое папки с помощью оболочки контейнера в сопоставленную папку. Пример: давайте сопоставим с хоста, и когда контейнер запустится, перейдем в работающий контейнер с помощью и запустим что-то вроде .
  • экспортировать всю файловую систему изображений с помощью https://docs.docker.com/engine/reference / commandline / export / и взгляните на интересную конфигурацию изображения и так далее.

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

Удачи!

Alexandr Shurigin
10 Дек 2019 в 12:09

Пример Dockerfile: образ для установки MongoDB

Теперь попробуйте создать Dockerfile и добавить в него пошаговые инструкции по установке MongoDB.

Примечание: Все нижеприведённые команды и аргументы нужно добавить в Dockerfile последовательно. В конце руководства можно найти полный код файла.

Создайте Dockerfile с помощью текстового редактора:

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

Задайте базовый образ:

Укажите его автора:

Обновите список репозитория приложения.

Задайте команды и аргументы для загрузки MongoDB:

Затем укажите порт по умолчанию:

Сохраните Dockerfile, добавив в него всё необходимое. Для этого нажмите CTRL+X и Y.

В результате файл должен выглядеть так:

Теперь можно собрать образ MongoDB с помощью этого сценария.

Примечание: Флаг -t задаёт название образа. Чтобы получить справку по сборке, введите команду:

Запуск MongoDB

С помощью образа MongoDB можно создать контейнер.

Примечание: Чтобы задать имя контейнера, добавьте флаг -name [].

Если при запуске контейнера вы не укажете его имя, docker присвоит ему сложный алфавитно-цифровой ID. Его можно узнать с помощью команды:

Чтобы отключить контейнер, нажмите CTRL+P и CTRL+Q.

DockerDockerfilesLXCMongoDB

Установка Docker

Рассмотрим примеры установки на базе операционных систем Red Hat/CentOS и Debian/Ubuntu.

Red Hat/CentOS

Устанавливаем репозиторий — для этого загружаем файл с настройками репозитория:

wget https://download.docker.com/linux/centos/docker-ce.repo

* если система вернет ошибку, устанавливаем wget командой yum install wget.

… и переносим его в каталог yum.repos.d:

mv docker-ce.repo /etc/yum.repos.d/

Устанавливаем docker:

yum install docker-ce docker-ce-cli containerd.io

Если система вернет ошибку Необходимо: container-selinux >= …, переходим на страницу пакетов CentOS, находим нужную версию container-selinux и копируем на него ссылку:

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

yum install http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.99-1.el7_6.noarch.rpm

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

yum install docker-ce docker-ce-cli containerd.io

В deb-системе ставится командой:

apt-get install docker docker.io

После установки

Разрешаем запуск сервиса docker:

systemctl enable docker

… и запускаем его:

systemctl start docker

После проверяем:

docker run hello-world

… мы должны увидеть:


Hello from Docker!
This message shows that your installation appears to be working correctly.

NGINX + PHP + PHP-FPM

Рекомендуется каждый микросервис помещать в свой отдельный контейнер, но мы (для отдельного примера) веб-сервер с интерпретатором PHP поместим в один и тот же имидж, на основе которого будут создаваться контейнеры.

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

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

mkdir -p /opt/docker/web-server

Переходим в созданный каталог:

cd /opt/docker/web-server/

Создаем докер-файл:

vi Dockerfile

  1. FROM centos:8
  2. MAINTAINER Dmitriy Mosk <[email protected]>
  3. ENV TZ=Europe/Moscow
  4. RUN dnf update -y
  5. RUN dnf install -y nginx php php-fpm php-mysqli
  6. RUN dnf clean all
  7. RUN echo «daemon off;» >> /etc/nginx/nginx.conf
  8. RUN mkdir /run/php-fpm
  9. COPY ./html/ /usr/share/nginx/html/
  10. CMD php-fpm -D ; nginx
  11. EXPOSE 80

* где:
1) указываем, какой берем базовый образ. В нашем случае, CentOS 8.
3) задаем для информации того, кто создал образ. Указываем свое имя и адрес электронной почты.
5) создаем переменную окружения TZ с указанием временной зоны (в нашем примере, московское время).
7) запускаем обновление системы.
8) устанавливаем пакеты: веб-сервер nginx, интерпретатор php, сервис php-fpm для обработки скриптов, модуль php-mysqli для работы php с СУБД MySQL/MariaDB.
9) удаляем скачанные пакеты и временные файлы, образовавшиеся во время установки.
10) добавляем в конфигурационный файл nginx строку daemon off, которая запретит веб-серверу автоматически запуститься в качестве демона.
11) создаем каталог /run/php-fpm — без него не сможет запуститься php-fpm.
13) копируем содержимое каталога html, который находится в том же каталоге, что и dockerfile, в каталог /usr/share/nginx/html/ внутри контейнера. В данной папке должен быть наше веб-приложение.
15) запускаем php-fpm и nginx. Команда CMD в dockerfile может быть только одна.
17) открываем порт 80 для работы веб-сервера.

В рабочем каталоге создаем папку html:

mkdir html

… а в ней — файл index.php: 

vi html/index.php

<?php
phpinfo();
?>

* мы создали скрипт, который будет выводить информацию о php в браузере для примера. По идее, в данную папку мы должны положить сайт (веб-приложение).

Создаем первый билд для нашего образа:

docker build -t dmosk/webapp:v1 .

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

docker images

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

docker login —username dmosk

docker tag dmosk/webapp:v1 dmosk/web:nginx_php7

docker push dmosk/web:nginx_php7

* первой командой мы прошли аутентификацию на портале докер-хаба (в качестве id/login мы используем dmosk — это учетная запись, которую мы зарегистрировали в Docker Hub). Вторая команда создает тег для нашего образа, где dmosk — учетная запись на dockerhub; web — имя репозитория; nginx_php7 — сам тег. Последняя команда заливает образ в репозиторий.
* подробнее про докера.

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

Запускаем веб-сервер из созданного образа:

docker run —name web_server -d -p 80:80 dmosk/webapp:v1

Открываем браузер и переходим по адресу http://<IP-адрес сервера с docker> — откроется страница phpinfo:

Наш веб-сервер из Docker работает.

Почему docker?

Можно конечно же установить на саму операционную систему необходимые компоненты, например — php, mysql, nginx/apache. Однако, это не совсем правильно, ввиду того, что среда разработки должна соответствовать среде исполнения вашего приложения. На хостинге это как правило linux, — поэтому и среда разработки должна быть тоже linux.

Докер уже набрал огромную популярность, почти в любой вакансии разработчика и не важно какого указано требование — уметь пользоваться докером.
Докер применяется как для разработки, так и для продакшена. Есть множество хостингов для ваших докер контейнеров: https://geekflare.com/docker-hosting-platforms/
Не важно какая у вас ОС (windows, mac, linux) — установите Докер, сделайте сборку контейнеров и получите рабочее окружение.
Создавайте под каждый свой проект — уникальное окружение со специфическими конфигурациями, легко делитесь этим окружением с другими разработчиками и им не нужно будет муторно настраивать под каждый проект уникальное окружение.. Исходя из всего вышеперечисленного вот почему я остановился на докер и почему рекомендую обязательно его рассмотреть при разработке

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

Команды Dockerfile

Dockerfile поддерживает огромное количество команд для сборки образов. Рассмотрим основные команды.

Примечание: Как говорилось ранее, все команды в файле Dockerfile нужно упорядочить по мере их выполнения. Однако некоторые команды (например, MAINTAINER) могут находиться в любом месте файла (но всегда после команды  FROM).

Команда ADD

Команда ADD имеет два аргумента: источник и назначение. Команда копирует исходный файл в целевой каталог файловой системы контейнера. Если в источнике указан URL-адрес, команда загрузит его содержимое. Например:

Команда CMD

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

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

Например:

Аргумент ENTRYPOINT

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

Аргумент ENTRYPOINT можно использовать с командой CMD.

Команда ENV

Команда ENV задаёт переменные среды в формате «ключ = значение», которые в дальнейшем можно использовать в сценариях и приложениях внутри контейнера. ENV обеспечивает гибкость запуска команд.

Команда FROM

FROM – пожалуй, одна из самых важных команд Dockerfile. Она определяет базовый образ, на основе которого будет собран новый образ. В качестве базового можно использовать любой доступный образ, включая созданные ранее. Если указанный образ не найден, Docker попытается найти и загрузить его из индекса образов. С этой команды должен начинаться Dockerfile.

Команда MAINTAINER

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

Команда RUN

RUN – основная команда Dockerfile для запуска других команд. Она запускает указанную команду внутри контейнера с учётом всех аргументов. В отличие от CMD, её можно использовать для сборки образа (формирования нового уровня).

Компоненты Docker

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

  1. Docker-демон (Docker-daemon) — сервер контейнеров, входящий в состав программных средств Docker. Демон управляет Docker-объектами (сети, хранилища, образы и контейнеры). Демон также может связываться с другими демонами для управления сервисами Docker.
  2. Docker-клиент (Docker-client / CLI) — интерфейс взаимодействия пользователя с Docker-демоном. Клиент и Демон — важнейшие компоненты «движка» Докера (Docker Engine). Клиент Docker может взаимодействовать с несколькими демонами.
  3. Docker-образ (Docker-image) — файл, включающий зависимости, сведения, конфигурацию для дальнейшего развертывания и инициализации контейнера.
  4. Docker-файл (Docker-file) — описание правил по сборке образа, в котором первая строка указывает на базовый образ. Последующие команды выполняют копирование файлов и установку программ для создания определенной среды для разработки.
  5. Docker-контейнер (Docker-container) — это легкий, автономный исполняемый пакет программного обеспечения, который включает в себя все необходимое для запуска приложения: код, среду выполнения, системные инструменты, системные библиотеки и настройки.
  6. Том (Volume) — эмуляция файловой системы для осуществления операций чтения и записи. Она создается автоматически с контейнером, поскольку некоторые приложения осуществляют сохранение данных.
  7. Реестр (Docker-registry) — зарезервированный сервер, используемый для хранения docker-образов.
    Примеры реестров:
    • Центр Docker — реестр, используемый для загрузки docker-image. Он обеспечивает их размещение и интеграцию с GitHub и Bitbucket.
    • Контейнеры Azure — предназначен для работы с образами и их компонентами в директории Azure (Azure Active Directory).
    • Доверенный реестр Docker или DTR — служба docker-реестра для инсталляции на локальном компьютере или сети компании.
  8. Docker-хаб (Docker-hub) или хранилище данных — репозиторий, предназначенный для хранения образов с различным программным обеспечением. Наличие готовых элементов влияет на скорость разработки.
  9. Docker-хост (Docker-host) — машинная среда для запуска контейнеров с программным обеспечением.
  10. Docker-сети (Docker-networks) — применяются для организации сетевого интерфейса между приложениями, развернутыми в контейнерах.

11 ответов

Лучший ответ

Сначала удалите старую версию :

Если установлено через apt-get

Если установлено через curl

Если установлено через пункт

Затем найдите самую новую версию на странице релиза на GitHub или с помощью керлинга. API, если у вас установлено (благодаря dragon788 и frbl за это улучшение):

Наконец, загрузите в ваше любимое место с доступом к $ PATH и установите разрешения:

99

Eric M. Johnson
15 Сен 2019 в 03:41

Основываясь на ответе @ eric-johnson, я сейчас использую это в сценарии:

Он получает последнюю версию API GitHub.

14

frbl
20 Июл 2018 в 04:44

Если вы пробовали и получили , попробуйте этот метод:

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

Удалите старую версию .

Загрузите последнюю версию (проверьте официальный репозиторий: docker / compose / Releases. ):

( замените 1.24.0, если необходимо )

Наконец, примените права доступа к исполняемому файлу:

Проверить версию:

5

DependencyHell
26 Апр 2019 в 14:23

Вот еще один способ установки последней версии docker-compose с использованием curl и sed.

3

Jakob Eriksson
24 Янв 2019 в 06:46

Если вы установили с помощью pip, для обновления вы можете просто использовать:

1

Branimir Valentić
7 Авг 2019 в 12:05

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

dragon788
20 Сен 2018 в 16:53

На рабочем столе Ubuntu 18.04.2 у меня удален «local» из пути при использовании команды curl для установки пакета, и он работает для меня. См. Выше ответ Kshitij.

Harry
6 Апр 2019 в 14:03

Если у вас есть homebrew, вы также можете установить его через

Это хороший способ установки в системе Mac OS

Kristian Mandrup
25 Окт 2018 в 14:23

Используйте это из командной строки:

Запишите последнюю версию выпуска

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

Тогда тестовая версия:

Md. Tanvir Rahaman
17 Сен 2018 в 20:07

Если указанные выше методы не работают для вас, обратитесь к этому ответу: https://stackoverflow.com/a/40554985

13

kpratihast
19 Июл 2018 в 18:50

Самый простой способ получить постоянное и устойчивое решение для установки Docker Compose и способ его обновления — это просто использовать pip менеджера пакетов с:

Я искал хорошее решение для уродливой проблемы «как перейти на последнюю версию», которая появилась после того, как вы прочитали официальную документацию — и случайно нашел ее — просто взгляните на пакет pip docker-compose — он должен отражать (в основном) текущее число последняя выпущенная версия Docker Compose.

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

27

jonashackt
9 Окт 2019 в 12:02

Что такое Dockerfile

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

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

Файл Docker имеет следующую форму:

не чувствительна к регистру, но по соглашению для ее имен используется ЗАПИСЬ.

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

  • ARG — эта инструкция позволяет вам определять переменные, которые могут быть переданы во время сборки. Вы также можете установить значение по умолчанию.
  • FROM — базовое изображение для построения нового изображения. Эта инструкция должна быть первой инструкцией без комментариев в Dockerfile. Единственное исключение из этого правила — когда вы хотите использовать переменную в аргументе . В этом случае может предшествовать одна или несколько инструкций .
  • LABEL — используется для добавления метаданных к изображению, таких как описание, версия, автор и т. Д. Вы можете указать несколько , и каждая инструкция представляет собой пару «ключ-значение».
  • RUN — команды, указанные в этой инструкции, будут выполняться в процессе сборки. Каждая инструкция создает новый слой поверх текущего изображения.
  • ДОБАВИТЬ — используется для копирования файлов и каталогов из указанного источника в указанное место назначения в образе докера. Источником могут быть локальные файлы, каталоги или URL. Если источником является локальный tar-архив, он автоматически распаковывается в образ Docker.
  • КОПИРОВАТЬ — аналогично но источником может быть только локальный файл или каталог.
  • ENV — Эта инструкция позволяет вам определить переменную среды.
  • CMD — используется для указания команды, которая будет выполняться при запуске контейнера. Вы можете использовать только одну инструкцию в своем Dockerfile.
  • ENTRYPOINT — аналогично , эта инструкция определяет, какая команда будет выполняться при запуске контейнера.
  • WORKDIR — эта директива устанавливает текущий рабочий каталог для инструкций , , , и .
  • ПОЛЬЗОВАТЕЛЬ — Установите имя пользователя или для использования при выполнении любых следующих инструкций , , , и .
  • VOLUME — позволяет подключить каталог хост-машины к контейнеру.
  • EXPOSE — используется для указания порта, на котором контейнер прослушивает во время выполнения.

Чтобы исключить добавление файлов и каталогов в образ, создайте файл в контекстном каталоге. Синтаксис аналогичен файла Git.

Пример

Если изменить расположение файлов Docker Compose, задав для относительный путь, необходимо также убедиться, что контекст сборки изменен и ссылается на папку решения. Например, если файл Docker Compose находится в папке DockerComposeFiles, он должен задавать «..» или «../..» для контекста сборки в зависимости от его расположения относительно папки решения.

Файл mydockercompose.yml должен выглядеть так, как показано ниже. Для контекста сборки задан относительный путь к папке решения (в данном случае ).

Observação

Свойства DockerComposeBuildArguments, DockerComposeDownArguments и DockerComposeUpArguments появились в Visual Studio 2019 версии 16.3.

Начинаем установку

1. Устанавливаем git, чтоб он был доступен из командной строки. Процесс описывать не буду, это легко гуглится.

2. Устанавливаем сам Docker desktop for mac/windows https://docs.docker.com/docker-for-mac/install/https://docs.docker.com/docker-for-windows/install/

Затруднений при установке возникнуть не должно, делать все как описано в инструкции по этим ссылкам.
Главное чтоб у вас установился Docker desktop, чтобы его иконка отображалась в строке состояния со статусом: is running

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

3. Проверяете установился ли Докер. Когда вы установили сам клиент docker — открываете командную строку и вводите:

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

Если все хорошо на этом шаге — то, отлично, переходим дальше!

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

Вообще можно собрать конечно самому сборку и я вначале так и пытался сделать, однако столкнулся с множеством проблем, чтением мануалов. Что привело меня к поиску уже готовой сборки для веб сервера. И я такую нашел: https://github.com/sprintcube/docker-compose-lamp

В нее входят следующие компоненты:

  • PHP (вы сами можете выбрать нужную вам 1 из 6 версий. начиная с 5.4 до 7.4)
  • Apache
  • MySQL
  • phpMyAdmin
  • Redis

Теперь нужно создать папку куда мы ее скачаем. У меня это — /Users/your_name/Documents/docker/lamp

lamp — это название сборки (в первую очередь для меня, чтобы не забыть)

5. Далее читаем Installation https://github.com/sprintcube/docker-compose-lamp
переходим в папку и выкачиваем файлы с репозитория:

6. Команда docker-compose up -d

Это команда обращается к пакетному менеджеру docker, скачивает и устанавливает (если еще не установлены) все компоненты которые описаны в docker-compose.yml — собирает их вместе и запускает контейнеры.

В файле docker-compose.yml — вы увидите какие именно это пакеты и как они прописаны. Обязательно откройте этот файл и ознакомьтесь с содержимым!

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

Поздравляю! Теперь можете заходить на localhost и отобразиться страничка, которая расположена по адресу /Users/your_name/Documents/docker/lamp/www/index.php

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

Мой опыт

Лет 5 назад я начал пользовался vagrant + puphpet, и это было достаточно удобное решение, но столкнувшись однажды с проблемой обновления версии php, а также с проблемой медленной синхронизации файлов mac — я решил перейти на docker. Также его использую когда нужно запустить проект на windows. Но на windows он оказался куда капризней.

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

И то я очень много в нем не знаю, docker это очень обширная тема, и разбираться в нем и изучать его можно очень долго.

Docker Compose

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

После уничтожаем созданный контейнер:

docker container stop registry && docker container rm -v registry

Создаем каталог — в нем мы создадим файл docker-compose:

mkdir -p /opt/docker/repo

Переходим в созданный каталог:

cd /opt/docker/repo

Создаем файл композера:

vi docker-compose.yml

registry:
  restart: always
  image: registry:2
  ports:
    — 5000:5000
  environment:
    REGISTRY_HTTP_TLS_CERTIFICATE: /certs/dmosk.local.pem
    REGISTRY_HTTP_TLS_KEY: /certs/dmosk.local.key
    REGISTRY_AUTH: htpasswd
    REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
    REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
  volumes:
    — /dockerrepo:/var/lib/registry
    — /etc/ssl/dmosk:/certs
    — /etc/docker/auth:/auth

* в данном примере мы описали запуск контейнера из образа registry:2 со всеми вышеописанными настройками:

  • Порт 5000.
  • Использовать сертификат для SSL.
  • Требовать проходить аутентификацию.
  • Монтировать некоторые каталоги с хостового сервера внутрь контейнера.

Запускаем наш контейнер с помощью композера:

docker-compose up -d

* так как мы используем готовый образ, нам не нужно делать docker-compose build.

Наш контейнер должен запуститься.

Подведение итогов

Файлы Dockerfiles и Compose служат разным целям. Если бы я мог построить график, это выглядело бы примерно так

Dockerfile -> Docker Image -> Compose File -> Running Containers

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

Например, вы можете переписать предыдущий файл композиции, чтобы

version: "3.3"

services:
    fortune:
        build:
            context: '.'
            dockerfile: "./Dockerfile"
        image: "fortune:alpine"

Теперь вы можете запустить создание образа docker-compose build. Или вы также можете запустить сборку docker-compose up –build и сразу запустить контейнер.

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

Мы надеемся, что эта статья прояснила, в чем разница между файлом Dockerfile и файлом Compose. Если у вас есть какие-либо вопросы, дайте нам знать в разделе комментариев ниже.

Как все будет работать в итоге

  • Мы установим следующую сборку: PHP (5.4 — 7.4), Apache, MySQL, phpMyAdmin. Сможем зайти из браузера на localhost и запустить ваш проект (или просто в данном случае index.php)
  • Будет папка, в которой хранится ваш проект. Т.е. используете ваш любимый IDE для разработки. Со всеми файлами вы работаете из своей родной ОС (mac/windows).
  • Докер сделает виртуальный контейнер, в котором запустит необходимую сборку (в нашем случае lamp) и все файлы будут синхронизированы
  • Доступны конфиги php.ini, apache, дампы mysql, которые загружаются в виртуальный контейнер docker
  • при желании c помощью командной строки можно зайти на виртуальный сервер (контейнер) и сделать при желании там все необходимое (подправить конфиг, запустить команду и тд).
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

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