Що таке докерфайл та як створити зображення Docker?

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


Ось тут Dockerfile входить у картину; це допоможе вам створити власні зображення Docker. Отже, знання про Dockerfile є важливим.

Що таке Dockerfile?

Це простий текстовий файл із набором команд чи інструкцій. Ці команди / інструкції виконуються послідовно для виконання дій над базовим зображенням для створення нового зображення докера.

коментарі та команди + аргументи – це два види основних рядків у синтаксисі Dockerfile

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

# Блокові блоки, що використовуються для коментування

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

Приклад команд + аргументів

# Блокові блоки, що використовуються для коментування

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

Нижче – як виглядатиме ваш робочий процес.

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

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

Основні команди

ВІД – Визначає базове зображення для використання та запуску процесу збирання.

РУН – Для запуску із зображення потрібна команда та її аргументи.

CMD – Аналогічна функція, як команда RUN, але вона виконується лише після екземпляра контейнера.

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

ДОДАТИ – Він копіює файли від джерела до місця призначення (всередині контейнера).

ENV – Встановлює змінні середовища.

Як створити зображення Docker за допомогою Dockerfile?

По-перше, давайте створимо Dockerfile.

[захищено електронною поштою]: ~ $ gedit Dockerfile

Покладіть до цього команди / інструкції нижче та збережіть їх.

# Встановити базове зображення на Ubuntu
ВІД ubuntu

# Оновіть список джерел сховища та встановіть gnupg2
RUN apt-get update && apt-get install -y gnupg2

# Додати ключ для підтвердження пакету
RUN 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"]

# Встановити команду контейнера за замовчуванням
ВХОДИТИ usr / bin / mongodb

У цьому Dockerfile ubuntu встановлюється як базове зображення. Потім необхідні команди та аргументи згадуються для встановлення MongoDB. Порт 27017 піддається MongoDB з командою контейнера за замовчуванням як usr / bin / mongodb

Далі я запускаю його, щоб створити зображення докера.

Запуск Dockerfile

Наступна команда створить зображення докера під назвою geekflare_mongodb після успішного виконання.

[захищено електронною поштою]: ~ $ docker build -t geekflare_mongodb .

Контекст надсилання на демона Docker 667.2MB

Крок 1/9: ВІД ubuntu

останнє: витягнення з бібліотеки / ubuntu

7413c47ba209: Витягніть у комплекті

0fe7e7cbb2e8: Витягніть завершено

1d425c982345: Витягніть у комплекті

344da5c95cec: Витягніть у комплекті

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

Статус: Завантажено нове зображення для ubuntu: найновіше

—> 3556258649b2

Крок 2/10: RUN 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-загальний всі 7.0-3 [52,9 кБ]

Отримайте: 2 http://archive.ubuntu.com/ubuntu bionic / main amd64 libreadline7 amd64 7.0-3 [124 kB]

Отримайте: 3 http://archive.ubuntu.com/ubuntu bionic-updates / main amd64 libsqlite3-0 amd64 3.22.0-1ubuntu0.1 [497 kB]

Отримайте: 4 http://archive.ubuntu.com/ubuntu bionic-updates / main amd64 libssl1.1 amd64 1.1.1-1ubuntu2.1 ~ 18.04.4 [1300 kB]

debconf: затримка конфігурації пакета, оскільки apt-утиліти не встановлені

Зібрано 5187 кБ за 12 секунд (416 кБ / с)

Вибір раніше невибраного раніше пакета для читання.

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

Підготовка до розпакування … / 00-readline-common_7.0-3_all.deb …

