Как создать собственный образ 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 из терминала