July 27, 2021

Docker. Запускаем скрипт Bash внутри контейнера.

Мы создадим небольшое приложение на bash, обернем его в образ и запустим.

В первую очередь эта статья будет полезна тем, кто уже знаком с контейнерами или Docker.

Требования

Все что требуется от сервера, чтобы запустить Docker – более-менее современная ОС Linux с ядром не ниже 3.8.

Для того чтобы выполнить необходимые действия, вам понадобятся:

  • установленная ОС Centos 7 с пользователем, который может выполнять команды sudo, и фаерволом;

По умолчанию для выполнения команды docker необходимо иметь root-привилегии. Однако команду можно выполнять и без добавления sudo, если работать от имени пользователя, который находится в группе "docker".

В данном руководстве предполагается, что сервер настроен так, чтобы выполнять команду docker можно без использования sudo.

Для такой настройки вам нужно ввести:

$ sudo usermod -aG docker ${USER}

Текущий пользователь будет добавлен в группу "docker". Для того чтобы изменения вступили в силу, выполните команду:

$ su - ${USER}

Есть много способов гарантировать, что изменения вступят в силу, однако самый безопасный способ - перезагрузить компьютер. После перезагрузки вы должны теперь иметь возможность использовать докер со своим "обычным" пользователем (обратите внимание, что sudo не используется):

$ docker run hello-world

Шаг 1. Установка Docker

Для начала необходимо установить Docker Engine

Следующим этапом устанавливаем Docker Compose

Для того чтобы посмотреть версию Docker Engine и Tools, введите:

$ docker info && docker version

Если нужно удалить все пакеты Docker, которые, возможно, были установлены ранее:

$ apt-get remove docker docker-engine docker.io

А затем уже перейти к установке самого Docker.

Создадим структуру нашего проекта.

У меня есть каталог, содержащий только два файла, Dockerfile и sayhello.sh:

.
├── Dockerfile
└── sayhello.sh

sayhello.sh содержит просто вывод сообщения в терминал.

#!/bin/sh
echo "hello from $HOSTNAME"
Если вы используете ОС Alpine то можете сразу запустить контейнер
docker run -it --rm -v $(pwd):/src alpine /project/hello.sh

Dockerfile содержит организацию рабочего пространства внутри нашего контейнера.

# Для начала укажем базовый образ
# centos — это название официального репозитория Docker, 
# предоставляющего базовую версию популярной ОС семейства Linux
FROM centos:7
# Устанавливаем рабочую директорию для проекта в контейнере 
WORKDIR /project
# |ВАЖНЫЙ МОМЕНТ| копируем содержимое папки, где находится Dockerfile,  
# в рабочую директорию контейнера
COPY . /project
# команда для запуска приложения
# Главное предназначение CMD — это сообщить контейнеру какие команды 
# нужно выполнить при старте
CMD ["sayhello.sh"]

Теперь можно создать образ. Команда docker build занимается сложной задачей создания образа на основе Dockerfile

Перед тем, как запустите команду сами (не забудьте точку в конце)

Команда docker build довольно проста: она принимает опциональный тег с флагом -t и путь до директории, в которой лежит Dockerfile.

$ docker build \
--build-arg ARTIFACTORY_USERNAME=timothy.mugayi \
--build-arg ARTIFACTORY_SECRET_TOKEN=AP284233QnYX9Ckrdr7pUEY1F \
--build-arg LICENSE_URL='https://source.com/license.txt' \
--no-cache  -t helloworld:latest.

Это создаст образ Docker с опциональными аргументами сборки. Docker будет по умолчанию кэшировать результаты для первой сборки Dockerfile или последующих сборок, основанных на слоях, добавленных к образу через команду run в Dockerfile, что позволит этим сборкам работать быстрее. Если вам это не нужно, можете добавить аргумент “no-cache”, как это сделано в примере выше.

Заметка: команды Docker могут быть выполнены по имени или по ID контейнера. <CONTAINER> допускает подстановку либо ID контейнера, либо его имени.

Dockerfile успешно построен:

kurtpeek@Sophiemaries-MacBook-Pro ~/d/s/trybash> docker build --tag trybash .
Sending build context to Docker daemon 3.072 kB
Step 1/3 : FROM alpine
 ---> 665ffb03bfae
Step 2/3 : COPY sayhello.sh sayhello.sh
 ---> Using cache
 ---> fe41f2497715
Step 3/3 : CMD sayhello.sh
 ---> Using cache
 ---> dfcc26c78541
Successfully built dfcc26c78541

Если все прошло хорошо, то образ готов! Запустите docker images и увидите свой образ в списке.

Последний шаг — запустить образ и проверить его работоспособность (замените username на свой):

$ docker run

Поздравляю! Вы успешно создали свой первый образ Докера!

link: https://devopscube.com/run-scripts-docker-arguments/