Поиск по сайту:

Как создать собственный образ Docker с помощью Dockerfile

Объяснение Dockerfile на примере

В этом руководстве мы кратко расскажем о Dockerfile и о том, как использовать Dockerfile для автоматизации процесса создания пользовательских образов Docker в Linux.

Что такое Dockerfile?

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

Мы можем использовать файл docker для создания собственных изображений. Затем мы можем поделиться этими пользовательскими изображениями Docker через Docker Hub.

Для тех, кому интересно: Docker Hub — это служба размещенного репозитория, предоставляемая Docker для поиска и обмена образами контейнеров с вашей командой и, конечно же, с кем угодно в мире.

Представьте себе этот сценарий. Ранее, если мы хотим использовать Nginx, нам нужно установить и настроить Nginx, выполнив множество действий. Благодаря Dockerhub теперь мы можем загрузить и запустить готовый образ контейнера Nginx за пару минут.

Образ Nginx Docker в Dockerhub

Чтобы получить образ Nginx из DockerHub, выполните:

docker pull nginx

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

docker run -it -d -p 8080:8080 nginx

Это так просто!

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

  • Начало работы с Docker

В Dockerhub доступно более 100 000 образов контейнеров от поставщиков программного обеспечения, проектов с открытым исходным кодом и сообщества.

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

Понимание формата Dockerfile

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

Типичный Dockerfile содержит следующие инструкции:

1. FROM — устанавливает базовый образ контейнера.

Пример:

FROM ubuntu:22.04

Он установит базовый образ контейнера как Ubuntu. Если тег 22.04 не указан, тег будет считаться «последним».

2. LABEL – это пара ключ-значение, используемая для указания метаданных изображения.

Пример:

LABEL ENV=”DEVELOPMENT”

3. RUN — используется для выполнения команды на базовом изображении и создания нового слоя.

Пример:

RUN apt-get update
RUN apt-get install tomcat

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

Пример:

CMD [“java”, “-jar”, “app.jar”]

5. EXPOSE — открывает порт для доступа к контейнеру. Контейнер будет прослушивать этот сетевой порт. Мы можем получить доступ к выводу, используя этот порт.

Пример:

EXPOSE 8080

6. MAINTAINER — содержит сведения об авторе, создавшем этот образ Docker.

Пример:

MAINTAINER info@ostechnix.com

7. ENV — используется для установки переменных среды в паре ключ-значение. Эти переменные задаются во время сборки образа и доступны после создания контейнера.

Пример:

ENV DB_NAME=”MySQL”
ENV DB_VERSION=”8.0”

8. КОПИЯ — используется для копирования локальных файлов в контейнер.

Пример:

COPY /target/devops.jar devops.jar

9. ADD — он работает так же, как копирование, но имеет некоторые дополнительные функции, например, мы можем извлекать локальный tar и добавлять удаленный URL-адрес.

Пример:

ADD devops.tar.xz / .
ADD http://example.com/abc.git /usr/local/devops/

10. ENTRYPOINT — используется для установки основной команды для изображения. Он работает так же, как инструкция CMD. Единственная разница между CMD и ENTRYPOINT заключается в том, что инструкции в ENTRYPOINT не перезаписываются.

Пример:

ENTRYPOINT [“java”, “-jar”, “app.jar”]

11. VOLUME — создаст точку монтирования с указанным именем.

Пример:

VOLUME /app/devops

12. ПОЛЬЗОВАТЕЛЬ — устанавливает имя пользователя и группу пользователей, которые будут использоваться при запуске образа.

Пример:

USER dhruv
USER admin

13. WORKDIR — устанавливает рабочий каталог. Он создаст каталог, если его нет.

Пример:

WORKDIR /var/lib/

Вот образец Dockerfile для вашей справки.

FROM ubuntu:latest
MAINTAINER Senthilkumar Palani "info@ostechnix.com"
RUN apt-get install -y software-properties-common python
RUN add-apt-repository ppa:chris-lea/node.js
RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ jammy universe" >>
/etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nodejs
RUN mkdir /var/www
ADD app.js /var/www/app.js
CMD ["/usr/bin/node", "/var/www/app.js"]

