Что такое Dockerfile и как создать образ Docker?

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


Это где Dockerfile входит в картину; это поможет вам создавать собственные изображения Docker. Следовательно, знание Dockerfile необходимо.

Что такое Dockerfile?

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

комментарии и команды + аргументы – это два вида блоков основной строки в синтаксисе Dockerfile

Синтаксис комментариев

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

аргумент команды аргумент1…..

Пример команд + аргументы

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

аргумент команды аргумент1…..

Вот как будет выглядеть ваш рабочий процесс.

  • Создайте Dockerfile и упомяните инструкции по созданию образа Docker.
  • Запустите команду docker build, которая создаст образ docker
  • Теперь образ docker готов к использованию, используйте команду docker run для создания контейнеров.

рабочий процесс dockerfile

Основные команды

ОТ – Определяет базовый образ для использования и запускает процесс сборки.

ЗАПУСТИТЬ – Для запуска из образа требуется команда и ее аргументы.

CMD – Функция, аналогичная команде RUN, но она выполняется только после создания экземпляра контейнера.

ТОЧКА ВХОДА – Он нацелен на ваше приложение по умолчанию на изображении при создании контейнера.

ДОБАВИТЬ – Копирует файлы из источника в место назначения (внутри контейнера).

ENV – Устанавливает переменные среды.

Как создать образ Docker с помощью Dockerfile?

Во-первых, давайте создадим Dockerfile.

[Электронная почта защищена]: ~ $ gedit Dockerfile

Поместите ниже команды / инструкции в это и сохраните это.

# Установите базовое изображение на Ubuntu
ОТ Убунту

# Обновить список источников репозитория и установить gnupg2
RUN apt-get update && apt-get install -y gnupg2

# Добавьте ключ подтверждения пакета
ЗАПУСК apt-key adv –keyserver hkp: //keyserver.ubuntu.com: 80 –recv 7F0CEB10

# Добавить MongoDB в список источников репозитория
RUN echo ‘deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen’ > tee /etc/apt/sources.list.d/mongodb.list

# Обновление списка источников репозитория
RUN apt-get update

# Установить пакет MongoDB (.deb)
RUN apt-get install -y mongodb

# Создать каталог данных по умолчанию
RUN mkdir -p / data / db

# Выставить порт по умолчанию
ЭКСПОЗИЦИЯ 27017

# Порт по умолчанию для выполнения точки входа (MongoDB)
CMD ["–порт 27017"]

# Установить команду контейнера по умолчанию
ENTRYPOINT usr / bin / mongodb

В этом Dockerfile Ubuntu устанавливается в качестве базового образа. Затем упоминаются необходимые команды и аргументы для установки MongoDB. Порт 27017 открыт для MongoDB с помощью команды контейнера по умолчанию как usr / bin / mongodb

Далее я запусту его для создания образа докера.

Запуск Dockerfile

Следующая команда создаст образ докера с именем geekflare_mongodb после успешного выполнения.

[Электронная почта защищена]: ~ $ docker build -t geekflare_mongodb .

Отправка контекста сборки демону Docker 667.2 МБ

Шаг 1/9: ОТ Убунту

последнее: вытащить из библиотеки / Ubuntu

7413c47ba209: вытащить завершено

0fe7e7cbb2e8: извлечение завершено

1d425c982345: извлечение завершено

344da5c95cec: вытащить завершено

Дайджест: sha256: c303f19cfe9ee92badbbbd7567bc1ca47789f79303ddcef56f77687d4744cd7a

Статус: Загружен новый образ для Ubuntu: последние

—> 3556258649b2

Шаг 2/10: ЗАПУСК apt-get update && apt-get install -y gnupg2

—> Запуск в de3706328761

Получить: 1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88,7 кБ]

Получить: 2 http://archive.ubuntu.com/ubuntu Bionic InRelease [242 кБ]

Получено 16,9 МБ за 38 секунд (445 кБ / с)

Чтение списков пакетов…

Чтение списков пакетов…

Построение дерева зависимостей…

Чтение информации о состоянии…

Нужно достать 5187 кБ архивов.

После этой операции будет использовано 15,8 МБ дополнительного дискового пространства..

Получить: 1 http://archive.ubuntu.com/ubuntu bionic / main amd64 readline-common all 7.0-3 [52.9 кБ]

Получить: 2 http://archive.ubuntu.com/ubuntu bionic / main amd64 libreadline7 amd64 7.0-3 [124 кБ]

