Какво е Dockerfile и как да създадете Docker изображение?

Докато работите върху докер проекти, през повечето време съществуващите докер изображения няма да отговарят на вашите изисквания.


Тук в картината влиза Dockerfile; тя ще ви помогне да създадете персонализирани изображения на Докер. Следователно знанието за Dockerfile е от съществено значение.

Какво е Dockerfile?

Това е прост текстов файл с набор от команди или инструкции. Тези команди / инструкции се изпълняват последователно за извършване на действия върху основното изображение за създаване на ново изображение на докер.

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

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

#Line блокове, използвани за коментиране

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

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

#Line блокове, използвани за коментиране

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

По-долу е как ще изглежда работният ви процес.

  • Създайте Dockerfile и споменете инструкциите за създаване на вашето изображение на докер
  • Изпълнете команда за изграждане на docker, която ще изгради изображение на докер
  • Сега изображението на докер е готово да се използва, използвайте команда за изпълнение на докер за създаване на контейнери

dockerfile работен процес

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

ОТ – Дефинира базовото изображение, което да се използва и стартира процеса на изграждане.

RUN – Необходима е командата и нейните аргументи, за да я стартирате от изображението.

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 daemon 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 kB]

Вземете: 2 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]

Получени 16,9 MB за 38 секунди (445 kB / s)

Четене на списъци с пакети…

Четене на списъци с пакети…

Изграждане на дърво на зависимостта…

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

Трябва да получите 5187 kB архиви.

След тази операция ще бъдат използвани 15,8 MB допълнително дисково пространство.

Вземете: 1 http://archive.ubuntu.com/ubuntu bionic / main amd64 readline-общ всички 7.0-3 [52.9 kB]

Вземете: 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-utils не е инсталиран

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

Избиране на неизбран по-рано четене на линията на пакета.

(Четене на база данни … 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-key не трябва да се анализира (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

Хит: 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

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-minimal4

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

mongodb-сървър mongodb-server-core

0 надстроени, 17 ново инсталирани, 0 за премахване и 0 не надстроени.

Трябва да получите 53,7 MB архиви.

След тази операция ще бъдат използвани 218 MB допълнително дисково пространство.

Вземете: 1 http://archive.ubuntu.com/ubuntu bionic-updates / univerza amd64 mongodb-clients amd64 1: 3.6.3-0ubuntu1.1 [20.2 MB]

Вземете: 2 http://archive.ubuntu.com/ubuntu bionic-updates / univer amd64 mongodb-core-core amd64 1: 3.6.3-0ubuntu1.1 [20.3 MB]

Вземете: 3 http://archive.ubuntu.com/ubuntu bionic-updates / univer amd64 mongodb-сървър всички 1: 3.6.3-0ubuntu1.1 [12.6 kB]

Вземете: 4 http://archive.ubuntu.com/ubuntu bionic-updates / universal amd64 mongodb amd64 1: 3.6.3-0ubuntu1.1 [9968 B]

Извлечени 53,7 MB за 10 секунди (5485 kB / s)

Избиране на неизбран преди това пакет 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 (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-server (1: 3.6.3-0ubuntu1.1) …

Настройка на монго-инструменти (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: ENTRYPOINT usr / bin / mongod

—> Работи в 95f574727aab

Премахване на междинен контейнер 95f574727aab

—> 095d17727ca0

Успешно изграден 095d17727ca0

Geekflare_mongodb: най-новите

Нека да проверим дали изображението на docker е създадено с името geekflare_mongodb.

[Имейл защитен]: ~ $ docker изображения

РЕПОЗИТОРИЧЕН ИДИЖ НА ИЗОБРАЖЕНИЕ ИЗГРАЖДЕН РАЗМЕР

geekflare_mongodb най-новите 095d17727ca0 преди 3 минути 325MB

ubuntu най-новите 3556258649b2 преди 4 дни 64.2MB

mean_express най-новите 35dcb3df9806 преди 6 дни 923MB

средно_ъгълно най-късно 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 start: pid = 6 port = 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] build building:

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] options: {}

2019-07-27T19: 38: 23.745 + 0000 I СЪХРАНЕНИЕ [initandlisten] wiredtiger_open config: create, cache_size = 2038M, session_max = 20000, eviction = (thread_min = 4, thread_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] ** ВНИМАНИЕ: Този сървър е свързан с localhost.

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 КОНТРОЛ [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] функция за настройка СъвместимостВерсия до 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 I МРЕЖА [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