________________________________________________
/ \
| _________________________________________ |
| | | |
| | docker ps -a | |
| | | |
| | Docker compose | |
| | | |
| | Dockerfile | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| |_________________________________________| |
| |
\_________________________________________________/
\___________________________________/
___________________________________________
_-' .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-. --- `-_
_-'.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.--. .-.-.`-_
_-'.-.-.-. .---.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-`__`. .-.-.-.`-_
_-'.-.-.-.-. .-----.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-----. .-.-.-.-.`-_
_-'.-.-.-.-.-. .---.-. .-------------------------. .-.---. .---.-.-.-.`-_
:-------------------------------------------------------------------------:
`---._.-------------------------------------------------------------._.---'
==Данный пост находится в процессе написания==
Одной из технологий, которую я использую, является средство контейнеризации Docker. В данной статье я расскажу об основах, которые чаще всего применяю в своей деятельности.
Запуск через командную строку
Первый способ работы с Docker, база, так сказать. В данном случае работа с контейнерами происходит также как и с большинством программ в Linux- через терминал. После названия программы прописываются ключи и параметры. Самый простой способ запуска контейнера выглядит примерно так:
$ docker run nginx
В данному случае будет загружен из Docker Hub (если это не было сделано ранее) и запущен избранный контейнер (в нашем случае это nginx). Однако, в данном случает пользы от контейнера будет мало. Предлагаю дополнить команду:
docker run -v /opt/mynginx:/usr/share/nginx/html -e NGINX_HOST=balalaika.com -e NGINX_PORT=80 -p 8080:80 -d nginx
Разберём, что же мы сделали:
Ключ | Описание |
---|---|
-v | Связь локальной директории и директории в контейнере. Этот параметр позволяет сохранить данные приложений в локальной машине, чтобы они не потерялись после удаления контейнера |
-p | Перенаправить данные с одного порта на другой. В данном примере данные извне приходят на порт 8080 локальной машины и перенаправляются на 80 порт контейнера |
-d | За пустить контейнер как фоновый процесс. |
-e | Прописать параметры окружения. Их можно использовать в дальнейшем. |
Теперь наш контейнер сможет сохранять данные в локальной директории, а также к нему можно будет подключиться извне по порту 8080.
Применение Docker Compose
По сути, Docker Compose- это способ упростить развёртывание контейнеров. В данном случае создаётся .yml файл, в котором описываются все необходимые инструкции. Docker считывает инструкции из файла и выполняет их. В таком случае отпадает необходимость каждый раз вводить длинные команды в строку и самостоятельно запускать контейнеры по отдельности. Также стоит отметить, что в виде .yml файла инструкции становится проще читать. Приведённая ранее команда в рамках Docker Compose будет выглядеть следующим образом:
web:
image: nginx
volumes:
- /opt/mynginx:/usr/share/nginx/html
ports:
- "8080:80"
environment:
- NGINX_HOST=balalaika.com
- NGINX_PORT=80
В одном Docker Compose фале может содержаться несколько инструкций по запуску контейнеров. Это удобно в ситуации, когда запускаются контейнеры, работающие в связке. Для того, чтобы передать запустить Docker Compose, необходимо прописать команду:
docker compose up
Работа с контейнерами
Мало контейнер запустить, его нужно ещё уметь остановить, убить, удалить и так далее. Далее рассмотрим что да как. Далее будут приведены наиболее часто встречающиеся команды:
Команда | Описание |
---|---|
docker ps | Вывести список запущенных контейнеров. Чаще всего используют вместе с ключом -a, что позволяет вывести список не только запущенных, но и остановленных контейнеров |
docker images | Вывести список докер-образов, доступных в системе |
docker stop | Остановить запущенный контейнер |
docker kill | |
docker rm | Удалить остановленный контейнер |
docker rmi | Удалить докер-образ |
docker exec | Подключиться к контейнеру. |
docker inspect | Вывести информацию о контейнере |
Написание Dockerfile
Docker Swarm
Очень интересная и важная тема в рамках Docekr. Как жаль, что я ей ещё не занимался. Данный раздел будет обновлён в дальнейшем.
Типичный пример работы с Docker:
В моём случае план внедрения какого-либо сервиса выглядит следующим образом:
- Найти интересующий нас сервис
- Поднять Docker контейнер
- Настроить переадресацию портов в роутере
- Подключиться к сервису и настроить его
Всё просто и незамысловато. Далее будет приведён пример запуска сервиса Gitea На официальном сайте представлены очень подробные инструкции. Будем следовать им. Первым делом подготовка. Необходимо создать директорию, в которой будем хранить Docker-compose файл:
mkdir gitea && cd gitea
vim docker-compose.yml
Итак, мы внутри, пока что, пустого файла docker-compose. В необходимо вставить наиболее подходящую для Вас инструкцию. Я остановлюсь на той, которая предлагает использование Gitea в связке с PostgreSQL: ==Не забудьте в данной инструкции сменить стандартные параметры на свои==
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.21.4
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
depends_on:
- db
db:
image: postgres:14
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=gitea
- POSTGRES_DB=gitea
networks:
- gitea
volumes:
- ./postgres:/var/lib/postgresql/data
Всё прописали, запускаем:
docker compose up -d
Ждём, пока всё скачается и запустится. Если всё сделано правильно, то по адресу http://localhost:3000/
будет доступна страница установки. Прошли все пункты и, собственно, всё.
Теперь у нас есть свой собственный сервис, аналогичный GitHub.