Получить: 3 http://archive.ubuntu.com/ubuntu bionic-updates / main amd64 libsqlite3-0 amd64 3.22.0-1ubuntu0.1 [497 кБ]

Получить: 4 http://archive.ubuntu.com/ubuntu bionic-updates / main amd64 libssl1.1 amd64 1.1.1-1ubuntu2.1 ~ 18.04.4 [1300 кБ]

debconf: задержка конфигурации пакета, так как apt-utils не установлен

Получено 5187 кБ за 12 секунд (416 кБ / с)

Выбор ранее не выбранного пакета readline-common.

(Чтение базы данных … 4040 файлов и каталогов в настоящее время установлены.)

Подготовка к распаковке … / 00-readline-common_7.0-3_all.deb …

Распаковка readline-common (7.0-3) …

Выбор ранее не выбранного пакета libreadline7: amd64.

Подготовка к распаковке … / 01-libreadline7_7.0-3_amd64.deb …

Выбор ранее не выбранного пакета dirmngr.

Настройка libnpth0: amd64 (1.5-3) …

Настройка libksba8: amd64 (1.3.5-2) …

Настройка gnupg-l10n (2.2.4-1ubuntu1.2) …

Обработка триггеров для libc-bin (2.27-3ubuntu1) …

Снятие промежуточного контейнера de3706328761

—> a32533894ed1

Шаг 3/10: ЗАПУСК apt-key adv –keyserver hkp: //keyserver.ubuntu.com: 80 –recv 7F0CEB10

—> Работает в 69c4dba38983

Предупреждение: вывод ключа apt не должен анализироваться (стандартный вывод не является терминалом)

Выполнение: /tmp/apt-key-gpghome.MuT5BDWwKZ/gpg.1.sh –keyserver hkp: //keyserver.ubuntu.com: 80 –recv 7F0CEB10

gpg: ключ 5F8F93707F0CEB10: открытый ключ "Полностью законный ключ подписи <[Электронная почта защищена]>" импортный

gpg: key 9ECBEC467F0CEB10: 1 подпись не проверена из-за отсутствия ключа

gpg: ключ 9ECBEC467F0CEB10: открытый ключ "Ричард Кройтер <[Электронная почта защищена]>" импортный

GPG: Всего обработано: 2

GPG: импортировано: 2

Снятие промежуточного контейнера 69c4dba38983

—> cffbe06c1b50

Шаг 4/10: RUN echo ‘deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen’ > tee /etc/apt/sources.list.d/mongodb.list

—> Работает в 40630fd7b0a9

Снятие промежуточного контейнера 40630fd7b0a9

—> a1bd9d8d7e51

Шаг 5/10: ЗАПУСК apt-get update

—> Работает в 750717d9c0ea

Хит: 1 http://archive.ubuntu.com/ubuntu bionic InRelease

Хит: 2 http://archive.ubuntu.com/ubuntu bionic-updates InRelease

Хит: 3 http://security.ubuntu.com/ubuntu bionic-security InRelease

Хит: 4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease

Чтение списков пакетов…

Снятие промежуточного контейнера 750717d9c0ea

—> 397d6501db58

Шаг 6/10: ЗАПУСК apt-get install -y mongodb

—> Работает в 88609c005e73

Чтение списков пакетов…

Построение дерева зависимостей…

Чтение информации о состоянии…

Будут установлены следующие НОВЫЕ пакеты:

libboost-filesystem1.65.1 libboost-iostreams1.65.1

libboost-program-options1.65.1 libboost-system1.65.1 libgoogle-perftools4

libpcap0.8 libpcrecpp0v5 libsnappy1v5 libstemmer0d libtcmalloc-minimal4

libunwind8 libyaml-cpp0.5v5 mongo-tools mongodb mongodb-клиентов

mongodb-server mongodb-server-core

0 обновлено, 17 вновь установлено, 0 для удаления и 0 не обновлено.

Нужно получить 53,7 МБ архивов.

После этой операции будет использовано 218 МБ дополнительного дискового пространства..

Получить: 1 http://archive.ubuntu.com/ubuntu bionic-updates / universe amd64 mongodb-clients amd64 1: 3.6.3-0ubuntu1.1 [20,2 МБ]

Получить: 2 http://archive.ubuntu.com/ubuntu bionic-updates / universe amd64 mongodb-server-core amd64 1: 3.6.3-0ubuntu1.1 [20,3 МБ]

Получить: 3 http://archive.ubuntu.com/ubuntu bionic-updates / universe amd64 mongodb-server all 1: 3.6.3-0ubuntu1.1 [12,6 кБ]

