Contents
- 1 Docker и Docker-Compose — Tutorial и подборка видео по темам
- 1.1 Что такое Docker и зачем он нужен?
- 1.2 Что такое docker image (образ)
- 1.3 Что такое docker container (контейнер)
- 1.4 Управление контейнерами. Схема Lifecycle of Docker Container
- 1.5 Что такое Docker Hub?
- 1.6 Как создать свой образ? Что такое Dockerfile?
- 1.7 Что такое Docker Volume?
- 1.8 Как взаимодействовать с контейнером?
- 1.9 Docker Networking
- 1.10 Что такое Docker Compose?
- 1.11 docker-compose.xml
- 1.12 Дополнительные подборки видео по Docker
- 2 Примеры создания приложений с помощью Docker или Docker-Compose
- 3 Краткий экскурс в Linux
- 4 Установка Докера на Linux. Install Docker on Ubuntu 20.04
- 5 Portainer — что это такое?
- 6 GitHub Actions — CI/CD Pipeline with Docker
- 7 Использованные источники для подготовки статьи и другие полезные статьи
Docker и Docker-Compose — Tutorial и подборка видео по темам
Что такое Docker и зачем он нужен?
Официальный сайт docker.com.
Docker — это платформа для разработки, развертывания и запуска приложений внутри контейнеров.
Docker – это технология с открытым исходным кодом, которая решает проблемы развертывания и масштабирования путем отделения приложений от зависимостей инфраструктуры. Она решает эти проблемы благодаря применению контейнеров, позволяющих упаковать приложение со всеми его зависимостями, включая структуру каталогов, метаданные, пространство процессов, номера сетевых портов и т. д. Приложение, упакованное в контейнер, запускается одинаково на любых машинах и в любых окружениях. Именно эта особенность сделала технологию Docker особенно интересной и обеспечила ей стремительный взлет.
И еще одно определение докера:
Docker — это инструмент с открытым исходным кодом, который позволяет вам включать и хранить ваш код и его зависимости в удобном пакете, который называется образом. Затем этот образ можно использовать для создания экземпляра вашего приложения (сервиса) — контейнера. Основное различие между контейнерами и виртуальными машинами заключается в том, что контейнеры охватывают только уровень приложения и полагаются на базовое ядро операционной системы, в случае виртуальной машины создается новый экземпляр операционной системы.
Видео — Что такое Docker за 200 секунд
Сущности Docker: docker daemon, container, image, Dockerfile, Docker Registry
В Docker используется архитектура клиент/сервер, в соответствии с которой клиент взаимодействует с демоном Docker, а тот предоставляет все необходимые клиенту услуги.
Рассмотрим компоненты рабочего процесса и инструменты для управления контейнерами и их развертывания, составляющие экосистему Docker:
- Daemon Docker (Сервер): Выполняется в хост-системе и управляет всеми запущенными контейнерами. Docker Daemon — это сервер Docker, который прослушивает запросы Docker API. Docker Daemon управляет образами, контейнерами, сетями и томами.
- Docker Container (Контейнер): Автономная виртуальная система, содержащая выполняющийся процесс, все файлы, зависимости, адресное пространство процесса и сетевые порты, необходимые приложению. Так как каждый контейнер имеет свое пространство портов, следует организовать их отображение в фактические порты на уровне Docker;
- Docker Client (Клиент): Пользовательский интерфейс, или интерфейс командной строки, для взаимодействий с демоном Docker. Клиент Docker — это основной способ взаимодействия с Docker. Когда вы используете интерфейс командной строки (CLI) Docker, вы вводите в терминал команду, которая начинается с
docker
. Затем клиент Docker использует API Docker для отправки команды демону Docker. - Docker Image (Образ): это шаблон только для чтения, который содержит набор инструкций по созданию контейнера, который может работать на платформе Docker. Он предоставляет удобный способ упаковать приложения и предварительно настроенные серверные среды, которые вы можете использовать для личного использования или публично публиковать с другими пользователями Docker. Также можно воспользоваться командой docker diff, чтобы увидеть различия между двумя образами. Каждый образ состоит из нескольких уровней, или слоев, которые могут совместно использоваться несколькими образами.
- Реестр Docker: Репозиторий для хранения и распространения образов контейнеров Docker. Пример известного реестра — Docker Hub, куда можно помещать и откуда можно извлекать образы.
- Dockerfile: Это очень простой текстовый файл, содержащий команды, которые выполняют сборку образов Docker. Посредством этих команд можно устанавливать дополнительные программные компоненты, настраивать переменные окружения, рабочие каталоги и точку входа ENTRYPOINT, а также добавлять новый код;
- Docker Swarm: По сути своей, это готовый к использованию механизм кластеризации, позволяющий объединить несколько узлов Docker в один большой хост Docker.
- Docker Compose: Приложения часто состоят из множества компонентов, и соответственно они будут выполняться в нескольких контейнерах. В состав Docker входит инструмент Compose, с помощью которого можно легко запустить приложение в нескольких контейнерах. Вы можете определить окружение для приложения в общем файле Dockerfile и определить перечень служб в файле docker-compose.yml, после чего Docker автоматически будет создавать и запускать необходимые контейнеры, как определено в этих файлах.
Что такое docker image (образ)
Образ Docker — это шаблон только для чтения, который содержит набор инструкций по созданию контейнера, который может работать на платформе Docker. Образ — это главный шаблон, который используется для запуска одинаковых контейнеров. Если выразиться кратко, то docker image — это переносимый формат для одного контейнера.
Образ Docker состоит из набора файлов, которые объединяют воедино все необходимое, например installations, application code, и dependencies, необходимые для настройки полностью работоспособной среды контейнера. Вы можете создать образ Docker одним из двух способов:
- Интерактивный: запустив контейнер из существующего образа Docker, вручную изменив среду контейнера с помощью серии активных шагов и сохранив полученное состояние как новый образ.
- Dockerfile: путем создания текстового файла, известного как Dockerfile, который предоставляет спецификации для создания образа Docker.
Dockerfile — это файл с инструкциями о том, как Docker должны строить свой image.
С физической точки зрения docker image состоит из набора слоев, доступных только для чтения (read-only layers). Слои image работают следующим образом:
- Каждый слой image является результатом одной команды в файле Dockerfile. Образ докера представляет собой сжатый (tar) файл, содержащий серию слоев.
- Каждый дополнительный слой image включает только набор отличий от предыдущего слоя (попробуйте запустить для docker image команду docker history, которая выведет все его слои и те команды, которые их создало).
Пример Dockerfile:
1 2 3 4 5 6 7 8 9 |
FROM node:13.12.0-alpine WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY . . |
Что такое docker container (контейнер)
Docker Container — это исполняемый экземпляр образа. Образ Docker плюс команда docker run image_name
создает и запускает контейнер из образа.
Контейнеры предлагают виртуальную среду, в которую упаковываются процесс приложения, метаданные и файловая система, т.е. все, что необходимо приложению для работы. В отличие от виртуальных машин, контейнеры не требуют собственной операционной системы — это всего лишь обертки вокруг процессов UNIX, которые непосредственно взаимодействуют с ядром.
Контейнеры обеспечивают полную изоляцию приложений и процессов, когда одно приложение ничего не знает о существовании других приложений. Но все процессы используют одно и то же ядро операционной системы.
Управление контейнерами. Схема Lifecycle of Docker Container
Образ Docker — это статическая модель, содержащая предустановленное приложение. При запуске этого образа создается контейнер . Образ можно использовать для запуска любого количества контейнеров. На следующей диаграмме показан жизненный цикл контейнера Docker и связанных команд.
Пример схемы docker container lifecycle 1:
Пример схемы docker container lifecycle 2:
Create container
Создайте контейнер, чтобы в дальнейшем запустить его с нужным образом.
docker create --name <container-name> <image-name>
Run docker container
Запустите контейнер докера с требуемым образом и указанной командой / процессом. Флаг -d используется для запуска контейнера в фоновом режиме.
docker run -it -d --name <container-name> <image-name> bash
Pause container
Используется для приостановки процессов, запущенных внутри контейнера.
docker pause <container-id/name>
Unpause container
Используется для возобновления процессов внутри контейнера.
docker unpause <container-id/name>
Start container
Запустите контейнер, если он находится в остановленном состоянии.
docker start <container-id/name>
Stop container
Остановить контейнер и процессы, запущенные внутри контейнера:
docker stop <container-id/name>
Чтобы остановить все запущенные контейнеры докеров
docker stop $(docker ps -a -q)
Restart container
Используется для перезапуска контейнера, а также процессов, работающих внутри контейнера.
docker restart <container-id/name>
Kill container
Мы можем убить работающий контейнер.
docker kill <container-id/name>
Destroy container
Лучше уничтожать контейнер, только если он находится в остановленном состоянии, вместо того, чтобы принудительно уничтожать работающий контейнер.
docker rm <container-id/name>
Чтобы удалить все остановленные контейнеры докеров
docker rm $ (docker ps -q -f status = exited)
Что такое Docker Hub?
Docker Hub — это облачная служба реестра, которая позволяет загружать образы Docker, созданные другими сообществами. Вы также можете загрузить свои собственные образы, созданные Docker, в Docker Hub.
Как создать свой образ? Что такое Dockerfile?
Что такое Dockerfile?
- Dockerfile — это текстовый файл конфигурации, написанный с использованием специального синтаксиса.
- В нем описываются пошаговые инструкции по всем командам, которые необходимо выполнить для сборки образа Docker.
- Команда
docker build
обрабатывает этот файл, создавая образ Docker в вашем локальном кэше образов, который затем можно запустить с помощьюdocker run
команды или отправить в постоянный репозиторий образов (push).
Как создать Dockerfile?
Dockerfile создается в любом текстовом редакторе. Далее пишутся инструкции.
Пример dockerfile
Пример dockerfile для NGINX:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# Каждая инструкция в этом файле генерирует новый слой, который помещается в ваш локальный кеш docker image # Строки, которым предшествует #, считаются комментариями и игнорируются # В строке ниже указано, что мы будем основывать наш новый образ на последней официальной версии Ubuntu FROM ubuntu: latest # Указываем, кто поддерживает docker image (автор) LABEL Maintainer = "myname@somecompany.com" # Обновляем образ до последних пакетов RUN apt-get update && apt-get upgrade -y # Устанавливаем NGINX RUN apt-get install nginx -y # Выставить порт 80 EXPOSE 80 # Последний пункт - это команда для запуска NGINX в нашем контейнере CMD ["nginx", "-g", "daemon off;"] |
Команды Dockerfile
ADD — определяет файлы для копирования из файловой системы хоста в контейнер
1 |
ADD ./local/config.file /etc/service/config.file |
CMD — это команда, которая будет запускаться при запуске контейнера
1 |
CMD [“nginx”, “-g”, “daemon off;”] |
ENTRYPOINT — устанавливает приложение по умолчанию, используемое каждый раз, когда контейнер создается из образа. Если используется вместе с CMD, вы можете удалить приложение и просто определить там аргументы
1 2 |
CMD Hello World! ENTRYPOINT echo |
ENV — установка / изменение переменных среды в контейнерах, созданных из образа
1 |
ENV VERSION 1.0 |
EXPOSE — Определите, какие порты контейнера открывать
1 |
EXPOSE 80 |
FROM — Выберите базовый образ, чтобы построить новый образ поверх
1 |
FROM ubuntu:latest |
LABEL Maintainer — необязательное поле, чтобы вы могли идентифицировать себя как maintainer этого образа. Это просто ярлык
1 |
LABEL maintainer=someone@xyz.xyz” |
RUN — укажите команды для внесения изменений в ваш образ, а затем контейнеры, запускаемые с этого образа. Это включает в себя обновление пакетов, установку программного обеспечения, добавление пользователей, создание исходной базы данных, настройку сертификатов и т. д. Это команды, которые вы должны запускаться из командной строки для установки и настройки вашего приложения. Это одна из самых важных директив dockerfile
1 |
RUN apt-get update && apt-get upgrade -y && apt-get install -y nginx && rm -rf/var/lib/apt/lists/* |
USER — Определите пользователя по умолчанию, все команды будут запускаться, как в любом контейнере, созданном из вашего образа. Это может быть либо UID, либо имя пользователя.
1 |
USER docker |
VOLUME — создает точку монтирования в контейнере, связывая ее с файловыми системами, доступными хосту Docker. Новые тома заполняются уже существующим содержимым указанного места на image. Особенно уместно упомянуть, что определение томов в Dockerfile может привести к проблемам. Томами следует управлять с помощью команд docker-compose или docker run. Volumes не являются обязательными. Если у вашего приложения нет состояния (и большинство веб-приложений работают так), вам не нужно использовать тома. Volume требуются для баз данных, например, или для сохранения логов приложения.
1 |
VOLUME /var/log |
WORKDIR — Определите рабочий каталог по умолчанию для команды, определенной в инструкциях «ENTRYPOINT» или «CMD».
1 |
WORKDIR /home |
Пример dockerfile для приложения flask app python
1 2 3 4 5 6 7 8 |
FROM python:3.6.4-alpine3.6 ENV FLASK_APP=minitwit COPY . /app WORKDIR /app RUN pip install --editable . RUN flask initdb EXPOSE 5000 CMD [ "flask", "run", "--host=0.0.0.0" ] |
Видео Tutorials — Dockerfile
Video: Dockerfile Tutorial — Docker in Practice
Видео: Docker создаем собственный образ
Видео: Dockerfile. Формат и создание образа контейнера
Что такое Docker Volume?
Контейнеры Docker используются для запуска приложений в изолированной среде. По умолчанию все изменения внутри контейнера теряются при остановке контейнера. Если мы хотим сохранить данные между запусками, могут помочь Docker Volume.
Когда мы запускаем новый контейнер, Docker добавляет слой чтения-записи поверх слоев image, позволяя контейнеру работать как в стандартной файловой системе Linux .
Таким образом, любое изменение файла внутри контейнера создает рабочую копию на уровне чтения-записи. Однако, когда контейнер останавливается или удаляется, этот уровень чтения-записи теряется.
При монтировании привязки (bind mount) используется файловая система хоста, но Docker Volumes встроены в Docker. Данные хранятся где-то в хранилище, подключенном к хосту — часто в локальной файловой системе:
1 |
/var/lib/docker/volumes/ |
Volumes
— это предпочтительный механизм сохранения данных, генерируемых и используемых контейнерами Docker. Volumes
часто является лучшим выбором, чем сохранение данных в доступном для записи слое контейнера, поскольку том не увеличивает размер контейнеров, использующих его, и содержимое тома существует вне жизненного цикла данного контейнера.
В docker-compose.yml
, volumes
может появляться в двух разных местах:
1 2 3 4 5 6 7 8 9 |
version: "3.7" services: database: # ... volumes: # Вложенный ключ. Настраивает тома для определенной службы. volumes: # Ключ верхнего уровня. Объявляет тома, на которые можно ссылаться из нескольких сервисов. # ... |
Команды Docker Volume
Command | Description |
docker volume create |
Create a volume |
docker volume inspect |
Display detailed information on one or more volumes |
docker volume ls |
List volumes |
docker volume prune |
Remove all unused local volumes |
docker volume rm |
Remove one or more volumes |
Подборка видео по Docker Volume
Docker Volumes explained in 6 minutes
Docker Volumes (Тома) урок 8
Attaching volumes to containers
Как взаимодействовать с контейнером?
Docker не открывает порты по умолчанию, вы должны настроить каждый открытый порт самостоятельно!
Чтобы сопоставить порт на хосте с контейнером, нам нужно использовать флаг -p команды docker run:
1 |
docker run -p <port_number_on_host>:<port_number_on_container> <image> |
или
1 |
docker run -v <порт_на_хосте>:<порт_в_контейнере> <образ> |
Следующая команда запустит контейнер для mlflow и сопоставит порт 7000 этого контейнера с портом 7000 хоста докера:
1 |
docker run -p 7000:7000 mlflow |
Аналогичным образом будет работать контейнер для POSTGRESQL и порта 5432 этого контейнера в порт 5432 от DOCKER хоста:
1 |
docker run -p 5432:5432 postgresql |
Из-за того, что многие контейнеры связаны с одним хостом, когда служба уже запущена на порту на хосте, мы не можем запустить другой контейнер с этим же портом. Следовательно, чтобы запустить другой экземпляр postgresql на хосте, мы должны выбрать порт, который не используется.
1 |
docker run -p 1234:5432 postgresql |
Открытие всех портов Docker, как правило, не является хорошей идеей, поскольку по умолчанию все порты закрыты.
Чтобы открыть только один порт, выполните следующую строку:
1 |
docker container run -p 8080:80 -d nginx |
Порт 80 контейнера Nginx доступен для внешнего мира через порт хоста 8080.
По умолчанию Docker предоставляет порты контейнера IP-адресу 0.0.0.0 (это соответствует любому IP-адресу в системе). Вы также можете указать Docker, какой IP-адрес нужно привязать. Это может быть 127.0.0.1 или другой IP-адрес.
Чтобы привязать порт 80 контейнера Docker к порту 8000 хост-системы и IP-адресу 127.0.0.1 (он же localhost), просто выполните следующую команду:
1 |
docker run -d -p 127.0.0.1:8000:80 nginx |
Docker Networking
Docker Networking позволяет соединять контейнеры Docker вместе. Подключенные контейнеры Docker могут находиться на одном или нескольких хостах.
Docker Networking
Docker Networking Tutorial
Что такое Docker Compose?
Docker Compose — это инструмент, который упрощает запуск приложений, состоящих из нескольких контейнеров.
Docker Compose позволяет записывать команды в docker-compose.yml
файл для повторного использования. Интерфейс командной строки Docker Compose (cli) упрощает взаимодействие с вашим многоконтейнерным приложением. Docker Compose поставляется бесплатно с установленным вами Docker.
Схема работы Docker-Compose:
Docker-Compose in 12 Minutes
docker-compose.xml
docker-compose.yml
— это файл Docker-Compose, который содежит инструкции, используемые для запуска и настройки сервисов (отдельных контейнеров нашего многоконтейнерного приложения).
Структура файла docker-compose.xml (источник — Руководство по Docker Compose для начинающих):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# Файл docker-compose должен начинаться с тега версии. # Мы используем "3" так как это - самая свежая версия на момент написания этого кода. version: "3" # Следует учитывать, что docker-composes работает с сервисами. # 1 сервис = 1 контейнер. # Сервисом может быть клиент, сервер, сервер баз данных... # Раздел, в котором будут описаны сервисы, начинается с 'services'. services: # Как уже было сказано, мы собираемся создать клиентское и серверное приложения. # Это означает, что нам нужно два сервиса. # Первый сервис (контейнер): сервер. # Назвать его можно так, как нужно разработчику. # Понятное название сервиса помогает определить его роль. # Здесь мы, для именования соответствующего сервиса, используем ключевое слово 'server'. server: # Ключевое слово "build" позволяет задать # путь к файлу Dockerfile, который нужно использовать для создания образа, # который позволит запустить сервис. # Здесь 'server/' соответствует пути к папке сервера, # которая содержит соответствующий Dockerfile. build: server/ # Команда, которую нужно запустить после создания образа. # Следующая команда означает запуск "python ./server.py". command: python ./server.py # Вспомните о том, что в качестве порта в 'server/server.py' указан порт 1234. # Если мы хотим обратиться к серверу с нашего компьютера (находясь за пределами контейнера), # мы должны организовать перенаправление этого порта на порт компьютера. # Сделать это нам поможет ключевое слово 'ports'. # При его использовании применяется следующая конструкция: [порт компьютера]:[порт контейнера] # В нашем случае нужно использовать порт компьютера 1234 и организовать его связь с портом # 1234 контейнера (так как именно на этот порт сервер # ожидает поступления запросов). ports: - 1234:1234 # Второй сервис (контейнер): клиент. # Этот сервис назван 'client'. client: # Здесь 'client/ соответствует пути к папке, которая содержит # файл Dockerfile для клиентской части системы. build: client/ # Команда, которую нужно запустить после создания образа. # Следующая команда означает запуск "python ./client.py". command: python ./client.py # Ключевое слово 'network_mode' используется для описания типа сети. # Тут мы указываем то, что контейнер может обращаться к 'localhost' компьютера. network_mode: host # Ключевое слово 'depends_on' позволяет указывать, должен ли сервис, # прежде чем запуститься, ждать, когда будут готовы к работе другие сервисы. # Нам нужно, чтобы сервис 'client' дождался бы готовности к работе сервиса 'server'. depends_on: - server |
Пример сложного файла docker-compose.xml:
Если хотите реально разобраться в docker — очень рекомендую курс Docker и Docker Compose — Деплой проекта с нуля
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
version: '3' services: frontend: build: dockerfile: Dockerfile.prod context: ./frontend container_name: docker-frontend restart: unless-stopped command: serve -s build -l 3000 networks: - docker-network api: build: ./api container_name: docker-api command: npm run start restart: unless-stopped environment: - PORT=3001 - MONGO_URL=mongodb://api_db:27017/api - AUTH_API_URL=http://auth:3002/api depends_on: - api_db networks: - docker-network auth: build: ./auth container_name: docker-auth command: npm run start restart: unless-stopped environment: - PORT=3002 - MONGO_URL=mongodb://auth_db:27017/auth - API_URL=http://api:3001/api depends_on: - auth_db networks: - docker-network api_db: image: mongo:latest container_name: docker-api-db volumes: - mongodb_api:/data/db networks: - docker-network auth_db: image: mongo:latest container_name: docker-auth-db volumes: - mongodb_auth:/data/db networks: - docker-network nginx: image: nginx:stable-alpine container_name: docker-nginx ports: - "80:80" volumes: - ./nginx/nginx.conf.prod:/etc/nginx/conf.d/nginx.conf depends_on: - frontend - api - auth networks: - docker-network volumes: mongodb_api: mongodb_auth: networks: docker-network: driver: bridge |
Дополнительные подборки видео по Docker
Что такое Docker? Вечерняя школа Слёрма по Kubernetes.
Основы Docker. Большой практический выпуск
Docker Tutorial for Beginners [FULL COURSE in 3 Hours]
Docker-compose что это?
Примеры создания приложений с помощью Docker или Docker-Compose
Docker + ReactJS tutorial: Development to Production workflow + multi-stage builds + docker compose
Краткий экскурс в Linux
Базовый список команд Linux
1. Команда help
Запомнить все возможные параметры, которые можно использовать для команды, невозможно. Если вы не использовали команду ранее или в течение длительного времени, у вас есть возможность изучить возможные варианты, которые можно передать. Большинство команд поддерживают передачу справки в качестве опции и отображают небольшое сообщение о том, как использовать команду.
<command_name> --help
Чтобы получить всю возможную помощь, есть команда man. Страница руководства (сокращенно man) — это документ, который иллюстрирует, что делает команда, возможные параметры, примеры использования и т. Д. Это вся помощь, которую вы можете получить для команды
man <command_name>
2. pwd: pwd печатает имя текущего рабочего каталога. Когда вы открываете терминал, вы попадаете в домашний каталог пользователя, под которым вы вошли в систему. pwdпечатает абсолютный путь. Он начинается с /корневого каталога файловой системы Linux.
1 2 |
pwd /home/username |
3. ls: ls распечатывает все файлы, которые присутствуют в каталоге, в котором вы находитесь. Вы можете получить дополнительную информацию о файлах, а также увидеть скрытые файлы с помощью этой -al опции.
1 |
ls -al |
4. cd: cd означает смену каталога. Если вы хотите перейти в другой каталог, используйте эту команду. При использовании без аргументов cd приведет вас в ваш домашний каталог. Вы можете передать абсолютный или относительный путь команде cd. Также обратите внимание, что это . представляет текущий каталог и .. родительский каталог.
1 2 3 4 5 6 7 8 |
# takes you to your home directory (comment) cd # To navigate to the parent directory cd ../ # To change to previous working directory cd ~ |
5. mv: mv (расширяется при перемещении) используется для перемещения файлов / каталогов из location1 в location2. Его также можно использовать для переименования файла.
1 2 3 4 5 6 7 8 9 10 11 |
# Renaming file a.txt to b.txt mv a.txt b.txt # move file from directory test in your current directory to tmp mv test/test.txt /tmp/test.txt # move multiple files in your current directory to /tmp mv a.txt b.txt c.txt /tmp # move file from a dir A to dir B by specifying the absolute paths mv /var/log/test.log /tmp/test.log |
6. cp: скопируйте файлы из location1 в location2. Каталоги можно копировать с помощью -R опции.
1 2 3 4 5 |
# copy file from your home to directory to another location cp test.txt /tmp/bckup # copy contents of directories recursively cp -R test_dir /tmp/bckup |
7. rm: rm (расширяется как remove) используется для удаления файла или каталога. При удалении файла нет отмены. Так что будьте осторожны, когда хотите что-то удалить
1 2 3 4 5 6 7 8 |
# rm a file in a location rm /home/test_user/test.txt # rm a directory that is empty rm -r <location_of_dir> # rm a directory with contents in it rm -rf <location_of_dir> |
8. mkdir: mkdir (расширенный как каталог make) используется для создания нового каталога в определенном месте.
1 2 3 4 5 |
# create a directory mkdir test_dir # create intermediate directory (test_directory) when creating a directory (test_directory_child) mkdir -p /home/test_user/test_directory/test_directory_child |
9. rmdir: удалить каталог. Это альтернативная команда дляrm -rf
1 2 3 4 5 6 |
# delete a directory test_directory_child rmdir /home/test_user/test_directory/test_directory_child # Delete the intermediate directories in the path. It only works if # the intermediate directories don't contain any other child # directories other than the one specified rmdir -p test_dir/test_dir_child/test_dir_child2 |
10. cat: распечатывает содержимое файлов на терминале и возвращает обратно в командную строку. Существуют различные редакторы, которые вы можете использовать для просмотра содержимого файла (например, vim, nano и т. Д.), Но эта команда выводит содержимое в STDOUT (стандартный вывод).
1 2 |
# Print contents of a file. cat test.sh |
11. touch: Изменить file timestamps. Обновляет отметки времени в существующих файлах или создает файлы с текущей отметкой времени, если она не существует.
1 2 |
# Assuming file1.txt doesn't exist, it creates a new file touch file1.txt |
12. sudo: Сокращение от SuperUser Do , эта команда помогает вам выполнять задачи, требующие административных разрешений. Однако не рекомендуется использовать эту команду случайным образом без причины, потому что любая ошибка, сделанная пользователем root, необратима.
1 2 |
# Read the contents of syslog sudo cat /var/log/syslog |
13. find: эта команда ищет в иерархии папок файл или каталог, соответствующий указанному имени или шаблону. Он выполняет рекурсивный поиск во всех каталогах вниз по дереву.
1 2 3 4 5 6 7 8 |
# find a file with name test.txt in a folder find /home/test_user -name test.txt # find file of specific pattern recursively find . -type f -name "*.sh" -R # find and remove multiple files following a same pattern find . -type f -name "*.py" -exec rm -f {} |
14.grep: эта команда печатает все строки в файле, соответствующие определенному шаблону.
1 2 3 4 5 |
# recursively grep for a pattern in a directory tree grep -r search_field /etc/ # search two different words egrep -w 'x|y' /home/test_user/* |
15.df: Эта команда сообщает об использовании дискового пространства файловой системы.
1 2 |
# lists all the file system, use -a option in human readable format i.e., power of 1024 df -ah |
16. du: оценка использования файлового пространства. Он имеет различные параметры для отображения вывода в желаемом формате.
1 2 3 4 5 |
# Display disk usage of all files and directories in the current directory du -ah # sum of sizes of files and directories in the directory specified du -sh /home/test_user |
17. uname: Распечатать системную информацию. Есть несколько вариантов, которые можно передать, если вам нужна конкретная информация о системе, такая как версия ядра, тип процессора, аппаратная платформа и т. Д.
1 2 |
# Prints all the information about the system uname -a |
18. lsblk: lsblk (Expanded as list block devices) используется для отображения всех блочных устройств в виде дерева. Он также предоставляет информацию о разделах, имеющихся на блочном устройстве.
1 2 3 4 5 |
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 55.9G 0 disk └─sda1 8:2 0 55.9G 0 part / sdb 8:16 0 111.8G 0 disk └─sdb1 8:17 0 111.8G 0 part |
19. hostname: распечатать / установить имя хоста машины. Только суперпользователь может обновить имя хоста
1 2 3 4 5 |
# print hostname of system hostname # set hostname hostname set name <host_name> |
20. tail: отображает последнюю часть файлов. По умолчанию, если файл передан, он печатает последние 10 строк
1 2 |
# output appended data as the file grows; tail -f /var/log/syslog |
Linux File System/Structure Explained
Основы Ubuntu Linux: apt-get, bash, командная строка
Linux command line for beginners
Права Доступа и владения файлами и директориями
Установка Докера на Linux. Install Docker on Ubuntu 20.04
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# Обновляем существующий список пакето sudo apt update # Далее устанавливаем пакеты, которые позволят apt использовать пакеты через HTTPS: sudo apt install apt-transport-https ca-certificates curl software-properties-common # Далее добавим ключ GPG для официального репозитория Docker curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # Добавляем ремозиторий докер в источники apt sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable" # Обновляем базу данных пакетов и добавим в нее пакеты Docker из недавно добавленного репозитория sudo apt update # Далее проверим, что установка будет выполняться из репозитория Docker, а не из репозитория Ubuntu по умолчанию apt-cache policy docker-ce # Мы должны получить следующий ответ (номер версии Docker может отличаться): # root@apache1superset:~# apt-cache policy docker-ce # docker-ce: # Installed: (none) # Candidate: 5:20.10.6~3-0~ubuntu-focal # Version table: # 5:20.10.6~3-0~ubuntu-focal 500 # 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages # 5:20.10.5~3-0~ubuntu-focal 500 # 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages # 5:20.10.4~3-0~ubuntu-focal 500 # 500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages # 5:20.10.3~3-0~ubuntu-focal 500 # ... # Далее устанавливаем докер командой (на доп.вопрос отвечаем "yes") sudo apt install docker-ce # Docker будет автоматически установлен, также запустится демон-процесс и будет активирован запуск при загрузке. # Проверить статус докера можно командой (что он running/active): sudo systemctl status docker # Загружаем текущую стабильную версию Docker Compose sudo curl -L "https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # Применяем разрешения для исполняемого файла к двоичному файлу sudo chmod +x /usr/local/bin/docker-compose # Чтобы протестировать docker-compose (установилась версия или нет), запустим команду docker-compose --version |
Portainer — что это такое?
Portainer — это легкий пользовательский интерфейс управления, который позволяет легко управлять различными средами Docker и docker-containers. С помощью Portainer вы сможете в несколько кликов запустить на вашем сервере готовые контейнеры с популярным ПО и связать их между собой.
Описание с Github: Making Docker and Kubernetes management easy. На момент написания статьи 18.7k stars
Этот мощный набор инструментов с открытым исходным кодом, насчитывающий более полумиллиона постоянных пользователей, позволяет легко создавать и управлять контейнерами в Docker, Swarm, Kubernetes и Azure ACI.
По умолчанию мы управляем Docker через командную строку. Portainer предоставляет отличный и очень информативный пользовательский интерфейс для управления всеми аспектами Docker. Это диаграммы и информационные панели, которые предоставляют диаграммы использования ресурсов контейнера в реальном времени. Запуск и управление контейнерами и стеками можно выполнить несколькими щелчками мыши.
После установки portainer и захода внутрь вы видете первое окно настройки. У меня докер развернут локально, поэтому я подключаюсь через пункт local, нажимаю connect и попадаю в админку.
Домашняя страница админки выглядит следующим образом. Экземпляры Docker, о которых знает Portainer, отображаются в центральной части экрана.
Щелкните экземпляр Local Docker, чтобы увидеть панель мониторинга (Dashboard), на которой отображается общий обзор того, что в настоящее время выполняется в Docker.
Здесь нам открывается вся суть инструмента:
- Можно создать в несколько кликов из шаблонов приложения в докере
- Можно управлять сетью, контейнерами.
- Также можно создавать и настраивать Volumes:
Portainer — отличный инструмент, который можно использовать для управления контейнерами Docker, службами Swarm и другими ресурсами с помощью простого и интуитивно понятного пользовательского веб-интерфейса. Portainer предоставляет несколько бесплатных функций и платных плагинов, которые могут улучшить взаимодействие с пользователем при управлении кластерами Docker.
Установка Portainer внутри Docker
1 2 3 4 5 6 7 8 |
#portainer install sudo docker volume create portainer_data docker run -d -p 8000:8000 -p 9443:9443 --name portainer \ --restart=always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:2.9.3 |
Далее нужно перейти по ссылке https://68.133.234.42:9443/ (замените 68.133.234.42 на ваш адрес).
GitHub Actions — CI/CD Pipeline with Docker
Использованные источники для подготовки статьи и другие полезные статьи
- https://medium.com/@BeNitinAgarwal/lifecycle-of-docker-container-d2da9f85959
- Микросервисы и контейнеры Docker. Парминдер Сингх Кочер. Addison-Wesley. ДМК
- Learn Enough Docker to be Useful
- Building Docker Images with Dockerfiles
- [Docker] Основы Docker: Dockerfile и docker-compose.yml
Leave a Reply