DevOps
Как поддерживать штуки в контейнерах
Запущенные контейнеры:
docker psИменованные вольюмы:
docker volume lsОстановить/возобновить работу контейнера (гибернация-ish):
docker stop <container>/
docker start <container>Зайти внутрь работающего (в фоне) контейнера:
docker exec -it <container> sh(или
bash, если он там есть)
Создать новый (временный) контейнер из образа и подключить к нему консоль:
docker run --rm -it <container>Если сразу запускается приложение, а надо зайти в консоль:
docker run --rm -it <container> shили
docker run --rm -it --entrypoint sh <container>(в зависимости от вутреннего устройства образа)
Если надо пробросить в контейнер по пути
/vименованный вольюм (или абсолютный путь с хоста):
docker run --rm -itv <volume_or_path>:/v <container> shЕсли надо пробросить HTTP порт 80 из контейнера на хост (в порт 8080 хоста):
docker run --rm -itp 8080:80 <container>
Создать контейнер из образа со всеми необходимыми переменными и настройками, и после запуска оставить его работать в фоне:
docker-compose up -d(из папки, в которой есть файл
docker-compose.yml)
Забрать файл из именованного вольюма на хост:
Если есть работающий контейнер, в который смонтирован нужный вольюм:
Узнать куда смонтирован вольюм:
docker inspect <container>docker cp <path_in_container>:<container> <extracted_path>
Если нельзя рассчитывать на контейнеры:
proxy=$(docker run --rm -dv <volume>:/v busybox sleep 900) docker cp $proxy:/v <extracted_path> docker rm --force $proxyCopy
Если надо извлечь один файл в одну команду, можно сделать это через stdio:
docker run --rm -iv <volume>:/v busybox sh -c 'cat /v/<path>' > <extracted_file>
Заложить файл в именованный вольюм:
Один файл через stdio:
cat <file_on_host> | docker run --rm -iv <volume>:/v busybox sh -c 'cat > /v/<path>'Любой путь при работающем контейнере:
docker cp <path_on_host> <container>:<path_in_container>
Правильное обращение с логами:
Настроить journald logging driver (это спасёт от переполнения диска логами, так как у дефолтного драйвера нет ротации).
Читать старые логи
sudo journalctl -ru dockerСмотреть стрим
Всех контейнеров
sudo journalctl -fu dockerОдного контейнера
docker logs --tail=20 --follow <container>
Если тут не рассмотрен какой-то важный сценарий, обращайтесь к Химуре.