Получить: 4 http://archive.ubuntu.com/ubuntu bionic-updates / universe amd64 mongodb amd64 1: 3.6.3-0ubuntu1.1 [9968 B]

Получено 53,7 МБ за 10 секунд (5485 кБ / с)

Выбор ранее невыбранного пакета libpcap0.8: amd64.

(Чтение базы данных … 4390 файлов и каталогов в настоящее время установлены.)

Выбор ранее не выбранного пакета mongodb-клиентов.

Подготовка к распаковке … / 13-mongodb-clients_1% 3a3.6.3-0ubuntu1.1_amd64.deb …

Распаковка mongodb-клиентов (1: 3.6.3-0ubuntu1.1) …

Выбор ранее невыбранного пакета mongodb-server-core.

Подготовка к распаковке … / 14-mongodb-server-core_1% 3a3.6.3-0ubuntu1.1_amd64.deb …

Распаковка mongodb-server-core (1: 3.6.3-0ubuntu1.1) …

Выбор ранее не выбранного пакета mongodb-server.

Подготовка к распаковке … / 15-mongodb-server_1% 3a3.6.3-0ubuntu1.1_all.deb …

Распаковка mongodb-сервера (1: 3.6.3-0ubuntu1.1) …

Выбор ранее не выбранного пакета mongodb.

Подготовка к распаковке … / 16-mongodb_1% 3a3.6.3-0ubuntu1.1_amd64.deb …

Распаковка mongodb (1: 3.6.3-0ubuntu1.1) …

Настройка mongodb-server-core (1: 3.6.3-0ubuntu1.1) …

Настройка инструментов mongo (3.6.3-0ubuntu1) …

Настройка mongodb-клиентов (1: 3.6.3-0ubuntu1.1) …

Настройка mongodb-сервера (1: 3.6.3-0ubuntu1.1) …

invoke-rc.d: не удалось определить текущий уровень выполнения

invoke-rc.d: policy-rc.d запретил выполнение запуска.

Настройка mongodb (1: 3.6.3-0ubuntu1.1) …

Обработка триггеров для libc-bin (2.27-3ubuntu1) …

Снятие промежуточного контейнера 88609c005e73

—> d9c072cb1f84

Шаг 7/10: ЗАПУСК mkdir -p / data / db

—> Работает в f817778f69ab

Снятие промежуточного контейнера f817778f69ab

—> a3fbdb3def5c

Шаг 8/10: ЭКСПОЗИЦИЯ 27017

—> Работает в 8d070e2a1e07

Снятие промежуточного контейнера 8d070e2a1e07

—> f770776a538c

Шаг 9/10: CMD ["–порт 27017"]

—> Работает в ab612410df77

Снятие промежуточного контейнера ab612410df77

—> e5830b80934f

Шаг 10/10: ENTRYPOINT usr / bin / mongod

—> Работает в 95f574727aab

Снятие промежуточного контейнера 95f574727aab

—> 095d17727ca0

Успешно построен 095d17727ca0

Успешно помечено geekflare_mongodb: последние

Давайте проверим, было ли создано изображение докера с именем geekflare_mongodb.

[Электронная почта защищена]: ~ $ docker images

РАЗМЕР ИД ИЗОБРАЖЕНИЯ В РЕГИСТРАЦИИ

geekflare_mongodb последняя 095d17727ca0 3 минут назад 325MB

Ubuntu последние 3556258649b2 4 дней назад 64.2MB

mean_express последнее 35dcb3df9806 6 дней назад 923MB

mean_angular последние 9f8d61db600c 6 дней назад 1.29GB

Запустите образ докера geekflare_mongodb внутри контейнера mongo_container.

[Электронная почта защищена]: ~ $ docker run –name mongo_container -i -t geekflare_mongodb

2019-07-27T19: 38: 23.734 + 0000 I CONTROL [initandlisten] Запуск MongoDB: pid = 6 порт = 27017 dbpath = / data / db 64-битный хост = b0095c1e5536

2019-07-27T19: 38: 23.735 + 0000 I CONTROL [initandlisten] db version v3.6.3

2019-07-27T19: 38: 23.735 + 0000 I CONTROL [initandlisten] git version: 9586e557d54ef70f9ca4b43c26892cd55257e1a5

2019-07-27T19: 38: 23.736 + 0000 I CONTROL [initandlisten] Версия OpenSSL: OpenSSL 1.1.1 11 сентября 2018 г.

2019-07-27T19: 38: 23.739 + 0000 I CONTROL [initandlisten] распределитель: tcmalloc

