Docker. Запускаем скрипт Bash внутри контейнера.
Мы создадим небольшое приложение на bash, обернем его в образ и запустим.
В первую очередь эта статья будет полезна тем, кто уже знаком с контейнерами или Docker.
Требования
Все что требуется от сервера, чтобы запустить Docker – более-менее современная ОС Linux с ядром не ниже 3.8.
Для того чтобы выполнить необходимые действия, вам понадобятся:
По умолчанию для выполнения команды 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 контейнера, либо его имени.
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