Позвольте мне показать вам простой пример создания образца Dockerfile и создания образа с его использованием.

Создание Docker-файла

Создайте файл с именем Dockerfile:

nano dockerfile

Добавьте следующие строки. В этом примере мы обновляем и устанавливаем пакеты vim и curl.

FROM alpine

RUN apk update
RUN apk add vim
RUN apk add curl

Dockerfile для Alpine Linux

Нажмите CTRL+O и CTRL+X, чтобы сохранить файл и закрыть его.

Теперь у нас есть Dockerfile. Давайте продолжим и создадим образ, используя Dockerfile.

Внимание! Если вы используете Docker Desktop, вы можете запускать команды Docker как обычный пользователь.

Сборка образа Docker с использованием Dockerfile

Чтобы создать образ из Dockerfile, просто запустите:

docker build -t alpine .

Обратите внимание на точку (.) в конце.

Пример вывода:

[+] Building 51.2s (8/8) FINISHED                                               
 => [internal] load build definition from Dockerfile                       0.1s
 => => transferring dockerfile: 104B                                       0.0s
 => [internal] load .dockerignore                                          0.1s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for docker.io/library/alpine:latest          38.8s
 => [1/4] FROM docker.io/library/alpine@sha256:7580ece7963bfa863801466c0a  2.7s
 => => resolve docker.io/library/alpine@sha256:7580ece7963bfa863801466c0a  0.0s
 => => sha256:d7d3d98c851ff3a95dbcb70ce09d186c9aaf7e25d48 1.47kB / 1.47kB  0.0s
 => => sha256:530afca65e2ea04227630ae746e0c85b2bd1a179379 2.80MB / 2.80MB  2.4s
 => => sha256:7580ece7963bfa863801466c0a488f11c86f85d9988 1.64kB / 1.64kB  0.0s
 => => sha256:9b2a28eb47540823042a2ba401386845089bb7b62a9637d 528B / 528B  0.0s
 => => extracting sha256:530afca65e2ea04227630ae746e0c85b2bd1a179379cbf2b  0.2s
 => [2/4] RUN apk update                                                   4.3s
 => [3/4] RUN apk add vim                                                  3.5s
 => [4/4] RUN apk add curl                                                 1.3s 
 => exporting to image                                                     0.4s 
 => => exporting layers                                                    0.4s 
 => => writing image sha256:14231deceb6e8e6105d2e551799ff174c184e8d9be8af  0.0s 
 => => naming to docker.io/library/alpine                                  0.0s 
                                                                                
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

В соответствии с приведенной выше командой Docker начнет автоматически создавать образы, читая инструкции из Dockerfile, сохраненного в текущем рабочем каталоге. Помните, мы определили команды apk update, apk add vim и apk add Curl в файле docker? Эти действия также будут выполнены автоматически.

Если файл Dockerfile сохранен где-то еще, вы можете указать его путь, используя флаг -f, как показано ниже.

docker build -f /path/to/a/Dockerfile .

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

docker run -it alpine

Эта команда запустит контейнер Alpine и подключится к нему.

/ # uname -a
Linux 8890fec82de8 5.10.104-linuxkit #1 SMP Thu Mar 17 17:08:06 UTC 2022 x86_64 Linux
/ # cat /etc/alpine-release 
3.16.1
/ # 

Если у вас есть Docker Desktop, вы можете просмотреть работающий контейнер на вкладке «Контейнеры».

Просмотр контейнеров в Docker Desktop

Вот как можно создать собственные образы контейнеров с помощью Dockerfile.

Мы рассмотрели только основы. С Dockerfile вы можете сделать гораздо больше. Я рекомендую вам обратиться к официальному справочному руководству по Dockerfile, чтобы узнать об этом больше.

Связанное чтение:

  • Объяснение концепций сети Docker
  • Объяснение томов Docker на примерах
  • Начало работы с Docker Compose в Linux
  • Как автоматически обновлять работающие контейнеры Docker
  • ctop — инструмент мониторинга командной строки для контейнеров Linux
  • Portainer – самый простой способ управления Docker
  • PiCluster — простое веб-приложение для управления Docker
  • Dockly – управление контейнерами Docker из терминала

Статьи по данной тематике