2019-07-27T19: 38: 23.739 + 0000 I CONTROL [initandlisten] модули: нет

2019-07-27T19: 38: 23.739 + 0000 I CONTROL [initandlisten] среда сборки:

2019-07-27T19: 38: 23.739 + 0000 I CONTROL [initandlisten] distarch: x86_64

2019-07-27T19: 38: 23.739 + 0000 I CONTROL [initandlisten] target_arch: x86_64

2019-07-27T19: 38: 23.739 + 0000 I CONTROL опции [initandlisten]: {}

2019-07-27T19: 38: 23.745 + 0000 I STORAGE [initandlisten] wiredtiger_open config: create, cache_size = 2038M, session_max = 20000, eviction = (threads_min = 4, threads_max = 4), config_base = false, статистика = (быстро) , журнал = (включено = верно, архив = истина, путь = журнал, компрессор = мгновенный), file_manager = (close_idle_time = 100000), statistics_log = (ожидание = 0), многословно = (recovery_progress),

2019-07-27T19: 38: 24.733 + 0000 I CONTROL [initandlisten]

2019-07-27T19: 38: 24.734 + 0000 I CONTROL [initandlisten] ** ВНИМАНИЕ: Контроль доступа не включен для базы данных.

2019-07-27T19: 38: 24.735 + 0000 I CONTROL [initandlisten] ** Доступ к данным и конфигурации для чтения и записи неограничен.

2019-07-27T19: 38: 24.736 + 0000 I CONTROL [initandlisten] ** ВНИМАНИЕ: Вы запускаете этот процесс как пользователь root, что не рекомендуется.

2019-07-27T19: 38: 24.736 + 0000 I CONTROL [initandlisten]

2019-07-27T19: 38: 24.736 + 0000 I CONTROL [initandlisten] ** ПРЕДУПРЕЖДЕНИЕ: этот сервер привязан к локальному хосту.

2019-07-27T19: 38: 24.737 + 0000 I CONTROL [initandlisten] ** Удаленные системы не смогут подключиться к этому серверу.

2019-07-27T19: 38: 24.737 + 0000 I CONTROL [initandlisten] ** Запустите сервер с –bind_ip, чтобы указать, какой IP

2019-07-27T19: 38: 24.737 + 0000 I CONTROL [initandlisten] ** адреса, с которых он должен обслуживать ответы, или с –bind_ip_all для

2019-07-27T19: 38: 24.737 + 0000 I CONTROL [initandlisten] ** привязка ко всем интерфейсам. Если это поведение желательно, запустите

2019-07-27T19: 38: 24.738 + 0000 I CONTROL [initandlisten] ** сервер с –bind_ip 127.0.0.1 для отключения этого предупреждения.

2019-07-27T19: 38: 24.738 + 0000 I CONTROL [initandlisten]

2019-07-27T19: 38: 24.739 + 0000 I ХРАНЕНИЕ [initandlisten] createCollection: admin.system.version с предоставленным UUID: 4b8b509d-633a-46c1-a302-cb8c82b0d5d3

2019-07-27T19: 38: 24.788 + 0000 I КОМАНДА [initandlisten] настройка свойства CompatibilityVersion to 3.6

2019-07-27T19: 38: 24.818 + 0000 I ХРАНЕНИЕ [initandlisten] createCollection: local.startup_log с сгенерированным UUID: 6c1c0366-4b1b-4b92-9fcd-d18acc126072

2019-07-27T19: 38: 24.862 + 0000 I FTDC [initandlisten] Инициализация сбора диагностических данных с полной занятостью с каталогом ‘/data/db/diagnostic.data’

2019-07-27T19: 38: 24.866 + 0000 I NETWORK [initandlisten] ожидает подключения через порт 27017

Откройте новый терминал и проверьте, работает ли mongo_container.

[Электронная почта защищена]: ~ $ docker ps

КОНТЕЙНЕР ID ИМИДЖ КОМАНДА СОЗДАННЫЕ СТАТУС ИМЕНА ПОРТОВ

b0095c1e5536 geekflare_mongodb   "/ bin / sh -c usr / bin /…"   35 секунд назад до 33 секунд 27017 / tcp mongo_container

Как видите, контейнер, созданный из образа geekflare_mongodb, запущен и работает.

Я надеюсь, что это даст вам представление о dockerfile и его преимуществах. Вы также можете проверить эту документацию на Лучшие практики Dockerfile Узнать больше.

TAGS:

  • докер

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map