Розпакування загальної лінії перегляду (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: RUN apt-key adv –keyserver hkp: //keyserver.ubuntu.com: 80 –recv 7F0CEB10

—> Працює в 69c4dba38983

Попередження: висновок apt-ключа не повинен бути розібраний (stdout не є терміналом)

Виконання: /tmp/apt-key-gpghome.MuT5BDWwKZ/gpg.1.sh –keyserver hkp: //keyserver.ubuntu.com: 80 –recv 7F0CEB10

gpg: ключ 5F8F93707F0CEB10: відкритий ключ "Повністю підписаний легітимічний ключ <[захищено електронною поштою]>" імпорт

gpg: ключ 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: RUN apt-get update

—> Працює в 750717d9c0ea

Hit: 1 http://archive.ubuntu.com/ubuntu bionic InRelease

Hit: 2 http://archive.ubuntu.com/ubuntu bionic-updates InRelease

Hit: 3 http://security.ubuntu.com/ubuntu bionic-security InRelease

Hit: 4 http://archive.ubuntu.com/ubuntu bionic-backports InRelease

Читання списків пакетів…

Видалення проміжного контейнера 750717d9c0ea

—> 397d6501db58

Крок 6/10: RUN apt-get install -y mongodb

—> Запуск у 88609c005e73

Читання списків пакетів…

Побудова дерева залежності…

Читання інформації про стан…

Будуть встановлені наступні НОВІ пакети:

libboost-fileystem1.65.1 libboost-iostreams1.65.1

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

libpcap0.8 libpcrecpp0v5 libsnappy1v5 libstemmer0d libtcmalloc-мінімальний4

libunwind8 libyaml-cpp0.5v5 mongo-tools mongodb mongodb-клієнти

mongodb-сервер mongodb-сервер-ядро

0 оновлених, 17 нещодавно встановлених, 0 для видалення та 0 не оновлених.

Потрібно отримати 53,7 МБ архівів.

Після цієї операції буде використано 218 Мб додаткового дискового простору.

Отримайте: 1 http://archive.ubuntu.com/ubuntu bionic-updates / universal amd64 mongodb-clients amd64 1: 3.6.3-0ubuntu1.1 [20.2 MB]

Отримайте: 2 http://archive.ubuntu.com/ubuntu bionic-updates / Всесвітній amd64 mongodb-сервер-ядро amd64 1: 3.6.3-0ubuntu1.1 [20.3 MB]

Отримайте: 3 http://archive.ubuntu.com/ubuntu bionic-updates / univer amd64 mongodb-сервер all 1: 3.6.3-0ubuntu1.1 [12.6 kB]

Отримайте: 4 http://archive.ubuntu.com/ubuntu bionic-updates / university 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-сервер-ядро.

Підготовка до розпакування … / 14-mongodb-server-core_1% 3a3.6.3-0ubuntu1.1_amd64.deb …

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

Вибір раніше невибраного пакету mongodb-сервер.

Підготовка до розпакування … / 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-сервера (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: RUN mkdir -p / data / db

—> Працює в f817778f69ab

Видалення проміжного контейнера f817778f69ab

—> a3fbdb3def5c

Крок 8/10: ВИДАЛЕННЯ 27017

—> Працює в 8d070e2a1e07

Видалення проміжного контейнера 8d070e2a1e07

—> f770776a538c

Крок 9/10: CMD ["–порт 27017"]

—> Працює в ab612410df77

Видалення проміжного контейнера ab612410df77

—> e5830b80934f

Крок 10/10: Введіть usr / bin / mongod

—> Працює в 95f574727aab

Видалення проміжного контейнера 95f574727aab

—> 095d17727ca0

Успішно побудований 095d17727ca0

Geekflare_mongodb: останні

Перевіримо, чи створено зображення докера з іменем geekflare_mongodb.

[захищено електронною поштою]: ~ $ docker зображення

РЕЗОЗИТОРІЯ МАТЕРІАЛУ ІЗОБРАНОГО СТВОРЕНОГО РОЗМІРУ

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 – ім’я mongo_container -i -t geekflare_mongodb

2019-07-27T19: 38: 23.734 + 0000 Я КОНТРОЛЬ [initandlisten] Запуск MongoDB: pid = 6 порт = 27017 dbpath = / data / db 64-розрядний хост = b0095c1e5536

2019-07-27T19: 38: 23.735 + 0000 Я КОНТРОЛЬ [initandlisten] db версія v3.6.3

2019-07-27T19: 38: 23.735 + 0000 Я КОНТРОЛЬ [initandlisten] git версія: 9586e557d54ef70f9ca4b43c26892cd55257e1a5

2019-07-27T19: 38: 23.736 + 0000 Я КОНТРОЛЬ [initandlisten] Версія OpenSSL: OpenSSL 1.1.1 11 вересня 2018

2019-07-27T19: 38: 23.739 + 0000 Я КОНТРОЛЬ [initandlisten] розподільник: tcmalloc

2019-07-27T19: 38: 23.739 + 0000 Я КОНТРОЛЬ [initandlisten] модулі: немає

2019-07-27T19: 38: 23.739 + 0000 Я КОНТРОЛЬ [initandlisten] середовище побудови:

2019-07-27T19: 38: 23.739 + 0000 Я КОНТРОЛЬ [initandlisten] distarch: x86_64

2019-07-27T19: 38: 23.739 + 0000 Я КОНТРОЛЬ [initandlisten] target_arch: x86_64

2019-07-27T19: 38: 23.739 + 0000 Я КОНТРОЛЮВАТИ [initandlisten] варіанти: {}

2019-07-27T19: 38: 23.745 + 0000 Я ЗБЕРІГАЮТЬ [initandlisten] wiredtiger_open config: create, cache_size = 2038M, session_max = 20000, eviction = (thread_min = 4, thread_max = 4), config_base = false, статистика = (швидкий) , log = (увімкнено = true, архів = true, шлях = журнал, компресор = snappy), file_manager = (close_idle_time = 100000), statistics_log = (зачекати = 0), verbose = (recovery_progress),

2019-07-27T19: 38: 24.733 + 0000 Я КОНТРОЛЬ [initandlisten]

2019-07-27T19: 38: 24.734 + 0000 Я КОНТРОЛЬ [initandlisten] ** ПОПЕРЕДЖЕННЯ: Контроль доступу для бази даних не ввімкнено.

2019-07-27T19: 38: 24.735 + 0000 Я КОНТРОЛЬ [initandlisten] ** Прочитати та записати доступ до даних та конфігурація не обмежена.

2019-07-27T19: 38: 24.736 + 0000 Я КОНТРОЛЬ [initandlisten] ** ПОПЕРЕДЖЕННЯ: Ви запускаєте цей процес як користувач root, що не рекомендується.

2019-07-27T19: 38: 24.736 + 0000 Я КОНТРОЛЬ [initandlisten]

2019-07-27T19: 38: 24.736 + 0000 Я КОНТРОЛЬ [initandlisten] ** ПОПЕРЕДЖЕННЯ: Цей сервер прив’язаний до localhost.

2019-07-27T19: 38: 24.737 + 0000 Я КОНТРОЛЬ [initandlisten] ** Віддалені системи не зможуть підключитися до цього сервера.

2019-07-27T19: 38: 24.737 + 0000 Я КОНТРОЛЬ [initandlisten] ** Запустіть сервер –bind_ip, щоб вказати, який IP

2019-07-27T19: 38: 24.737 + 0000 Я КОНТРОЛЬ [initandlisten] ** адреси, на які він повинен відповідати з або з –bind_ip_all для

2019-07-27T19: 38: 24.737 + 0000 Я КОНТРОЛЬ [initandlisten] ** прив’язуйте до всіх інтерфейсів. Якщо така поведінка бажана, почніть

2019-07-27T19: 38: 24.738 + 0000 Я КОНТРОЛУ [initandlisten] ** сервер з –bind_ip 127.0.0.1, щоб відключити це попередження.

2019-07-27T19: 38: 24.738 + 0000 Я КОНТРОЛЬ [initandlisten]

2019-07-27T19: 38: 24.739 + 0000 Я ЗБЕРІГАЮТЬ [initandlisten] createCollection: admin.system.version з наданим UUID: 4b8b509d-633a-46c1-a302-cb8c82b0d5d3

2019-07-27T19: 38: 24.788 + 0000 Я КОМАНДАЮ [функцію встановлення] сумісністьВерсія до 3,6

2019-07-27T19: 38: 24.818 + 0000 Я ЗБЕРІГАЮТЬ [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 Я МЕРЕЖА [initandlisten] чекаю на з’єднання на порту 27017

Відкрийте новий термінал і перевірте, чи працює mongo_container.

[захищено електронною поштою]: ~ $ docker ps

ІМЕНТ ІНФОРМАЦІЇ КОНТАЙНЕРУ КОМАНДА СТВОРЕННЯ ІМЕНІВ ПОРТУ СТАТУСУ

b0095c1e5536 geekflare_mongodb   "/ bin / sh -c usr / bin /…"   35 секунд тому Вгору 33 секунди 27017 / tcp mongo_container

Як бачите, контейнер, створений із зображення geekflare_mongodb, працює та працює.

Сподіваюсь, це дає вам уявлення про dockerfile та його переваги. Ви також можете перевірити цю документацію на Передовий досвід Dockerfile щоб дізнатися більше.

МЕТИ:

  • Докер

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